diff options
author | Karl Berry <karl@freefriends.org> | 2020-12-31 21:53:19 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-12-31 21:53:19 +0000 |
commit | ec37366cecf0d00520cd925a8c9db8519edc27ed (patch) | |
tree | b8a77abf7bf26f497add10ac0591e5601ede59fb /Master/texmf-dist | |
parent | eddf23a96547ce5c67581401d225273e80f76bbb (diff) |
latex (31dec20)
git-svn-id: svn://tug.org/texlive/trunk@57276 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
100 files changed, 7453 insertions, 6157 deletions
diff --git a/Master/texmf-dist/doc/latex/base/README.md b/Master/texmf-dist/doc/latex/base/README.md index d566ca97ce0..7c6328be6d1 100644 --- a/Master/texmf-dist/doc/latex/base/README.md +++ b/Master/texmf-dist/doc/latex/base/README.md @@ -1,7 +1,7 @@ The LaTeX kernel ================ -Release 2020-10-01 patch level 2 +Release 2020-10-01 patch level 3 Overview -------- diff --git a/Master/texmf-dist/doc/latex/base/alltt.pdf b/Master/texmf-dist/doc/latex/base/alltt.pdf Binary files differindex dce36a436c2..5cb6410fa1a 100644 --- a/Master/texmf-dist/doc/latex/base/alltt.pdf +++ b/Master/texmf-dist/doc/latex/base/alltt.pdf diff --git a/Master/texmf-dist/doc/latex/base/cfgguide.pdf b/Master/texmf-dist/doc/latex/base/cfgguide.pdf Binary files differindex 2f9e6e99748..c0cb3f3c6fb 100644 --- a/Master/texmf-dist/doc/latex/base/cfgguide.pdf +++ b/Master/texmf-dist/doc/latex/base/cfgguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/changes.txt b/Master/texmf-dist/doc/latex/base/changes.txt index 29f3d2937fd..cc8d59b61b5 100644 --- a/Master/texmf-dist/doc/latex/base/changes.txt +++ b/Master/texmf-dist/doc/latex/base/changes.txt @@ -11,6 +11,78 @@ All changes above are only part of the development branch for the next release. ================================================================================ ######################### +# 2020-10-01 PL 3 Release +######################### + +2020-12-18 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * lthooks.dtx: + Moved 'top-level' code label at the very end of hooks. + - In reverse hooks, 'top-level' goes at the beginning. + - 'top-level' cannot be used as a label outside of the top-level. + - The label for the 'top-level' cannot be changed. + - Simplified internal managing of default label. + Renamed \DeclareDefaultHookLabel to \SetDefaultHookLabel (the old name + will be kept until the next release). + Provide \PushDefaultHookLabel and \PopDefaultHookLabel. + Fixed a small bug in \ShowHook and \LogHook. + + * ltclass.dtx: + Remove \@expl@@@hook@curr@name@push@@n from \@pushfilename to + follow changes to lthooks.dtx. + +2020-12-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * ltfssbas.dtx (subsection{Macros for the user}): + Drop ``m'' if the series value is a member of a fixed list + and issue warning if doing it (gh/453) + +2020-11-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * latexrelease.ins: + reorder module loading to match the order used + in the format to correctly resolve dependencies (gh/434) + + * ltexpl.dtx (subsection{Loader}): + Load xparse in latexrelease if necessary and add missing + IncludeInRelease guards (gh/434) + + * ltdefns.dtx, ltfilehook.dtx, lthooks.dtx, ltxshipout.dtx: + Add rollback support for forward case (gh/434) + +2020-11-20 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * ltclass.dtx: + Remove file path from \@currname and use only \@currname to identify + a package internally (gh/422). + Add \@currpath and (temporarily) \@kernel@currpathstack. + In \ProvidesPackage check the argument with \strcmp instead of \ifx. + In case of substitution, copy the option list to the requested package. + + * ltfilehook.dtx: + Keep path in the replacement file (#2) in \declare@file@substitution. + In case of a replacement, pass the actually loaded file to \@addtofilelist. + Explicitly clear replacement flag after using it. + +2020-11-17 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * fntguide.tex: + Updated documentation of virtual shapes \updefault and \ulcdefault + +2020-11-09 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * ltmath.dtx: + \negmedspace and \negthickspace have been only in amsmath, + so we need to undefine for rollback because amsmath used + \newcommand back then (gh/423) + +2020-11-09 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * ltclass.dtx (section{Package/class rollback mechanism}): + Change help text for suspicous rollback, because the package may have + existed then --- there is just no rollback data (gh/423) + +######################### # 2020-10-01 PL 2 Release ######################### diff --git a/Master/texmf-dist/doc/latex/base/classes.pdf b/Master/texmf-dist/doc/latex/base/classes.pdf Binary files differindex b0be55c53ff..05b9379ef4f 100644 --- a/Master/texmf-dist/doc/latex/base/classes.pdf +++ b/Master/texmf-dist/doc/latex/base/classes.pdf diff --git a/Master/texmf-dist/doc/latex/base/clsguide.pdf b/Master/texmf-dist/doc/latex/base/clsguide.pdf Binary files differindex 1a7e752cc3a..c5d32dda9f7 100644 --- a/Master/texmf-dist/doc/latex/base/clsguide.pdf +++ b/Master/texmf-dist/doc/latex/base/clsguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/cmfonts.pdf b/Master/texmf-dist/doc/latex/base/cmfonts.pdf Binary files differindex c3502760ce0..fe8f0083f69 100644 --- a/Master/texmf-dist/doc/latex/base/cmfonts.pdf +++ b/Master/texmf-dist/doc/latex/base/cmfonts.pdf diff --git a/Master/texmf-dist/doc/latex/base/cyrguide.pdf b/Master/texmf-dist/doc/latex/base/cyrguide.pdf Binary files differindex 1331bbc54fb..6fa40a338b6 100644 --- a/Master/texmf-dist/doc/latex/base/cyrguide.pdf +++ b/Master/texmf-dist/doc/latex/base/cyrguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/doc.pdf b/Master/texmf-dist/doc/latex/base/doc.pdf Binary files differindex dcb78001b3c..5feed953988 100644 --- a/Master/texmf-dist/doc/latex/base/doc.pdf +++ b/Master/texmf-dist/doc/latex/base/doc.pdf diff --git a/Master/texmf-dist/doc/latex/base/docstrip.pdf b/Master/texmf-dist/doc/latex/base/docstrip.pdf Binary files differindex aeda25af000..2e31d253a1b 100644 --- a/Master/texmf-dist/doc/latex/base/docstrip.pdf +++ b/Master/texmf-dist/doc/latex/base/docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/base/encguide.pdf b/Master/texmf-dist/doc/latex/base/encguide.pdf Binary files differindex 286a167553a..249493684e9 100644 --- a/Master/texmf-dist/doc/latex/base/encguide.pdf +++ b/Master/texmf-dist/doc/latex/base/encguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/exscale.pdf b/Master/texmf-dist/doc/latex/base/exscale.pdf Binary files differindex 8d33cdefab2..339a4d161a3 100644 --- a/Master/texmf-dist/doc/latex/base/exscale.pdf +++ b/Master/texmf-dist/doc/latex/base/exscale.pdf diff --git a/Master/texmf-dist/doc/latex/base/fix-cm.pdf b/Master/texmf-dist/doc/latex/base/fix-cm.pdf Binary files differindex 07ff74d6879..f39aca25258 100644 --- a/Master/texmf-dist/doc/latex/base/fix-cm.pdf +++ b/Master/texmf-dist/doc/latex/base/fix-cm.pdf diff --git a/Master/texmf-dist/doc/latex/base/fntguide.pdf b/Master/texmf-dist/doc/latex/base/fntguide.pdf Binary files differindex b3824b59a13..97c8a844f75 100644 --- a/Master/texmf-dist/doc/latex/base/fntguide.pdf +++ b/Master/texmf-dist/doc/latex/base/fntguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/fntguide.tex b/Master/texmf-dist/doc/latex/base/fntguide.tex index b6576a02370..7e0928c51b5 100644 --- a/Master/texmf-dist/doc/latex/base/fntguide.tex +++ b/Master/texmf-dist/doc/latex/base/fntguide.tex @@ -42,7 +42,7 @@ newer NFSS features of 2020}\\ All rights reserved.} -\date{July 2020} +\date{November 2020} \begin{document} @@ -340,22 +340,25 @@ box warning, for example: \end{verbatim} The author commands for fonts set the five attributes: \begin{center} + \hspace*{-1em}% \begin{tabular}{rcl} \emph{Author command} & \emph{Attribute} & \emph{Value in} |article| \emph{class} \\ |\textnormal{..}| or |\normalfont| & family & |cmr| \\ + & series & |m| \\ + & shape & |n| \\[1pt] |\textrm{..}| or |\rmfamily| & family & |cmr| \\ |\textsf{..}| or |\sffamily| & family & |cmss| \\ |\texttt{..}| or |\ttfamily| & family & |cmtt| \\ |\textmd{..}| or |\mdseries| & series & |m| \\ - |\textbf{..}| or |\bfseries| & series & |bx| \\ - |\textup{..}| or |\upshape| & shape & |n| \\ + |\textbf{..}| or |\bfseries| & series & |bx| \\[1pt] |\textit{..}| or |\itshape| & shape & |it| \\ |\textsl{..}| or |\slshape| & shape & |sl| \\ |\textsc{..}| or |\scshape| & shape & |sc| \\ |\textssc{..}| or |\sscshape| & shape & |ssc| \\ |\textsw{..}| or |\swshape| & shape & |sw| \\ - |\textulc{..}| or |\ulcshape| & shape & |ulc| \\ + |\textulc{..}| or |\ulcshape| & shape & |ulc| (virtual) $\to$ |n|, |it|, |sl| or |ssc| \\ + |\textup{..}| or |\upshape| & shape & |up| (virtual) $\to$ |n| or |sc| \\[1pt] |\tiny| & size & |5pt| \\ |\scriptsize| & size & |7pt| \\ |\footnotesize| & size & |8pt| \\ @@ -520,8 +523,9 @@ and the |ssub| size function, see Section~\ref{sec:sizefunct}. The shapes selected by |\textit|, |\itshape|, |\textsl|, |\slshape|, |\textsc|, |\scshape|, |\textssc|, |\sscshape|, |\textsw|, |\swshape|, |\textulc|, |\ulcshape|, |\textup| and |\upshape|. By default these are -|it|, |sl|, |sc|, |ssc|, |sw|, |ulc| and |n|. |ulc| is special here -since it is a virtual one; it doesn't exist as a real shape. The +|it|, |sl|, |sc|, |ssc|, |sw|, |ulc| and |up|. Note that |ulc| and |up| are special here +because they are virtual shapes; they don't exist as real shape values. Instead they alter +the existing shape value based on rules, i.e., the result depends on context. The respective macros |\textulc| or |\ulcshape| change small capitals back to upper/lower case but will not change the font with respect to italics, slanted or swash. |\upshape| or |\textup| in contrast will diff --git a/Master/texmf-dist/doc/latex/base/graphpap.pdf b/Master/texmf-dist/doc/latex/base/graphpap.pdf Binary files differindex 8ebd4c91d3b..8cad84bb4c1 100644 --- a/Master/texmf-dist/doc/latex/base/graphpap.pdf +++ b/Master/texmf-dist/doc/latex/base/graphpap.pdf diff --git a/Master/texmf-dist/doc/latex/base/ifthen.pdf b/Master/texmf-dist/doc/latex/base/ifthen.pdf Binary files differindex 6218e4883a3..be2ea9f956f 100644 --- a/Master/texmf-dist/doc/latex/base/ifthen.pdf +++ b/Master/texmf-dist/doc/latex/base/ifthen.pdf diff --git a/Master/texmf-dist/doc/latex/base/inputenc.pdf b/Master/texmf-dist/doc/latex/base/inputenc.pdf Binary files differindex 0ee0cdd0ff2..4c06af39d52 100644 --- a/Master/texmf-dist/doc/latex/base/inputenc.pdf +++ b/Master/texmf-dist/doc/latex/base/inputenc.pdf diff --git a/Master/texmf-dist/doc/latex/base/latexchanges.pdf b/Master/texmf-dist/doc/latex/base/latexchanges.pdf Binary files differindex d78a1e3b5ad..97fcc3330b7 100644 --- a/Master/texmf-dist/doc/latex/base/latexchanges.pdf +++ b/Master/texmf-dist/doc/latex/base/latexchanges.pdf diff --git a/Master/texmf-dist/doc/latex/base/latexrelease.pdf b/Master/texmf-dist/doc/latex/base/latexrelease.pdf Binary files differindex f458d1a97cb..d6190767823 100644 --- a/Master/texmf-dist/doc/latex/base/latexrelease.pdf +++ b/Master/texmf-dist/doc/latex/base/latexrelease.pdf diff --git a/Master/texmf-dist/doc/latex/base/latexsym.pdf b/Master/texmf-dist/doc/latex/base/latexsym.pdf Binary files differindex 88db5ce7015..436ea23f3ab 100644 --- a/Master/texmf-dist/doc/latex/base/latexsym.pdf +++ b/Master/texmf-dist/doc/latex/base/latexsym.pdf diff --git a/Master/texmf-dist/doc/latex/base/lb2.pdf b/Master/texmf-dist/doc/latex/base/lb2.pdf Binary files differindex 4885ef56469..7d989cb0a0e 100644 --- a/Master/texmf-dist/doc/latex/base/lb2.pdf +++ b/Master/texmf-dist/doc/latex/base/lb2.pdf diff --git a/Master/texmf-dist/doc/latex/base/letter.pdf b/Master/texmf-dist/doc/latex/base/letter.pdf Binary files differindex 85986ca947b..104f1157e23 100644 --- a/Master/texmf-dist/doc/latex/base/letter.pdf +++ b/Master/texmf-dist/doc/latex/base/letter.pdf diff --git a/Master/texmf-dist/doc/latex/base/lgc2.pdf b/Master/texmf-dist/doc/latex/base/lgc2.pdf Binary files differindex bfed998126d..f900bfefb39 100644 --- a/Master/texmf-dist/doc/latex/base/lgc2.pdf +++ b/Master/texmf-dist/doc/latex/base/lgc2.pdf diff --git a/Master/texmf-dist/doc/latex/base/lppl.pdf b/Master/texmf-dist/doc/latex/base/lppl.pdf Binary files differindex 18c3995534a..20a630928c5 100644 --- a/Master/texmf-dist/doc/latex/base/lppl.pdf +++ b/Master/texmf-dist/doc/latex/base/lppl.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf b/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf Binary files differindex e35be13efef..fcbf09fe980 100644 --- a/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf +++ b/Master/texmf-dist/doc/latex/base/ltfilehook-code.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf b/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf Binary files differindex 7bd9392a4d4..bf7f37f22b1 100644 --- a/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf +++ b/Master/texmf-dist/doc/latex/base/ltfilehook-doc.pdf diff --git a/Master/texmf-dist/doc/latex/base/lthooks-code.pdf b/Master/texmf-dist/doc/latex/base/lthooks-code.pdf Binary files differindex e181e4bb27e..5bb5d7899fb 100644 --- a/Master/texmf-dist/doc/latex/base/lthooks-code.pdf +++ b/Master/texmf-dist/doc/latex/base/lthooks-code.pdf diff --git a/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf b/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf Binary files differindex 59499741413..1ca6ef3a6d4 100644 --- a/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf +++ b/Master/texmf-dist/doc/latex/base/lthooks-doc.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltluatex.pdf b/Master/texmf-dist/doc/latex/base/ltluatex.pdf Binary files differindex e20118360c3..7e559ecf456 100644 --- a/Master/texmf-dist/doc/latex/base/ltluatex.pdf +++ b/Master/texmf-dist/doc/latex/base/ltluatex.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews.pdf b/Master/texmf-dist/doc/latex/base/ltnews.pdf Binary files differindex 902ff811d94..7da22f913b4 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews01.pdf b/Master/texmf-dist/doc/latex/base/ltnews01.pdf Binary files differindex 87528850086..54c09ea91b3 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews01.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews01.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews02.pdf b/Master/texmf-dist/doc/latex/base/ltnews02.pdf Binary files differindex a4dff175fad..cfbebec5824 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews02.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews02.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews03.pdf b/Master/texmf-dist/doc/latex/base/ltnews03.pdf Binary files differindex b5cfd1312bf..83b8cba6a6c 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews03.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews03.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews04.pdf b/Master/texmf-dist/doc/latex/base/ltnews04.pdf Binary files differindex eff5873f9a5..82f78370d24 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews04.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews04.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews05.pdf b/Master/texmf-dist/doc/latex/base/ltnews05.pdf Binary files differindex f963a2945a8..a3a3ba26083 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews05.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews05.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews06.pdf b/Master/texmf-dist/doc/latex/base/ltnews06.pdf Binary files differindex ce4e6027fdd..f08f1898409 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews06.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews06.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews07.pdf b/Master/texmf-dist/doc/latex/base/ltnews07.pdf Binary files differindex 29e99ec8828..c44afe8b772 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews07.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews07.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews08.pdf b/Master/texmf-dist/doc/latex/base/ltnews08.pdf Binary files differindex 9a29dfdc014..575c90644eb 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews08.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews08.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews09.pdf b/Master/texmf-dist/doc/latex/base/ltnews09.pdf Binary files differindex 3792d6944e2..938671e92ba 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews09.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews09.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews10.pdf b/Master/texmf-dist/doc/latex/base/ltnews10.pdf Binary files differindex 08f4794fb0c..1b065aff918 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews10.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews10.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews11.pdf b/Master/texmf-dist/doc/latex/base/ltnews11.pdf Binary files differindex 47d305bb00c..b5dbd3f7223 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews11.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews11.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews12.pdf b/Master/texmf-dist/doc/latex/base/ltnews12.pdf Binary files differindex 353e08f72f7..103e8b18e3f 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews12.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews12.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews13.pdf b/Master/texmf-dist/doc/latex/base/ltnews13.pdf Binary files differindex 9f042622865..00416913297 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews13.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews13.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews14.pdf b/Master/texmf-dist/doc/latex/base/ltnews14.pdf Binary files differindex 07bf87f3770..2bc925c555b 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews14.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews14.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews15.pdf b/Master/texmf-dist/doc/latex/base/ltnews15.pdf Binary files differindex 48d7b278e49..820600a8df0 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews15.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews15.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews16.pdf b/Master/texmf-dist/doc/latex/base/ltnews16.pdf Binary files differindex 86bce9ff9bb..3c4336dd45c 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews16.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews16.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews17.pdf b/Master/texmf-dist/doc/latex/base/ltnews17.pdf Binary files differindex 4c4edcce1df..cecb7a07dc9 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews17.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews17.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews18.pdf b/Master/texmf-dist/doc/latex/base/ltnews18.pdf Binary files differindex dbad7935b3e..494f0fa0ec7 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews18.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews18.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews19.pdf b/Master/texmf-dist/doc/latex/base/ltnews19.pdf Binary files differindex 254e7958084..2c4a3b518a6 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews19.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews19.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews20.pdf b/Master/texmf-dist/doc/latex/base/ltnews20.pdf Binary files differindex 96ec4b61372..b1e5c67560c 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews20.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews20.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews21.pdf b/Master/texmf-dist/doc/latex/base/ltnews21.pdf Binary files differindex 5829c7a0224..eb0264792cb 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews21.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews21.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews22.pdf b/Master/texmf-dist/doc/latex/base/ltnews22.pdf Binary files differindex 8a6b871ce81..ddfb6d3d3ac 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews22.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews22.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews23.pdf b/Master/texmf-dist/doc/latex/base/ltnews23.pdf Binary files differindex 518555e7845..a32e1efbb42 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews23.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews23.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews24.pdf b/Master/texmf-dist/doc/latex/base/ltnews24.pdf Binary files differindex 11210010a2c..6dc47bb3de1 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews24.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews24.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews25.pdf b/Master/texmf-dist/doc/latex/base/ltnews25.pdf Binary files differindex 4965241eec9..82908a28f20 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews25.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews25.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews26.pdf b/Master/texmf-dist/doc/latex/base/ltnews26.pdf Binary files differindex 9af3fd445a5..604db557097 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews26.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews26.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews27.pdf b/Master/texmf-dist/doc/latex/base/ltnews27.pdf Binary files differindex 1359bc7efc5..472ea7679f4 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews27.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews27.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews28.pdf b/Master/texmf-dist/doc/latex/base/ltnews28.pdf Binary files differindex f5cb87308bb..14ef2d02dda 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews28.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews28.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews29.pdf b/Master/texmf-dist/doc/latex/base/ltnews29.pdf Binary files differindex 5d618bc87ed..e8197be1b30 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews29.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews29.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews30.pdf b/Master/texmf-dist/doc/latex/base/ltnews30.pdf Binary files differindex 35846d4fc90..920d022e991 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews30.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews30.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews31.pdf b/Master/texmf-dist/doc/latex/base/ltnews31.pdf Binary files differindex f0778f9d30c..6a62e971235 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews31.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews31.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltnews32.pdf b/Master/texmf-dist/doc/latex/base/ltnews32.pdf Binary files differindex aed46fe5731..93536d352ae 100644 --- a/Master/texmf-dist/doc/latex/base/ltnews32.pdf +++ b/Master/texmf-dist/doc/latex/base/ltnews32.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf b/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf Binary files differindex c5cfd30a884..f95e0ebf754 100644 --- a/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf +++ b/Master/texmf-dist/doc/latex/base/ltshipout-code.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf b/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf Binary files differindex 6a4b41f60ec..074774312a9 100644 --- a/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf +++ b/Master/texmf-dist/doc/latex/base/ltshipout-doc.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltx3info.pdf b/Master/texmf-dist/doc/latex/base/ltx3info.pdf Binary files differindex 620a9b2c6f7..070c822a17e 100644 --- a/Master/texmf-dist/doc/latex/base/ltx3info.pdf +++ b/Master/texmf-dist/doc/latex/base/ltx3info.pdf diff --git a/Master/texmf-dist/doc/latex/base/ltxdoc.pdf b/Master/texmf-dist/doc/latex/base/ltxdoc.pdf Binary files differindex 5080c0e0bc5..e5d6fb99cff 100644 --- a/Master/texmf-dist/doc/latex/base/ltxdoc.pdf +++ b/Master/texmf-dist/doc/latex/base/ltxdoc.pdf diff --git a/Master/texmf-dist/doc/latex/base/makeindx.pdf b/Master/texmf-dist/doc/latex/base/makeindx.pdf Binary files differindex 97b26b4e72e..7993372c012 100644 --- a/Master/texmf-dist/doc/latex/base/makeindx.pdf +++ b/Master/texmf-dist/doc/latex/base/makeindx.pdf diff --git a/Master/texmf-dist/doc/latex/base/manual.pdf b/Master/texmf-dist/doc/latex/base/manual.pdf Binary files differindex 0958c15eb64..50811f5d4c7 100644 --- a/Master/texmf-dist/doc/latex/base/manual.pdf +++ b/Master/texmf-dist/doc/latex/base/manual.pdf diff --git a/Master/texmf-dist/doc/latex/base/modguide.pdf b/Master/texmf-dist/doc/latex/base/modguide.pdf Binary files differindex 7dafc9125ab..5f51237557c 100644 --- a/Master/texmf-dist/doc/latex/base/modguide.pdf +++ b/Master/texmf-dist/doc/latex/base/modguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/nfssfont.pdf b/Master/texmf-dist/doc/latex/base/nfssfont.pdf Binary files differindex 8292894e71a..8f189189d9c 100644 --- a/Master/texmf-dist/doc/latex/base/nfssfont.pdf +++ b/Master/texmf-dist/doc/latex/base/nfssfont.pdf diff --git a/Master/texmf-dist/doc/latex/base/proc.pdf b/Master/texmf-dist/doc/latex/base/proc.pdf Binary files differindex a046c4fbfa6..35ba9262e07 100644 --- a/Master/texmf-dist/doc/latex/base/proc.pdf +++ b/Master/texmf-dist/doc/latex/base/proc.pdf diff --git a/Master/texmf-dist/doc/latex/base/slides.pdf b/Master/texmf-dist/doc/latex/base/slides.pdf Binary files differindex 37779f807a4..b4d275289cc 100644 --- a/Master/texmf-dist/doc/latex/base/slides.pdf +++ b/Master/texmf-dist/doc/latex/base/slides.pdf diff --git a/Master/texmf-dist/doc/latex/base/slifonts.pdf b/Master/texmf-dist/doc/latex/base/slifonts.pdf Binary files differindex 67f44b6017f..39952e8a883 100644 --- a/Master/texmf-dist/doc/latex/base/slifonts.pdf +++ b/Master/texmf-dist/doc/latex/base/slifonts.pdf diff --git a/Master/texmf-dist/doc/latex/base/source2e.pdf b/Master/texmf-dist/doc/latex/base/source2e.pdf Binary files differindex bc06f27f185..106d83f7234 100644 --- a/Master/texmf-dist/doc/latex/base/source2e.pdf +++ b/Master/texmf-dist/doc/latex/base/source2e.pdf diff --git a/Master/texmf-dist/doc/latex/base/syntonly.pdf b/Master/texmf-dist/doc/latex/base/syntonly.pdf Binary files differindex c13cc82d801..1493490c91e 100644 --- a/Master/texmf-dist/doc/latex/base/syntonly.pdf +++ b/Master/texmf-dist/doc/latex/base/syntonly.pdf diff --git a/Master/texmf-dist/doc/latex/base/tlc2.pdf b/Master/texmf-dist/doc/latex/base/tlc2.pdf Binary files differindex 03eec97dc78..0c08e372a31 100644 --- a/Master/texmf-dist/doc/latex/base/tlc2.pdf +++ b/Master/texmf-dist/doc/latex/base/tlc2.pdf diff --git a/Master/texmf-dist/doc/latex/base/tulm.pdf b/Master/texmf-dist/doc/latex/base/tulm.pdf Binary files differindex e67d8d3522e..d480c33dff4 100644 --- a/Master/texmf-dist/doc/latex/base/tulm.pdf +++ b/Master/texmf-dist/doc/latex/base/tulm.pdf diff --git a/Master/texmf-dist/doc/latex/base/usrguide.pdf b/Master/texmf-dist/doc/latex/base/usrguide.pdf Binary files differindex 96de459ec38..51412a147a3 100644 --- a/Master/texmf-dist/doc/latex/base/usrguide.pdf +++ b/Master/texmf-dist/doc/latex/base/usrguide.pdf diff --git a/Master/texmf-dist/doc/latex/base/utf8ienc.pdf b/Master/texmf-dist/doc/latex/base/utf8ienc.pdf Binary files differindex e97c6a45279..00da2138cd0 100644 --- a/Master/texmf-dist/doc/latex/base/utf8ienc.pdf +++ b/Master/texmf-dist/doc/latex/base/utf8ienc.pdf diff --git a/Master/texmf-dist/doc/latex/base/webcomp.pdf b/Master/texmf-dist/doc/latex/base/webcomp.pdf Binary files differindex a6b1e799806..1c36db0c61c 100644 --- a/Master/texmf-dist/doc/latex/base/webcomp.pdf +++ b/Master/texmf-dist/doc/latex/base/webcomp.pdf diff --git a/Master/texmf-dist/source/latex/base/latexrelease.ins b/Master/texmf-dist/source/latex/base/latexrelease.ins index 99af17e8fb6..ffc92374c35 100644 --- a/Master/texmf-dist/source/latex/base/latexrelease.ins +++ b/Master/texmf-dist/source/latex/base/latexrelease.ins @@ -81,11 +81,16 @@ extension .ins) which are part of the distribution. %\keepsilent \usedir{tex/latex/base} +% the order should match the order in the format in case there are dependencies +% (something defined in one module and used in another) + \generateFile{latexrelease.sty}{t}{% \from{ltclass.dtx} {latexreleasefirst,tracerollback}% \from{ltvers.dtx} {latexrelease}% \from{latexrelease.dtx}{latexrelease}% \from{ltdirchk.dtx} {latexrelease}% + \from{ltplain.dtx} {latexrelease}% + \from{ltluatex.dtx} {latexrelease}% empty \from{ltexpl.dtx} {latexrelease}% empty \from{ltdefns.dtx} {latexrelease}% \from{lthooks.dtx} {latexrelease}% empty % L3 layer module @@ -93,42 +98,39 @@ extension .ins) which are part of the distribution. \from{ltcntrl.dtx} {latexrelease}% empty \from{lterror.dtx} {latexrelease}% empty \from{ltpar.dtx} {latexrelease}% empty + \from{ltspace.dtx} {latexrelease}% + \from{ltlogos.dtx} {latexrelease}% empty + \from{ltfiles.dtx} {latexrelease}% + \from{ltoutenc.dtx} {latexrelease}% + \from{ltcounts.dtx} {latexrelease}% + \from{ltlength.dtx} {latexrelease}% + \from{ltfssbas.dtx} {latexrelease}% + \from{ltfssaxes.dtx} {latexrelease}% + \from{ltfsstrc.dtx} {latexrelease}% + \from{ltfssdcl.dtx} {latexrelease}% + \from{ltfssini.dtx} {latexrelease}% + \from{fontdef.dtx} {latexrelease}% (covering fontmath and fonttext) + \from{ltfntcmd.dtx} {latexrelease}% empty + \from{lttextcomp.dtx} {latexrelease}% + \from{ltpageno.dtx} {latexrelease}% empty + \from{ltxref.dtx} {latexrelease}% empty + \from{ltmiscen.dtx} {latexrelease}% + \from{ltmath.dtx} {latexrelease}% \from{ltlists.dtx} {latexrelease}% empty \from{ltboxes.dtx} {latexrelease}% \from{lttab.dtx} {latexrelease}% empty - \from{ltmath.dtx} {latexrelease}% \from{ltpictur.dtx} {latexrelease}% \from{ltthm.dtx} {latexrelease}% empty \from{ltsect.dtx} {latexrelease}% empty - \from{ltfiles.dtx} {latexrelease}% - \from{ltoutenc.dtx} {latexrelease}% - \from{ltcounts.dtx} {latexrelease}% - \from{ltlength.dtx} {latexrelease}% \from{ltfloat.dtx} {latexrelease}% \from{ltidxglo.dtx} {latexrelease}% empty \from{ltbibl.dtx} {latexrelease}% empty \from{ltpage.dtx} {latexrelease}% empty + \from{ltclass.dtx} {latexrelease,tracerollback}% \from{ltfilehook.dtx} {latexrelease}% empty % L3 layer module \from{ltshipout.dtx} {latexrelease}% empty % L3 layer module \from{ltoutput.dtx} {latexrelease}% - \from{ltclass.dtx} {latexrelease,tracerollback}% - \from{ltspace.dtx} {latexrelease}% - \from{ltlogos.dtx} {latexrelease}% empty - \from{ltplain.dtx} {latexrelease}% - \from{ltfssdcl.dtx} {latexrelease}% - \from{ltfssini.dtx} {latexrelease}% - \from{fontdef.dtx} {latexrelease}% (covering fontmath and fonttext) - \from{ltfntcmd.dtx} {latexrelease}% empty - \from{lttextcomp.dtx} {latexrelease}% - \from{ltfssbas.dtx} {latexrelease}% - \from{ltfssaxes.dtx} {latexrelease}% - \from{ltfsstrc.dtx} {latexrelease}% - \from{ltfsscmp.dtx} {latexrelease}% - \from{ltpageno.dtx} {latexrelease}% empty - \from{ltxref.dtx} {latexrelease}% empty - \from{ltmiscen.dtx} {latexrelease}% - \from{ltluatex.dtx} {latexrelease}% - \from{ltexpl.dtx} {latexrelease}% + \from{ltfsscmp.dtx} {latexrelease}% only in latexrelease! \from{ltfinal.dtx} {latexrelease}% } diff --git a/Master/texmf-dist/source/latex/base/ltclass.dtx b/Master/texmf-dist/source/latex/base/ltclass.dtx index b639ae9410a..c62136c3097 100644 --- a/Master/texmf-dist/source/latex/base/ltclass.dtx +++ b/Master/texmf-dist/source/latex/base/ltclass.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltclass.dtx} - [2020/10/18 v1.3t LaTeX Kernel (Class & Package Interface)] + [2020/12/17 v1.3v LaTeX Kernel (Class & Package Interface)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltclass.dtx} @@ -524,6 +524,27 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@currpath} +% Path to the current file if explicitly given. +% \changes{v1.3u}{2020/11/20}{Macro added} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease> +%<latexrelease>\IncludeInRelease{2020/10/01}{\@currpath}% +%<latexrelease> {Add \@currpath}% +\let\@currpath\@empty +%<latexrelease>\EndIncludeInRelease +% +%<latexrelease>\IncludeInRelease{0000/00/00}{\@currpath}% +%<latexrelease> {Add \@currpath}% +%<latexrelease>\let\@currpath\@undefined +%<latexrelease>\EndIncludeInRelease +%</2ekernel|latexrelease> +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@currname} % Name of current package or option. % \begin{macrocode} @@ -562,6 +583,7 @@ % \changes{v1.3l}{2020/06/05}{Added \cs{@expl@push@filename@@} % and \cs{@expl@push@filename@aux@@}} % \changes{v1.3s}{2020/10/08}{Added missing 2020/02/02 \cs{IncludeInRelease}} +% \changes{v1.3v}{2020/12/14}{Removed \cs{@expl@@@hook@curr@name@push@@n}} % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> @@ -578,13 +600,22 @@ % here, e.g., \cs{@expl@push@filename@@} needs cleanup and (and % should probably not have this name either). % \begin{macrocode} - \@expl@@@hook@curr@name@push@@n{}% \@expl@push@filename@@ \xdef\@currnamestack{% {\@currname}% {\@currext}% {\the\catcode`\@}% \@currnamestack}% +% \end{macrocode} +% Temporarily add a stack for \cs{@currpath} here. This should be +% integrated in the main file stack eventually, but other packages +% rely on \cs{@currnamestack} having three elements per file, so that +% isn't a trivial change. The prefix \cs{@kernel@...} hopefully +% discourages people from using it. +% \begin{macrocode} + \xdef\@kernel@currpathstack{% + {\@currpath}% + \@kernel@currpathstack}% \@expl@push@filename@aux@@} %<latexrelease>\EndIncludeInRelease % \end{macrocode} @@ -632,6 +663,10 @@ %<latexrelease> {Add \@expl@pop@filename@@}% \def\@popfilename{\@expl@@@hook@curr@name@pop@@ \expandafter\@p@pfilename\@currnamestack\@nil +% \end{macrocode} +% Same for popping: +% \begin{macrocode} + \expandafter\@p@pfilepath\@kernel@currpathstack\@nil \@expl@pop@filename@@} %<latexrelease>\EndIncludeInRelease %<latexrelease> @@ -672,6 +707,36 @@ % \end{macro} % \end{macro} % +% +% \begin{macro}{\@kernel@currpathstack} +% Path to the current file if explicitly given. The auxiliary is +% needed here to insert a \cs{@empty} to prevent the loss of braces. +% \changes{v1.3u}{2020/11/20}{Macro added} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease> +%<latexrelease>\IncludeInRelease{2020/10/01}{\@kernel@currpathstack}% +%<latexrelease> {Add \@kernel@currpathstack}% +\gdef\@kernel@currpathstack{} +\def\@p@pfilepath#1{% + \gdef\@currpath{#1}\@p@pfilepath@aux\@empty} +\def\@p@pfilepath@aux#1\@nil{% + \xdef\@kernel@currpathstack{#1}} +%<latexrelease>\EndIncludeInRelease +% +%<latexrelease>\IncludeInRelease{0000/00/00}{\@kernel@currpathstack}% +%<latexrelease> {Add \@kernel@currpathstack}% +%<latexrelease>\let\@kernel@currpathstack\@undefined +%<latexrelease>\let\@p@pfilepath\@undefined +%<latexrelease>\let\@p@pfilepath@aux\@undefined +%<latexrelease>\EndIncludeInRelease +%</2ekernel|latexrelease> +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% +% % \begin{macro}{\@ptionlist} % Returns the option list of the file. % \begin{macrocode} @@ -915,15 +980,42 @@ % \changes{v0.3c}{1994/03/12} % {use \cs{@gtempa}} % \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\ProvidesPackage}{Check name with \strcmp}% +%<*2ekernel|latexrelease> \def\ProvidesPackage#1{% \xdef\@gtempa{#1}% - \ifx\@gtempa\@currname\else +% \end{macrocode} +% \changes{v1.3u}{2020/11/20} +% {Use string comparison instead of \cs{ifx}} +% Here \cs{@currpath} is explicitly added to the file name to report +% when a package or class is loaded using an explicit path. Loading +% using a path in the argument is supported but not encouraged. +% \begin{macrocode} + \@expandtwoargs\@expl@str@if@eq@@nnTF + {\@gtempa}{\@currpath\@currname}{}{% \@latex@warning@no@line{You have requested - \@cls@pkg\space`\@currname',\MessageBreak + \@cls@pkg\space`\@currpath\@currname',\MessageBreak but the \@cls@pkg\space provides `#1'}% - \fi + }% \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] \@onlypreamble\ProvidesPackage +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +% +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\ProvidesPackage}{Undo: check name with \strcmp}% +%<latexrelease>\def\ProvidesPackage#1{% +%<latexrelease> \xdef\@gtempa{#1}% +%<latexrelease> \ifx\@gtempa\@currname\else +%<latexrelease> \@latex@warning@no@line{You have requested +%<latexrelease> \@cls@pkg\space`\@currname',\MessageBreak +%<latexrelease> but the \@cls@pkg\space provides `#1'}% +%<latexrelease> \fi +%<latexrelease> \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % @@ -1007,9 +1099,18 @@ % % \begin{macro}{\ProvidesClass} % Like |\ProvidesPackage|, but for classes. +% This needs a dummy \pkg{latexrelease} block to copy the definition +% of \cs{ProvidesPackage} as it changes across releases. % \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\ProvidesClass}{Track \ProvidesPackage}% +%<*2ekernel|latexrelease> \let\ProvidesClass\ProvidesPackage \@onlypreamble\ProvidesClass +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % @@ -1075,10 +1176,18 @@ \@expl@@@filehook@set@curr@file@@nNN {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b + \@expl@@@filehook@clear@replacement@flag@@ \expandafter\xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% - \zap@space#2 \@empty}} + \zap@space#2 \@empty}% +% \end{macrocode} +% \changes{v1.3u}{2020/11/20} +% {Copy option list to the requested package.} +% \begin{macrocode} + \expandafter\let + \csname opt@#3.#1\expandafter\endcsname + \csname opt@\reserved@a\endcsname} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease % @@ -1719,8 +1828,38 @@ %<latexrelease>\IncludeInRelease{2020/10/01}% %<latexrelease> {\@onefilewithoptions}{Hooks and unused options issue}% \def\@onefilewithoptions#1[#2][#3]#4{% +% \end{macrocode} +% We have to sanitise file names, so that something like +% \begin{verbatim} +% \usepackage{some/local/path/array} +% \usepackage{array} +% \end{verbatim} +% won't load \file{array.sty} twice. It is remotely possible that +% those are two different files, but as a matter of principles, we +% will consider that the base file name uniquely identifies a +% package, regardless of where it lives. This assumption already +% holds for file hooks, for example, which address the hook to a file +% by its base name only. +% +% We'll use \cs{@expl@@@filehook@set@curr@file@@nNN} to parse the +% file name and return the \meta{path} and \meta{base+ext} in +% separate token lists. Further ahead, most operations use +% \cs{@currname} which doesn't have a path attached to it; only few +% actions prepend \cs{@currpath} to \cs{@currname} (namely loading, +% as we have to respect the given path). +% +% A file substituiton isn't followed just yet because at this point +% we are parsing user input, so the file is still what the user +% asked for, and not the file actually loaded. +% \begin{macrocode} + \@expl@@@filehook@set@curr@file@@nNN{#1.#4}\reserved@a\reserved@b + \edef\reserved@c{\def\noexpand\reserved@c####1% + \detokenize\expandafter{\expanded{.#4}}% + \noexpand\@nil{\def\noexpand\reserved@a{####1}}}\reserved@c + \expandafter\reserved@c\reserved@a\@nil \@pushfilename - \xdef\@currname{#1}% + \xdef\@currname{\string@makeletter\reserved@a}% + \xdef\@currpath{\ifx\reserved@b\@empty\else\reserved@b/\fi}% \global\let\@currext#4% % \end{macrocode} % The command \cs{ver@\meta{file}.\meta{ext}} is used to signal that @@ -1765,9 +1904,11 @@ % \end{macrocode} % First we take the \meta{name} and \meta{ext} given in the argument % and check if the file exists, and issue an error otherwise asking -% for a correction with \cs{@missingfileerror}. +% for a correction with \cs{@missingfileerror}. For checking if the +% file exists we use \cs{@currpath} (usually empty) before +% \cs{@currname}. % \begin{macrocode} - \IfFileExists{\@currname.\@currext}{}% + \IfFileExists{\@currpath\@currname.\@currext}{}% {\@missing@onefilewithoptions{#2}}% % \end{macrocode} % If \cs{@currname} is empty (the user replied to the ``Enter file @@ -1784,11 +1925,12 @@ % do the bookkeeping with \cs{@filehook@file@push} % then call \cs{set@curr@file} to set \cs{@curr@file} (and do any % required substitution), then actually load the class/package with -% \cs{load@onefile@withoptions}. +% \cs{load@onefile@withoptions}. \cs{set@curr@file} also needs the +% file path. % \begin{macrocode} \@disable@packageload@do{\@currname.\@currext}% {\@expl@@@filehook@file@push@@ - \set@curr@file{\@currname.\@currext}% + \set@curr@file{\@currpath\@currname.\@currext}% \@filehook@set@CurrentFile % \end{macrocode} % \changes{v1.3q}{2020/09/06} @@ -1812,10 +1954,15 @@ \expandafter\@swaptwoargs\expandafter {\expandafter{\@currpkg@reqd}}% {% < +% \end{macrocode} +% \cs{@currpkg@reqd} doesn't take a path because it is used later to +% assign \cs[no-index]{opt@...} and \cs[no-index]{ver@...}. +% \begin{macrocode} \edef\@currpkg@reqd{\@currname.\@currext}% \ifx\CurrentFile\CurrentFileUsed \else \filename@parse\@curr@file + \edef\@currpath{\string@makeletter\filename@area}% \edef\@currname{\string@makeletter\filename@base}% \edef\@currext{\string@makeletter\filename@ext}% \fi @@ -1864,11 +2011,13 @@ % \end{macro} % % \begin{macro}{\@missing@onefilewithoptions} -% Now the action taken when a file is not found. +% Now the action taken when a file is not found. Path must be +% included here as it eventually leads to a file lookup. % \begin{macrocode} \def\@missing@onefilewithoptions#1{% - \@missingfileerror\@currname\@currext - \xdef\@currname{\@missingfile@area\@missingfile@base}% + \@missingfileerror{\@currpath\@currname}\@currext + \global\let\@currpath\@missingfile@area + \global\let\@currname\@missingfile@base \global\let\@currext\@missingfile@ext} % \end{macrocode} % \end{macro} @@ -1887,6 +2036,13 @@ % \begin{macrocode} \def\reserved@a{% \@pass@ptions\@currext{#1}{\@currname}% +% \end{macrocode} +% \changes{v1.3u}{2020/11/20} +% {Copy option list to the requested package.} +% \begin{macrocode} + \expandafter\let + \csname opt@\@currpkg@reqd\expandafter\endcsname + \csname opt@\@currname.\@currext\endcsname \global\expandafter \let\csname ver@\@currname.\@currext\endcsname\@empty % \end{macrocode} @@ -1912,11 +2068,12 @@ \fi % \end{macrocode} % Now actually load the file (at this point we are certain it exists, -% but use \cs{InputIfFileExists} so that file hooks are executed): +% but use \cs{InputIfFileExists} so that file hooks are executed). +% \cs{@currpath} is needed here too. % \begin{macrocode} - \InputIfFileExists{\@currpkg@reqd}{}% + \InputIfFileExists{\@currpath\@currpkg@reqd}{}% {\@latex@error - {The \@cls@pkg\space\@currpkg@reqd\space failed to load.}\@ehd}% + {The \@cls@pkg\space\@currpkg@reqd\space failed to load}\@ehd}% %----------------------------------------- % \end{macrocode} % In older versions of the code |\@unprocessedoptions| would @@ -3271,19 +3428,20 @@ % A similar error is given if global rollback date and min-date on % a specific package conflict with each other, but that case is % happens only once so it is inlined. +% \changes{v1.3u}{2020/11/09}{Change help text because the package may have +% existed then --- there is just no rollback data (gh/423).} % \begin{macrocode} \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 + {The \@cls@pkg\space'\@currname' has no rollback data + before #1 which\MessageBreak is after your requested rollback date --- so - something is wrong here.\MessageBreak + something may be wrong here.\MessageBreak Continue and we use the earliest known release.}} % \end{macrocode} % \end{macro} % % -% % \begin{macro}{\DeclareCurrentRelease} % This declares the date (and possible name) of the current version % of a package or class. diff --git a/Master/texmf-dist/source/latex/base/ltdefns.dtx b/Master/texmf-dist/source/latex/base/ltdefns.dtx index 569c9db4df9..920c1acde6d 100644 --- a/Master/texmf-dist/source/latex/base/ltdefns.dtx +++ b/Master/texmf-dist/source/latex/base/ltdefns.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltdefns.dtx} - [2020/09/25 v1.5n LaTeX Kernel (definition commands)] + [2020/11/25 v1.5o LaTeX Kernel (definition commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltdefns.dtx} @@ -385,8 +385,19 @@ % \begin{macro}{\@carcube} % |\@carcube T1 ... Tn\@nil| = |T1| |T2| |T3| , $n > 3$ % \changes{v1.5k}{2020/08/19}{Made \cs{long} for \cs{NewCommandCopy}} +% \changes{v1.5o}{2020/11/25}{Added missing latexrelease entry} % \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{2020/10/01}{\@carcube}{Make \@carcube long}% +%<*2ekernel|latexrelease> \long\def\@carcube#1#2#3#4\@nil{#1#2#3} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +% +%<latexrelease>\IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}% +%<latexrelease>\def\@carcube#1#2#3#4\@nil{#1#2#3} +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/base/ltexpl.dtx b/Master/texmf-dist/source/latex/base/ltexpl.dtx index 4100da79c28..7f9019ede31 100644 --- a/Master/texmf-dist/source/latex/base/ltexpl.dtx +++ b/Master/texmf-dist/source/latex/base/ltexpl.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltexpl.dtx} - [2020/09/06 v1.2f LaTeX Kernel (expl3-dependent code)] + [2020/12/18 v1.2h LaTeX Kernel (expl3-dependent code)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltexpl.dtx} @@ -72,16 +72,45 @@ % {Define a local version of some \LaTeXe{} basic macros to support % package loading} % +% \begin{macro}{\@kernel@after@enddocument, +% \@kernel@after@enddocument@afterlastpage} +% These two kernel hooks are used by the shipout code. They are +% defined earlier here because the \pkg{lthooks} code adds material +% to them. +% \changes{v1.2h}{2020/12/18} +% {Define kernel \cs{enddocument} hooks early} +% \begin{macrocode} +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {kernel@enddocument hooks}{Define kernel enddocument Hooks}% +\let\@kernel@after@enddocument\@empty +\let\@kernel@after@enddocument@afterlastpage\@empty +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {kernel@enddocument hooks}{Define kernel enddocument Hooks}% +%<latexrelease>\let\@kernel@after@enddocument\@undefined +%<latexrelease>\let\@kernel@after@enddocument@afterlastpage\@undefined +%<latexrelease>\EndIncludeInRelease +%</2ekernel|latexrelease> +% \end{macrocode} +% \end{macro} +% % First define some blank commands, so that in case something goes wrong while % loading \textsf{expl3}, we won't get strange \texttt{Undefined control % sequence} errors. % \begin{macrocode} -%<*2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\@expl@sys@load@backend@@}{Roll forward support}% \def\@expl@sys@load@backend@@{} \def\@expl@push@filename@@{} \def\@expl@push@filename@aux@@{} \def\@expl@pop@filename@@{} -%</2ekernel> +%<latexrelease>\EndIncludeInRelease +%</2ekernel|latexrelease> % \end{macrocode} % % \changes{v1.2d}{2020/07/08} @@ -183,9 +212,20 @@ \errmessage{LaTeX requires expl3}% \batchmode \read -1 to \reserved@a %</2ekernel> +% \end{macrocode} +% We do not support a roll forward across 2019. You need to start +% with 2019 if you want to get to 2020 or beyond. +% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} %<*latexrelease> - \@latex@error{LaTeX requires expl3}\@ehd - \@gobble + \@latex@warning@no@line + {You need a format that already contains a recent\MessageBreak + expl3 as part of the kernel, e.g. at least a kernel\MessageBreak + from 2019 to roll forward to that date!\MessageBreak + --- I'm giving up!\MessageBreak\MessageBreak + Note that manually loading the expl3 package\MessageBreak + from your distribution is not enough}% + \@@end % die %</latexrelease> }% {% @@ -222,6 +262,36 @@ %<latexrelease>\EndIncludeInRelease % \end{macrocode} % +% +% Starting with 2020-10 the kernel contains most of the +% \texttt{xparse} interfaces loaded above. These interfaces are +% later used to define various user command. However, if somebody +% with an earlier installation tries to roll forward (using a +% \texttt{latexrelease} package from a newer release) this will not +% work as the earlier kernel doesn't contain commands such as +% \cs{NewDocumentCommand}. +% +% We therefore add code into \texttt{latexrelease.sty} to load the +% \texttt{xparse} package of the current installation instead. this +% may not work if the installation is really old, but roll forward +% can't do miracles. +% +% If the kernel is 2020-10 or later \cs{NewDocumentCommand} is +% already known (whether or not you roll forward or back) so +% nothing happens, but if you start from am earlier kernel the +% \texttt{xparse} package gets loaded by \texttt{latexrelease}. +% \changes{v1.2g}{2020/11/24}{Load xparse in latexrelease if needed (gh/434)} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\NewDocumentCommand}{Emergency loading xparse}% +%<latexrelease> +%<latexrelease>\ifdefined\NewDocumentCommand \else +%<latexrelease> \RequirePackage{xparse} +%<latexrelease>\fi +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% % \subsection{Using expl3 code} % % In order to ease the implemantation of some new features in @@ -242,9 +312,6 @@ % if that \pkg{expl3} command is needed in places that are others % coded in \LaTeXe{} conventions. % -% \begin{macrocode} -\ExplSyntaxOn -% \end{macrocode} % % In this file, each release of LaTeX adds an \cs{IncludeInRelease} % block, in which the macros copied for that release were defined. @@ -259,8 +326,16 @@ % redefinitions. % % \begin{macrocode} -%<latexrelease>\IncludeInRelease{2020/10/01}{expl3~2020-10-01}% -%<latexrelease> {expl3~macros~added~for~the~2020-10-01~release}% +%<latexrelease>\IncludeInRelease{2020/10/01}{\@expl@cs@to@str@@N}% +%<latexrelease> {expl3 macros added for the 2020-10-01 release}% +% \end{macrocode} +% +% The expl3 activation needs to be inside the release guards as +% otherwise rolling forward is broken in old kernels that do not +% have expl3 loaded. +% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} +\ExplSyntaxOn % \end{macrocode} % % \changes{v1.2e}{2020/08/19} @@ -290,21 +365,27 @@ % \end{macrocode} % % \begin{macrocode} +\ExplSyntaxOff +% \end{macrocode} +% +% +% Here we can't assume that expl3 is available. It will be if we +% roll back but if this code is executed rolling forward it needs +% to be pure 2e. +% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} %<latexrelease>\EndIncludeInRelease -%<latexrelease>\IncludeInRelease{0000/00/00}{expl3~2020-10-01}% -%<latexrelease> {expl3~macros~added~for~the~2020-10-01~release}% -%<latexrelease>\cs_undefine:N \@expl@cs@to@str@@N -%<latexrelease>\cs_undefine:N \@expl@str@if@eq@@nnTF -%<latexrelease>\cs_undefine:N \@expl@cs@prefix@spec@@N -%<latexrelease>\cs_undefine:N \@expl@cs@argument@spec@@N -%<latexrelease>\cs_undefine:N \@expl@cs@replacement@spec@@N -%<latexrelease>\cs_undefine:N \@expl@str@map@function@@NN +%<latexrelease>\IncludeInRelease{0000/00/00}{\@expl@cs@to@str@@N}% +%<latexrelease> {expl3 macros added for the 2020-10-01 release}% +%<latexrelease>\let \@expl@cs@to@str@@N \@undefined +%<latexrelease>\let \@expl@str@if@eq@@nnTF \@undefined +%<latexrelease>\let \@expl@cs@prefix@spec@@N \@undefined +%<latexrelease>\let \@expl@cs@argument@spec@@N \@undefined +%<latexrelease>\let \@expl@cs@replacement@spec@@N \@undefined +%<latexrelease>\let \@expl@str@map@function@@NN \@undefined %<latexrelease>\EndIncludeInRelease %</2ekernel|latexrelease> % \end{macrocode} % -% \begin{macrocode} -\ExplSyntaxOff -% \end{macrocode} % % \Finale diff --git a/Master/texmf-dist/source/latex/base/ltfilehook.dtx b/Master/texmf-dist/source/latex/base/ltfilehook.dtx index ecb499f3475..c7ed13f041a 100644 --- a/Master/texmf-dist/source/latex/base/ltfilehook.dtx +++ b/Master/texmf-dist/source/latex/base/ltfilehook.dtx @@ -31,8 +31,8 @@ %%% From File: ltfilehook.dtx % % \begin{macrocode} -\providecommand\ltfilehookversion{v1.0c} -\providecommand\ltfilehookdate{2020/10/18} +\providecommand\ltfilehookversion{v1.0d} +\providecommand\ltfilehookdate{2020/11/24} % \end{macrocode} % %<*driver> @@ -615,6 +615,62 @@ % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% When rolling forward the following expl3 functions may not be defined. +% If we roll back the code does nothing. +% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\file_parse_full_name_apply:nN}{Roll forward help}% +%<latexrelease> +%<latexrelease>\ExplSyntaxOn +%<latexrelease>\cs_if_exist:NF\file_parse_full_name_apply:nN +%<latexrelease>{ +%<latexrelease>\cs_new:Npn \file_parse_full_name_apply:nN #1 +%<latexrelease> { +%<latexrelease> \exp_args:Ne \__file_parse_full_name_auxi:nN +%<latexrelease> { \__kernel_file_name_sanitize:n {#1} } +%<latexrelease> } +%<latexrelease>\cs_new:Npn \__file_parse_full_name_auxi:nN #1 +%<latexrelease> { +%<latexrelease> \__file_parse_full_name_area:nw { } #1 +%<latexrelease> / \s__file_stop +%<latexrelease> } +%<latexrelease>\cs_new:Npn \__file_parse_full_name_area:nw #1 #2 / #3 \s__file_stop +%<latexrelease> { +%<latexrelease> \tl_if_empty:nTF {#3} +%<latexrelease> { \__file_parse_full_name_base:nw { } #2 . \s__file_stop {#1} } +%<latexrelease> { \__file_parse_full_name_area:nw { #1 / #2 } #3 \s__file_stop } +%<latexrelease> } +%<latexrelease>\cs_new:Npn \__file_parse_full_name_base:nw #1 #2 . #3 \s__file_stop +%<latexrelease> { +%<latexrelease> \tl_if_empty:nTF {#3} +%<latexrelease> { +%<latexrelease> \tl_if_empty:nTF {#1} +%<latexrelease> { +%<latexrelease> \tl_if_empty:nTF {#2} +%<latexrelease> { \__file_parse_full_name_tidy:nnnN { } { } } +%<latexrelease> { \__file_parse_full_name_tidy:nnnN { .#2 } { } } +%<latexrelease> } +%<latexrelease> { \__file_parse_full_name_tidy:nnnN {#1} { .#2 } } +%<latexrelease> } +%<latexrelease> { \__file_parse_full_name_base:nw { #1 . #2 } #3 \s__file_stop } +%<latexrelease> } +%<latexrelease>\cs_new:Npn \__file_parse_full_name_tidy:nnnN #1 #2 #3 #4 +%<latexrelease> { +%<latexrelease> \exp_args:Nee #4 +%<latexrelease> { +%<latexrelease> \str_if_eq:nnF {#3} { / } { \use_none:n } +%<latexrelease> #3 \prg_do_nothing: +%<latexrelease> } +%<latexrelease> { \use_none:n #1 \prg_do_nothing: } +%<latexrelease> {#2} +%<latexrelease> } +%<latexrelease>} +%<latexrelease>\ExplSyntaxOff +%<latexrelease> +%<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % @@ -643,6 +699,8 @@ % kernel we do this only now and not in \texttt{ltfiles}. % % \begin{macro}{\InputIfFileExists} +% \begin{macro}{\@input@file@exists@with@hooks} +% \begin{macro}{\unqu@tefilef@und} % \cs{InputIfFileExists} loads any file if it is available so we % have to add the hooks \texttt{file/before} and % \texttt{file/after} in the right places. If the file doesn't @@ -665,7 +723,7 @@ % If the file exists then \cs{CurrentFile} holds its name. But we % can't rely on that still being true after the file has been % processed. Thus for using the name in the file hooks we need to -% preserve the name and then restored it for the +% preserve the name and then restore it for the % \texttt{file/after/...} hook. % % The hook always refers to the file requested by the user. The hook @@ -683,33 +741,68 @@ % refer to the file by their name only. The path to the file is % returned in \cs{CurrentFilePath}. % \begin{macrocode} - \edef\reserved@a{\@filef@und + \edef\reserved@a{% \@expl@@@filehook@file@pop@assign@@nnnn {\CurrentFilePathUsed}% {\CurrentFileUsed}% {\CurrentFilePath}% - {\CurrentFile}}% + {\CurrentFile}% +% \end{macrocode} +% +% We pre-expand \cs{@filef@und} so that in case another file is +% loaded in the true branch of \cs{InputIfFileExists}, these don't +% change their value meanwhile. This isn't a worry with +% \cs[no-index]{CurrentFile...} because they are kept in a stack. +% +% \changes{v1.0d}{2020/11/20} +% {Move loading to \cs{@input@file@exists@with@hooks} and expand +% \cs{@filef@und} to avoid getting the wrong file name in the case of +% a substitution.} +% \begin{macrocode} + \noexpand\@input@file@exists@with@hooks{\@filef@und}}% \expandafter\@swaptwoargs\expandafter {\reserved@a}% - {% - #2% - \@addtofilelist{#1}% - \UseHook{file/before}% + {#2}% + \@expl@@@filehook@file@pop@@ + }% +} +% \end{macrocode} +% +% Before adding to the file list we need to make all (letter) characters +% catcode~11, because several packages use constructions like +% \begin{verbatim} +% \filename@parse{<filename>} +% \ifx\filename@ext\@clsextension +% ... +% \fi +% \end{verbatim} +% and that doesn't work if \cs{filename@ext} is \cs{detokenize}d. +% Making \cs{@clsextension} a string doesn't help much because some +% packages define their own \cs[no-index]{<prefix>@someextension} with +% normal catcodes. This is not entirely correct because packages loaded +% (somehow) with catcode~12 alphabetic tokens (say, as the result of +% a \cs{string} or \cs{detokenize} command, or from a \TeX{} string like +% \cs{jobname}) will have these character tokens incorrectly turned into +% letter tokens. This however is rare, so we'll go for the all-letters +% approach (grepping the packages in \TeX{} Live didn't bring up any +% obvious candidate for breaking with this catcode change). +% \begin{macrocode} +\def\@input@file@exists@with@hooks#1{% + \edef\reserved@a{\unqu@tefilef@und#1\@nil}% + \@addtofilelist{\string@makeletter\reserved@a}% + \UseHook{file/before}% % \end{macrocode} % The current file name is available in \cs{CurrentFile} so we use % that in the specific hook. % \begin{macrocode} - \UseHook{file/before/\CurrentFile}% - \@@input - }% + \UseHook{file/before/\CurrentFile}% + \@@input #1% <- trailing space comes from \@filef@und % \end{macrocode} % And it is restored here so we can use it once more. % \begin{macrocode} - \UseHook{file/after/\CurrentFile}% - \UseHook{file/after}% - \@expl@@@filehook@file@pop@@ - }% -} + \UseHook{file/after/\CurrentFile}% + \UseHook{file/after}} +\def\unqu@tefilef@und"#1" \@nil{#1} %<latexrelease>\EndIncludeInRelease %</2ekernel|latexrelease> % \end{macrocode} @@ -737,6 +830,8 @@ %<latexrelease> {% %<latexrelease> \expandafter\@swaptwoargs\expandafter %<latexrelease> {\@filef@und}{#2\@addtofilelist{#1}\@@input}}} +%<latexrelease>\let\@input@file@exists@with@hooks\@undefined +%<latexrelease>\let\unqu@tefilef@und\@undefined %<latexrelease>\EndIncludeInRelease % \end{macrocode} % @@ -746,10 +841,14 @@ %<latexrelease>\long\def \InputIfFileExists#1#2{% %<latexrelease> \IfFileExists{#1}% %<latexrelease> {#2\@addtofilelist{#1}\@@input \@filef@und}} +%<latexrelease>\let\@input@file@exists@with@hooks\@undefined +%<latexrelease>\let\unqu@tefilef@und\@undefined %<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} % % % @@ -772,8 +871,8 @@ % % % \begin{macro}{\@@_subst_add:nn,\@@_subst_remove:n, -% \@@_subst_file_normalize:n,\@@_subst_empty_name_chk:NN} -% \cs{@@_substitution_lthooadd:nn} declares a file substitution by +% \@@_subst_file_normalize:Nn,\@@_subst_empty_name_chk:NN} +% \cs{@@_subst_add:nn} declares a file substitution by % doing a (global) definition of the form % |\def|\cs{@file-subst@\meta{file}}|{|\meta{replacement}|}|. % The file names are properly sanitised, and normalized with the same @@ -787,8 +886,12 @@ \group_begin: \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } \int_set:Nn \tex_escapechar:D { -1 } - \cs_gset:cpx { @file-subst@ \@@_subst_file_normalize:n {#1} } - { \@@_subst_file_normalize:n {#2} } + \cs_gset:cpx + { + @file-subst@ + \@@_subst_file_normalize:Nn \use_ii_iii:nnn {#1} + } + { \@@_subst_file_normalize:Nn \@@_file_name_compose:nnn {#2} } \group_end: } \cs_new_protected:Npn \@@_subst_remove:n #1 @@ -796,14 +899,18 @@ \group_begin: \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } \int_set:Nn \tex_escapechar:D { -1 } - \cs_undefine:c { @file-subst@ \@@_subst_file_normalize:n {#1} } + \cs_undefine:c + { + @file-subst@ + \@@_subst_file_normalize:Nn \use_ii_iii:nnn {#1} + } \group_end: } -\cs_new:Npn \@@_subst_file_normalize:n #1 +\cs_new:Npn \@@_subst_file_normalize:Nn #1 #2 { \exp_after:wN \@@_subst_empty_name_chk:NN \cs:w \exp_after:wN \cs_end: - \cs:w \@@_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end: + \cs:w \@@_file_parse_full_name:nN {#2} #1 \cs_end: } \cs_new:Npn \@@_subst_empty_name_chk:NN #1 #2 { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: } @@ -929,6 +1036,7 @@ \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}% {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi \global\let\@curr@file@reqd\@curr@file}% + \@expl@@@filehook@clear@replacement@flag@@ \endgroup} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease @@ -1079,18 +1187,25 @@ % % \begin{macro}{flag @@_file_replaced} % \begin{macro}{\@@_if_file_replaced:TF} +% \begin{macro}{\@@_clear_replacement_flag:} % Since the file replacement is done expandably in a \cs{csname}, use % a flag to remember if a substitution happened. We use this in % \cs{set@curr@file} to short-circuit some of it in case no % substitution happened (by far the most common case, so it's worth -% optimising). +% optimising). The flag raised during the file substitution algorithm +% must be explicitly cleared after the \cs{@@_if_file_replaced:TF} +% conditional is no longer needed, otherwise further uses of +% \cs{@@_if_file_replaced:TF} will wrongly return true. % \begin{macrocode} \flag_new:n { @@_file_replaced } \cs_new:Npn \@@_if_file_replaced:TF #1 #2 - { \flag_if_raised:nTF { @@_file_replaced } {#1} {#2} } + { \flag_if_raised:nTF { @@_file_replaced } {#1} {#2} } +\cs_new_protected:Npn \@@_clear_replacement_flag: + { \flag_clear:n { @@_file_replaced } } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_file_subst_begin:nnn} % First off, start by checking if the current file ($\meta{name} + @@ -1343,7 +1458,12 @@ \cs_new_eq:NN \@expl@@@filehook@if@file@replaced@@TF \__filehook_if_file_replaced:TF % \end{macrocode} -% +% +% \begin{macrocode} +\cs_new_eq:NN \@expl@@@filehook@clear@replacement@flag@@ + \__filehook_clear_replacement_flag: +% \end{macrocode} +% % \begin{macrocode} \cs_new_eq:NN \@expl@@@filehook@drop@extension@@N \__filehook_drop_extension:N diff --git a/Master/texmf-dist/source/latex/base/ltfssaxes.dtx b/Master/texmf-dist/source/latex/base/ltfssaxes.dtx index d8e4286b786..a66a26cd39c 100644 --- a/Master/texmf-dist/source/latex/base/ltfssaxes.dtx +++ b/Master/texmf-dist/source/latex/base/ltfssaxes.dtx @@ -836,7 +836,7 @@ % condensed series, etc.). We do this in all branches above because a user % might have written %\begin{verbatim} -\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc} +% \DeclareFontSeriesChangeRule {m}{sc}{msc}{mc} %\end{verbatim} % instead of using \texttt{sc} and \texttt{c} as needed in the % \texttt{.fd} file. diff --git a/Master/texmf-dist/source/latex/base/ltfssbas.dtx b/Master/texmf-dist/source/latex/base/ltfssbas.dtx index 4a6afca3ace..30f500b6e4e 100644 --- a/Master/texmf-dist/source/latex/base/ltfssbas.dtx +++ b/Master/texmf-dist/source/latex/base/ltfssbas.dtx @@ -35,7 +35,7 @@ % % \ProvidesFile{ltfssbas.dtx} - [2020/02/27 v3.2g LaTeX Kernel (NFSS Basic Macros)] + [2020/12/10 v3.2h LaTeX Kernel (NFSS Basic Macros)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -891,12 +891,31 @@ % series and shape which is not desired if we intend to use an % explicit font shape! % \changes{v3.2e}{2019/12/17}{Don't call \cs{fontseries} or \cs{fontshape}} +% \changes{v3.2h}{2020/12/10}{Drop ``m'' if the series value is a member +% of a fixed list and issue warning if doing it (gh/453)} % \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2020/02/02}% +%<latexrelease> {\usefont}{Drop m in usefont}% \DeclareRobustCommand\usefont[4]{\fontencoding{#1}% \edef\f@family{#2}% - \edef\f@series{#3}% + \set@target@series{#3}% \edef\f@shape{#4}\selectfont \ignorespaces} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\usefont}{Drop m in usefont}% +%<latexrelease> +%<latexrelease>\DeclareRobustCommand\usefont[4]{\fontencoding{#1}% +%<latexrelease> \edef\f@family{#2}% +%<latexrelease> \edef\f@series{#3}% +%<latexrelease> \edef\f@shape{#4}\selectfont +%<latexrelease> \ignorespaces} +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/base/lthooks.dtx b/Master/texmf-dist/source/latex/base/lthooks.dtx index e4ff7dd2ed4..cc79892ca77 100644 --- a/Master/texmf-dist/source/latex/base/lthooks.dtx +++ b/Master/texmf-dist/source/latex/base/lthooks.dtx @@ -31,8 +31,8 @@ %%% From File: lthooks.dtx % % \begin{macrocode} -\def\lthooksversion{v1.0e} -\def\lthooksdate{2020/10/23} +\def\lthooksversion{v1.0g} +\def\lthooksdate{2020/12/18} % \end{macrocode} % %<*driver> @@ -222,11 +222,13 @@ % \begin{syntax} % \cs{AddToHook} \Arg{hook}\oarg{label}\Arg{code} % \end{syntax} -% Adds \meta{code} to the \meta{hook} labeled by \meta{label}. If -% the optional argument \meta{label} is not provided, if \cs{AddToHook} -% is used in a package/class, then the current -% package/class name is used, otherwise \hook{top-level} is -% used~(see section~\ref{sec:default-label}). +% Adds \meta{code} to the \meta{hook} labeled by \meta{label}. +% When the optional argument \meta{label} is not provided, the +% \meta{default label} is used (see section~\ref{sec:default-label}). +% If \cs{AddToHook} is used in a package/class, the +% \meta{default label} is the package/class name, otherwise it is +% \hook{top-level} (the \hook{top-level} label is treated +% differently: see section~\ref{sec:top-level}). % % If there already exists code under the \meta{label} then the new % \meta{code} is appended to the existing one (even if this is a reversed hook). @@ -234,10 +236,10 @@ % \meta{label}, first apply \cs{RemoveFromHook}. % % The hook doesn't have to exist for code to be added to -% it. However, if it is not declared later then obviously the +% it. However, if it is not declared, then obviously the % added \meta{code} will never be executed. This % allows for hooks to work regardless of package loading order and -% enables packages to add to hook of other packages without +% enables packages to add to hooks from other packages without % worrying whether they are actually used in the current document. % See section~\ref{sec:querying}. % @@ -251,10 +253,8 @@ % \cs{RemoveFromHook} \Arg{hook}\oarg{label} % \end{syntax} % Removes any code labeled by \meta{label} from the \meta{hook}. -% If the optional -% argument \meta{label} is not provided, if \cs{AddToHook} -% is used in a package/class, then the current -% package/class name is used, otherwise \hook{top-level} is used. +% When the optional argument \meta{label} is not provided, the +% \meta{default label} is used (see section~\ref{sec:default-label}). % % If the code for that \meta{label} wasn't yet added to the % \meta{hook}, an order is set so that when some code attempts to add @@ -273,7 +273,7 @@ % \medskip % % In contrast to the \texttt{voids} relationship between two labels -% in a \cs{DeclareHookrule} this is a destructive operation as the +% in a \cs{DeclareHookRule} this is a destructive operation as the % labeled code is removed from the hook data structure, whereas the % relationship setting can be undone by providing a different % relationship later. @@ -367,7 +367,8 @@ % token, a low-level \TeX{} error is raised (namely, the \meta{hook} is % expanded using \TeX's \cs{csname}\ldots\cs{endcsname}, as such, % Unicode characters are allowed in \meta{hook} and \meta{label} -% arguments). The arguments of \cs{UseHook} and \cs{UseOneTimeHook} are +% arguments). The arguments of \cs{UseHook}, \cs{UseOneTimeHook}, +% \cs{IfHookEmptyTF}, and \cs{IfHookExistsTF} are % processed much in the same way except that spaces are not trimmed % around the argument, for better performance. % @@ -377,10 +378,10 @@ % chunk and to prevent clashes. This should be the standard practice, % so this hook management code provides a shortcut to refer to the % current package in the name of a \meta{hook} and in a \meta{label}. -% If \meta{hook} name or \meta{label} consist just of a single dot +% If the \meta{hook} name or the \meta{label} consist just of a single dot % (|.|), or starts with a dot followed by a slash (|./|) then the dot % denotes the \meta{default label} (usually the current package or class -% name---see~\cs{DeclareDefaultHookLabel}). +% name---see~\cs{SetDefaultHookLabel}). % A \enquote{|.|} or \enquote{|./|} anywhere else in a \meta{hook} or in % \meta{label} is treated literally and is not replaced. % @@ -403,15 +404,15 @@ % \AddToHook {file/after/foo.tex}{code} % unchanged % \end{verbatim} % -% The \meta{default label} is automatically set to the name of the -% current package or class (using \cs{@currname}). If \cs{@currname} -% is not set (because the hook command is used outside of a package, or -% the current file wasn't loaded with \cs{usepackage} or -% \cs{documentclass}), then the \texttt{top-level} is used as the -% \meta{default label}. +% The \meta{default label} is automatically set equal to the name of the +% current package or class at the time the package is loaded. If the +% hook command is used outside of a package, or the current file wasn't +% loaded with \cs{usepackage} or \cs{documentclass}, then the +% \texttt{top-level} is used as the \meta{default label}. This may have +% exceptions---see \cs{PushDefaultHookLabel}. % % This syntax is available in all \meta{label} arguments and most -% \meta{hook}, both in the \LaTeXe{} interface, and the \LaTeX3 +% \meta{hook} arguments, both in the \LaTeXe{} interface, and the \LaTeX3 % interface described in section~\ref{sec:l3hook-interface}. % % Note, however, that the replacement of |.| by the \meta{default label} @@ -430,29 +431,104 @@ % In some cases, for example in large packages, one may want to separate % it in logical parts, but still use the main package name as % \meta{label}, then the \meta{default label} can be set using -% \cs{DeclareDefaultHookLabel}: +% \cs{SetDefaultHookLabel} or +% \cs{PushDefaultHookLabel}..\cs{PopDefaultHookLabel}. % -% \begin{function}{\DeclareDefaultHookLabel} +% \begin{function}{\PushDefaultHookLabel,\PopDefaultHookLabel} % \begin{syntax} -% \cs{DeclareDefaultHookLabel} \Arg{default label} +% \cs{PushDefaultHookLabel} \Arg{default label} +% \quad \meta{code} +% \cs{PopDefaultHookLabel} % \end{syntax} -% Sets the \meta{default label} to be used in \meta{label} arguments. -% If \cs{DeclareDefaultHookLabel} is not used in the -% current package, \cs{@currname} is used instead. If \cs{@currname} -% is not set, the code is assumed to be in the main document, in which -% case \texttt{top-level} is used. -% -% The effect of \cs{DeclareDefaultHookLabel} holds for the current -% file, and is reset to the previous value when the file is closed. +% \cs{PushDefaultHookLabel} sets the current \meta{default label} to +% be used in \meta{label} arguments, or when replacing a leading +% ``|.|'' (see above). \cs{PopDefaultHookLabel} reverts the +% \meta{default label} to its previous value. +% +% Inside a package or class, the \meta{default label} is equal to the +% package or class name, unless explicitly changed. Everywhere else, +% the \meta{default label} is |top-level| (see +% section~\ref{sec:top-level}) unless explicitly changed. +% +% The effect of \cs{PushDefaultHookLabel} holds until the next +% \cs{PopDefaultHookLabel}. \cs{usepackage} (and \cs{RequirePackage} +% and \cs{documentclass}) internally use +% \begin{quote} +% \cs{PushDefaultHookLabel}\Arg{package name} \\ +% \null \quad \meta{package code} \\ +% \cs{PopDefaultHookLabel} +% \end{quote} +% to set the \meta{default label} for the package or class file. +% Inside the \meta{package code} the \meta{default label} can also be +% changed with \cs{SetDefaultHookLabel}. \cs{input} and other +% file input-related commands from the \LaTeX{} kernel do not use +% \cs{PushDefaultHookLabel}, so code within files loaded by these +% commands does \emph{not} get a dedicated \meta{label}! (that is, the +% \meta{default label} is the current active one when the file was +% loaded.) +% +% Packages that provide their own package-like interfaces +% (Ti\textit{k}Z's \cs{usetikzlibrary}, for example) can use +% \cs{PushDefaultHookLabel} and \cs{PopDefaultHookLabel} to set +% dedicated labels and emulate \cs{usepackage}-like hook behaviour +% within those contexts. +% +% The |top-level| label is treated differently, and is reserved to the +% user document, so it is not allowed to change the +% \meta{default label} to |top-level|. +% \end{function} +% +% \begin{function}{\SetDefaultHookLabel} +% \begin{syntax} +% \cs{SetDefaultHookLabel} \Arg{default label} +% \end{syntax} +% Similarly to \cs{PushDefaultHookLabel}, +% sets the current \meta{default label} to +% be used in \meta{label} arguments, or when replacing a leading +% ``|.|''. The effect holds until the label is changed again or until +% the next \cs{PopDefaultHookLabel}. The difference between +% \cs{PushDefaultHookLabel} and \cs{SetDefaultHookLabel} is that the +% latter does not save the current \meta{default label}. +% +% This command is useful when a large package is composed of several +% smaller packages, but all should have the same \meta{label}, so +% \cs{SetDefaultHookLabel} can be used at the beginning of each +% package file to set the correct label. +% +% \cs{SetDefaultHookLabel} is not allowed in the main document, where +% the \meta{default label} is |top-level| and there is no +% \cs{PopDefaultHookLabel} to end its effect. +% It is also not allowed to change the \meta{default label} to +% |top-level|. % \end{function} % +% \subsubsection{The \texttt{top-level} label} +% \label{sec:top-level} +% +% The |top-level| label, assigned to code added from the main document, +% is different from other labels. Code added to hooks (usually +% \cs{AtBeginDocument}) in the preamble is almost always to change +% something defined by a package, so it should go at the very end of the +% hook. +% +% Therefore, code added in the |top-level| is always executed at the end +% of the hook, regardless of where it was declared. If the hook is +% reversed (see \cs{NewReversedHook}), the |top-level| chunk is executed +% at the very beginning instead. +% +% Rules regarding |top-level| have no effect: if a user wants to have a +% specific set of rules for a code chunk, they should use a different +% label to said code chunk, and provide a rule for that label instead. +% +% The |top-level| label is exclusive for the user, so trying to add code +% with that label from a package results in an error. % % \subsubsection{Defining relations between hook code} % % The default assumption is that code added to hooks by different -% packages is independent and the order in which it is executed is -% irrelevant. While this is true in many case it is obviously false -% in many others. +% packages are independent and the order in which they are executed is +% irrelevant. While this is true in many cases it is obviously false +% in others. % % Before the hook management system was introduced % packages had to take elaborate precaution to determine of some other @@ -589,7 +665,8 @@ % its permanent code pool, or to its ``next'' token list. The hook % doesn't need to be declared to have code added to its code pool. % A hook is said to exist when it was declared with \cs{NewHook} or -% some variant thereof. +% some variant thereof. Generic \hook{file} and \hook{env} hooks are +% automatically declared when code is added to them. % % \begin{function}[EXP]{\IfHookEmptyTF} % \begin{syntax} @@ -650,6 +727,7 @@ % \item % any code executed on the next invocation only. % \end{itemize} +% \end{function} % % \cs{LogHook} prints the information to the |.log| file, and % \cs{ShowHook} prints them to the terminal/command window and starts @@ -660,6 +738,7 @@ % %^^A % Code for the listing below: %^^A \NewHook{example-hook} +%^^A \AddToHook{example-hook}{[code from 'top-level']} %^^A \AddToHook{example-hook}[foo]{[code from package 'foo']} %^^A \AddToHook{example-hook}[bar]{[from package 'bar']} %^^A \AddToHook{example-hook}[baz]{[package 'baz' is here]} @@ -680,13 +759,15 @@ % > foo -> [code from package 'foo'] % > bar -> [from package 'bar'] % > baz -> [package 'baz' is here] +% > Document-level (top-level) code (executed last): +% > -> [code from 'top-level'] % > Extra code for next invocation: % > -> [one-time code] % > Rules: % > foo|baz with relation > % > baz|bar with default relation < % > Execution order (after applying rules): -% > bar, baz, foo. +% > baz, foo, bar. % \end{verbatim} % % In the listing above, lines~3 to~5 show the three code chunks added @@ -695,7 +776,18 @@ % \quad \meta{label}\verb| -> |\meta{code} % \end{quote} % -% Line~7 shows the code chunk for the next execution of the hook in +% Line~7 shows the code chunk added by the user in the main document +% (labeled |top-level|) in the format +% \begin{quote} +% \quad\verb|Document-level (top-level) code (executed |%^^A +% \meta{first\texttt{\string|}last}\verb|):|\\ +% \quad\verb| -> |\meta{\texttt{top-level} code} +% \end{quote} +% This code will be either the first or last code executed by the hook +% (|last| if the hook is normal, |first| if it is reversed). This +% chunk is not affected by rules and does not take part in sorting. +% +% Line~9 shows the code chunk for the next execution of the hook in % the format % \begin{quote} % \quad \verb|-> |\meta{next-code} @@ -705,7 +797,7 @@ % earlier, which can only be removed from that hook by doing % \verb|\RemoveFromHook{|\meta{label}|}[example-hook]|. % -% Lines~9 and~10 show the rules declared that affect this hook in the +% Lines~11 and~12 show the rules declared that affect this hook in the % format % \begin{quote} % \quad \meta{label-1}\verb+|+\meta{label-2}| with |%^^A @@ -717,9 +809,8 @@ % to \meta{label-1} and \meta{label-2} in \emph{all} hooks, (unless % overrided by a non-default relation). % -% Finally, line~12 lists the labels in the hook after sorting; +% Finally, line~14 lists the labels in the hook after sorting; % that is, in the order they will be executed when the hook is used. -% \end{function} % % % \subsubsection{Debugging hook code} @@ -749,8 +840,9 @@ % \begin{function} % {\hook_new:n,\hook_new_reversed:n,\hook_new_pair:nn} % \begin{syntax} -% \cs{hook_new:n}\Arg{hook} -% \cs{hook_new_pair:nn}\Arg{hook-1}\Arg{hook-2} +% \cs{hook_new:n} \Arg{hook} +% \cs{hook_new_reversed:n} \Arg{hook} +% \cs{hook_new_pair:nn} \Arg{hook-1} \Arg{hook-2} % \end{syntax} % Creates a new \meta{hook} with normal or reverse ordering of code % chunks. \cs{hook_new_pair:nn} creates a pair of such hooks with @@ -782,7 +874,6 @@ % Changes the \Arg{hook} status so that from now on any addition to % the hook code is executed immediately. Then execute any % \Arg{hook} code already set up. -% \fmi{better L3 name?} % % The \meta{hook} \emph{cannot} be specified using the dot-syntax. % A leading |.| is treated literally. @@ -954,17 +1045,19 @@ % \texttt{packageB}, \texttt{packageC} which you can verify with % \cs{ShowHook}\texttt{\{myhook\}}: %\begin{verbatim} -% The hook 'myhook': -% Code chunks: -% packageA -> \typeout {A} -% packageB -> \typeout {B} -% packageC -> \typeout {C} -% Extra code next invocation: -% --- -% Rules: -% --- -% Execution order: -% packageA, packageB, packageC +% -> The hook 'myhook': +% > Code chunks: +% > packageA -> \typeout {A} +% > packageB -> \typeout {B} +% > packageC -> \typeout {C} +% > Document-level (top-level) code (executed last): +% > --- +% > Extra code for next invocation: +% > --- +% > Rules: +% > --- +% > Execution order: +% > packageA, packageB, packageC. %\end{verbatim} % The reason is that the code chunks are internally saved in a property list % and the initial order of such a property list is the order in @@ -988,17 +1081,19 @@ %\end{verbatim} % instead of the previous lines we get %\begin{verbatim} -% The hook 'myhook': -% Code chunks: -% packageA -> \typeout {A} -% packageB -> \typeout {B} -% packageC -> \typeout {C} -% Extra code next invocation: -% --- -% Rules: -% packageA|packageB with relation before -% Execution order (after applying rules): -% packageA, packageC, packageB +% -> The hook 'myhook': +% > Code chunks: +% > packageA -> \typeout {A} +% > packageB -> \typeout {B} +% > packageC -> \typeout {C} +% > Document-level (top-level) code (executed last): +% > --- +% > Extra code for next invocation: +% > --- +% > Rules: +% > packageB|packageA with relation > +% > Execution order (after applying rules): +% > packageA, packageC, packageB. %\end{verbatim} % As you can see the code chunks are still in the same order, but % in the execution order for the labels \texttt{packageB} and @@ -1010,7 +1105,7 @@ % doesn't run at all as there is nothing to resolve). % Incidentally, if we had instead specified the redundant rule %\begin{verbatim} -% \DeclareHookRule{myhook}{packageB}{before}{label-3} +% \DeclareHookRule{myhook}{packageB}{before}{packageC} %\end{verbatim} % the execution order would not have changed. % @@ -1039,17 +1134,17 @@ % \AddToHook{env/quote/after} [package-1]{\end{itshape}} %\end{verbatim} % As a result, all quotes will be in italics. -% Now suppose further that the user wants the quotes also in blue -% and therefore adds: +% Now suppose further that another |package-too| makes the quotes +% also in blue and therefore adds: %\begin{verbatim} % \usepackage{color} -% \AddToHook{env/quote/before}{\begin{color}{blue}} -% \AddToHook{env/quote/after} {\end{color}} +% \AddToHook{env/quote/before}[package-too]{\begin{color}{blue}} +% \AddToHook{env/quote/after} [package-too]{\end{color}} %\end{verbatim} % Now if the \hook{env/quote/after} hook would be a normal hook we % would get the same execution order in both hooks, namely: %\begin{verbatim} -% package-1, top-level +% package-1, package-too %\end{verbatim} % (or vice versa) and as a result, would get: %\begin{verbatim} @@ -1063,16 +1158,18 @@ % the correct sequence and \cs{ShowHook} would give us the % following output: %\begin{verbatim} -% The hook 'env/quote/after': -% Code chunks: -% package-1 -> \end {itshape} -% top-level -> \end {color} -% Extra code next invocation: -% --- -% Rules: -% --- -% Execution order (after reversal): -% top-level, package-1 +% -> The hook 'env/quote/after': +% > Code chunks: +% > package-1 -> \end {itshape} +% > package-too -> \end {color} +% > Document-level (top-level) code (executed first): +% > --- +% > Extra code for next invocation: +% > --- +% > Rules: +% > --- +% > Execution order (after reversal): +% > package-too, package-1. %\end{verbatim} % % The reversal of the execution order happens before applying any @@ -1206,13 +1303,15 @@ % \hook{begindocument} % (which is executed inside \verb=\begin{document}=). % However, all code added this way is labeled with the label -% \hook{top-level} if done outside of a package or class or with the -% package/class name if called inside such a file. +% \hook{top-level} (see section~\ref{sec:top-level}) +% if done outside of a package or class or with the +% package/class name if called inside such a file +% (see section~\ref{sec:default-label}). % % This way one can add further code to the hook using % \cs{AddToHook} or \cs{AtBeginDocument} using a different label % and explicitly order the code chunks as necessary, e.g., run some -% code before or after the \hook{top-level} code. When using the +% code before or after another package's code. When using the % optional argument the call is equivalent to running % \cs{AddToHook} \texttt{\{begindocument\}} \oarg{label} % \Arg{code}. @@ -1251,7 +1350,7 @@ % The few hooks that existed previously in \LaTeXe{} used internally % commands such as \cs{@begindocumenthook} and packages sometimes % augemented them directly rather than working through -% \cs{AtBeginDocumement}. For that reason there is currently support +% \cs{AtBeginDocument}. For that reason there is currently support % for this, that is, if the system detects that such an internal % legacy hook command contains code it adds it to the new hook % system under the label \texttt{legacy} so that it doesn't get @@ -1333,8 +1432,8 @@ % \cs{BeforeBeginEnvironment} \oarg{label} \Arg{code} % \end{syntax} % This declaration adds to the \hook{env/\meta{env}/before} hook -% using by default the current package or class name as a label or -% \texttt{top-level} if used in the document directly. +% using the \meta{label}. If \meta{label} is not given, the +% \meta{default label} is used (see section~\ref{sec:default-label}). % \end{function} % % \begin{function}{\AtBeginEnvironment} @@ -1774,6 +1873,37 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_tl_set:Nn,\@@_tl_set:cn,\@@_tl_set:cx} +% \begin{macro}{\@@_tl_gset:Nn,\@@_tl_gset:cn,\@@_tl_gset:co,\@@_tl_gset:cx} +% \begin{macro}{\@@_tl_gput_right:Nn,\@@_tl_gput_right:No,\@@_tl_gput_right:cn} +% \begin{macro}{\@@_tl_gput_left:Nn,\@@_tl_gput_left:No} +% \begin{macro}{\@@_tl_gclear:N,\@@_tl_gclear:c} +% \begin{macro}{\@@_tl_gset_eq:NN} +% Private copies of a few \pkg{expl3} functions. \pkg{l3debug} will +% only add debugging to the public names, not to these copies, so we +% don't have to use \cs{debug_suspend:} and \cs{debug_resume:} +% everywhere. +% \begin{macrocode} +\cs_new_eq:NN \@@_tl_set:Nn \tl_set:Nn +\cs_generate_variant:Nn \@@_tl_set:Nn { cn, cx } +\cs_new_eq:NN \@@_tl_gset:Nn \tl_gset:Nn +\cs_generate_variant:Nn \@@_tl_gset:Nn { cn, co, cx } +\cs_new_eq:NN \@@_tl_gput_right:Nn \tl_gput_right:Nn +\cs_generate_variant:Nn \@@_tl_gput_right:Nn { No, cn } +\cs_new_eq:NN \@@_tl_gput_left:Nn \tl_gput_left:Nn +\cs_generate_variant:Nn \@@_tl_gput_left:Nn { No } +\cs_new_protected:Npn \@@_tl_gclear:N #1 + { \@@_tl_gset_eq:NN #1 \c_empty_tl } +\cs_generate_variant:Nn \@@_tl_gclear:N { c } +\cs_new_eq:NN \@@_tl_gset_eq:NN \tl_gset_eq:NN +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % % \subsection{Providing new hooks} % @@ -1808,6 +1938,13 @@ % $\meta{reversed}1$ is $+1$ for normal hooks and $-1$ for reversed % ones. % +% \item[\cs{@@_toplevel~\meta{name}}] This token list stores the code +% inserted in the hook from the user's document, in the |top-level| +% label. This label is special, and doesn't participate in sorting. +% Instead, all code is appended to it and executed after (or before, +% if the hook is reversed) the normal +% hook code, but before the |next| code chunk. +% % \item[\cs{@@_next~\meta{name}}] Finally there is extra code % (normally empty) that is used on the next invocation of the hook % (and then deleted). This can be used to define some special @@ -1890,15 +2027,16 @@ % \begin{macro}{\@@_declare:n} % This function declares the basic data structures for a hook without % actually declaring the hook itself. This is needed to allow adding -% to undeclared hooks. Here it is unnecessary to check whether both -% variables exist, since both are declared at the same time (either -% both exist, or neither). +% to undeclared hooks. Here it is unnecessary to check whether all +% variables exist, since all three are declared at the same time +% (either all of them exist, or none). % \begin{macrocode} \cs_new_protected:Npn \@@_declare:n #1 { \@@_if_exist:nF {#1} { \prop_new:c { g_@@_#1_code_prop } + \tl_new:c { @@_toplevel~#1 } \tl_new:c { @@_next~#1 } } } @@ -1951,13 +2089,6 @@ \cs_new_protected:Npn \@@_include_legacy_code_chunk:n #1 { % \end{macrocode} -% If the \pkg{expl3} code is run with checking on then assigning or -% using non L3 names such as \cs{@enddocumenthook} with \pkg{expl3} -% functions will trigger warnings so we run this code with -% debugging explicitly suspended. -% \begin{macrocode} - \debug_suspend: -% \end{macrocode} % If the macro doesn't exist (which is the usual case) then nothing % needs to be done. % \begin{macrocode} @@ -1975,10 +2106,9 @@ % Once added to the hook, we need to clear it otherwise it might % get added again later if the hook data gets updated. % \begin{macrocode} - \tl_gclear:c { @#1hook } + \@@_tl_gclear:c { @#1hook } } } - \debug_resume: } % \end{macrocode} % \end{macro} @@ -1990,79 +2120,76 @@ % \begin{macro}[EXP]{\@@_parse_label_default:n} % This macro checks if a label was given (not \cs{c_novalue_tl}), and % if so, tries to parse the label looking for a leading \verb|.| to -% replace for \cs{@currname}. Otherwise \cs{@@_currname_or_default:n} -% is used to pick \cs{@currname} or the fallback value. -% -% The default |top-level| is hard-coded here. It once was an -% argument, but it's no longer needed. \pho{can't remember why} +% replace by \cs{@@_currname_or_default:}. % \begin{macrocode} \cs_new:Npn \@@_parse_label_default:n #1 { \tl_if_novalue:nTF {#1} - { \@@_currname_or_default:n { top-level } } - { - \tl_trim_spaces_apply:nN {#1} - \@@_parse_dot_label:nn { top-level } - } + { \@@_currname_or_default: } + { \tl_trim_spaces_apply:nN {#1} \@@_parse_dot_label:n } } % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\@@_parse_dot_label:nn} +% \begin{macro}[EXP]{\@@_parse_dot_label:n} % \begin{macro}[EXP]{ -% \@@_parse_dot_label:nw, +% \@@_parse_dot_label:w, % \@@_parse_dot_label_cleanup:w, -% \@@_parse_dot_label_aux:nw +% \@@_parse_dot_label_aux:w % } % Start by checking if the label is empty, which raises an error, and % uses the fallback value. If not, % split the label at a \verb|./|, if any, and check if no tokens are % before the \verb|./|, or if the only character is a \verb|.|. % If these requirements are fulfilled, the leading -% \verb|.| is replaced with \cs{@@_currname_or_default:n}. Otherwise +% \verb|.| is replaced with \cs{@@_currname_or_default:}. Otherwise % the label is returned unchanged. % \begin{macrocode} -\cs_new:Npn \@@_parse_dot_label:nn #1 #2 +\cs_new:Npn \@@_parse_dot_label:n #1 { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nnn { hooks } { empty-label } {#2} - #2 + \msg_expandable_error:nn { hooks } { empty-label } + \@@_currname_or_default: } { \str_if_eq:nnTF {#1} { . } - { \@@_currname_or_default:n {#2} } - { \@@_parse_dot_label:nw {#2} #1 ./ \s_@@_mark } + { \@@_currname_or_default: } + { \@@_parse_dot_label:w #1 ./ \s_@@_mark } } } -\cs_new:Npn \@@_parse_dot_label:nw #1 #2 ./ #3 \s_@@_mark +\cs_new:Npn \@@_parse_dot_label:w #1 ./ #2 \s_@@_mark { - \tl_if_empty:nTF {#2} - { \@@_parse_dot_label_aux:nw {#1} #3 \s_@@_mark } + \tl_if_empty:nTF {#1} + { \@@_parse_dot_label_aux:w #2 \s_@@_mark } { - \tl_if_empty:nTF {#3} - { \@@_make_name:n {#2} } - { \@@_parse_dot_label_cleanup:w #2 ./ #3 \s_@@_mark } + \tl_if_empty:nTF {#2} + { \@@_make_name:n {#1} } + { \@@_parse_dot_label_cleanup:w #1 ./ #2 \s_@@_mark } } } \cs_new:Npn \@@_parse_dot_label_cleanup:w #1 ./ \s_@@_mark {#1} -\cs_new:Npn \@@_parse_dot_label_aux:nw #1 #2 ./ \s_@@_mark - { \@@_currname_or_default:n {#1} / \@@_make_name:n {#2} } +\cs_new:Npn \@@_parse_dot_label_aux:w #1 ./ \s_@@_mark + { \@@_currname_or_default: / \@@_make_name:n {#1} } % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\@@_currname_or_default:n} +% \begin{macro}[EXP]{\@@_currname_or_default:} % Uses \cs{g_@@_hook_curr_name_tl} if it is set, otherwise tries -% \cs{@currname}. If neither is set, uses the fallback value -% \verb|#1| (usually \texttt{top-level}). +% \cs{@currname}. If neither is set, raises an error and uses the +% fallback value \verb|label-missing|. % \begin{macrocode} -\cs_new:Npn \@@_currname_or_default:n #1 +\cs_new:Npn \@@_currname_or_default: { \tl_if_empty:NTF \g_@@_hook_curr_name_tl { \tl_if_empty:NTF \@currname - { \@@_make_name:n {#1} } + { + \msg_expandable_error:nnn { hooks } { should-not-happen } + { Empty~default~label. } + \@@_make_name:n { label-missing } + } { \@currname } } { \g_@@_hook_curr_name_tl } @@ -2213,14 +2340,33 @@ % \end{macrocode} % Then try to get the code chunk labeled \verb=#2= from the hook. % If there's code already there, then append \verb=#3= to that, -% otherwise just put \verb=#3=. +% otherwise just put \verb=#3=. If the current label is |top-level|, +% the code is added to a dedicated token list +% \cs[no-index]{@@_toplevel~\meta{hook}} that goes at the end of the +% hook (or at the beginning, for a reversed hook), just before +% \cs[no-index]{@@_next~\meta{hook}}. +% \begin{macrocode} + \str_if_eq:nnTF {#2} { top-level } + { + \str_if_eq:eeTF { top-level } { \@@_currname_or_default: } + { +% \end{macrocode} +% If the hook's basic structure does not exist, we need to declare it +% with \cs{@@_declare:n}. % \begin{macrocode} - \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl + \@@_declare:n {#1} + \@@_tl_gput_right:cn { @@_toplevel~#1 } {#3} + } + { \msg_error:nnn { hooks } { misused-top-level } {#1} } + } { - \prop_gput:cno { g_@@_#1_code_prop } {#2} - { \l_@@_return_tl #3 } + \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl + { + \prop_gput:cno { g_@@_#1_code_prop } {#2} + { \l_@@_return_tl #3 } + } + { \prop_gput:cnn { g_@@_#1_code_prop } {#2} {#3} } } - { \prop_gput:cnn { g_@@_#1_code_prop } {#2} {#3} } } % \end{macrocode} % \end{macro} @@ -2434,24 +2580,48 @@ % hook before its defined (see section~\ref{sec:querying}). % \begin{macrocode} \@@_if_exist:nTF {#1} + { % \end{macrocode} % Then remove the chunk and run \cs{@@_update_hook_code:n} so % that the execution token list reflects the change if we are after % \verb=\begin{document}=. +% +% If all code is to be removed, clear the code pool +% \cs[no-index]{g_@@_\meta{hook}_code_prop}, the top-level code +% \cs[no-index]{@@_toplevel~\meta{hook}}, and the next-execution code +% \cs[no-index]{@@_next~\meta{hook}}. % \begin{macrocode} - { \str_if_eq:nnTF {#2} {*} - { \prop_gclear:c { g_@@_#1_code_prop } } { + \prop_gclear:c { g_@@_#1_code_prop } + \@@_tl_gclear:c { @@_toplevel~#1 } + \@@_tl_gclear:c { @@_next~#1 } + } + { +% \end{macrocode} +% If the label is |top-level| then clear the token list, as all code +% there is under the same label. Marked removal is not implemented +% for |top-level| because it is hard to reliably know that no code +% was added to \cs[no-index]{@@_toplevel~\meta{hook}} (granted that +% an empty code could be interpreted as that, but then it differs in +% behaviour from other labels, in which an empty chunk is still valid +% for removal). Besides, it doesn't make much (if any) sense for +% packages to remove |top-level| code. So here the chunk is just +% cleared unconditionally. +% \begin{macrocode} + \str_if_eq:nnTF {#2} { top-level } + { \@@_tl_gclear:c { @@_toplevel~#1 } } + { % \end{macrocode} -% Check if the label being removed exists in the code pool. If it does, -% just call \cs{@@_gremove_code_do:nn} to do the removal, otherwise mark it -% to be removed. +% Otherwise check if the label being removed exists in the code pool. +% If it does, just call \cs{@@_gremove_code_do:nn} to do the removal, +% otherwise mark it to be removed. % \begin{macrocode} - \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl - { \@@_gremove_code_do:nn } - { \@@_mark_removal:nn } - {#1} {#2} + \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl + { \@@_gremove_code_do:nn } + { \@@_mark_removal:nn } + {#1} {#2} + } } % \end{macrocode} % Finally update the code, if the hook exists. @@ -2470,6 +2640,7 @@ % \end{macrocode} % % \begin{macro}{\@@_gremove_code_do:nn} +% Remove code for a given label. % \begin{macrocode} \cs_new_protected:Npn \@@_gremove_code_do:nn #1 #2 { \prop_gremove:cn { g_@@_#1_code_prop } {#2} } @@ -2605,7 +2776,6 @@ % Then we call the function to handle the given rule. Throw an error if the % rule is invalid. % \begin{macrocode} - \debug_suspend: \cs_if_exist_use:cTF { @@_rule_#3_gset:nnn } { {#1} {#2} {#4} @@ -2613,7 +2783,6 @@ } { \msg_error:nnnnnn { hooks } { unknown-rule } {#1} {#2} {#3} {#4} } - \debug_resume: } % \end{macrocode} % \end{macro} @@ -2639,7 +2808,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_rule_before_gset:nnn #1#2#3 { - \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } + \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { \@@_label_ordered:nnTF {#2} {#3} { < } { > } } } \cs_new_eq:cN { @@_rule_<_gset:nnn } \@@_rule_before_gset:nnn @@ -2648,7 +2817,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_rule_after_gset:nnn #1#2#3 { - \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#3} {#2} _tl } + \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#3} {#2} _tl } { \@@_label_ordered:nnTF {#3} {#2} { < } { > } } } \cs_new_eq:cN { @@_rule_>_gset:nnn } \@@_rule_after_gset:nnn @@ -2661,7 +2830,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_rule_voids_gset:nnn #1#2#3 { - \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } + \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { \@@_label_ordered:nnTF {#2} {#3} { -> } { <- } } } % \end{macrocode} @@ -2675,9 +2844,9 @@ % together in hook |#1|. % \begin{macrocode} \cs_new_protected:cpn { @@_rule_incompatible-error_gset:nnn } #1#2#3 - { \tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xE } } + { \@@_tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xE } } \cs_new_protected:cpn { @@_rule_incompatible-warning_gset:nnn } #1#2#3 - { \tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xW } } + { \@@_tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xW } } % \end{macrocode} % \end{macro} % @@ -2722,7 +2891,7 @@ % \end{macro} % % \begin{macro}[EXP]{\@@_if_label_case:nnnnn} -% To avoid doing the string comparison twice in \cs{@@_initialize_single:NNNn} +% To avoid doing the string comparison twice in \cs{@@_initialize_single:NNn} % (once with \cs{str_if_eq:nn} and again with \cs{@@_label_ordered:nn}), % we use a three-way branching macro that will compare |#1| and |#2| % and expand to \cs{use_i:nnn} if they are equal, \cs{use_ii:nn} if @@ -2800,7 +2969,6 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_initialize_hook_code:n #1 { - \debug_suspend: \@@_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~ '#1' \on@line :^^J} } % \end{macrocode} @@ -2815,17 +2983,22 @@ % If there aren't any code % chunks for the current hook, there is no point in even starting % the sorting routine so we make a quick test for that and in that -% case just update \cs{@@~\meta{hook}} to hold the next -% code. If there are code chunks we call -% \cs{@@_initialize_single:NNNn} and pass to it ready made csnames +% case just update \cs{@@~\meta{hook}} to hold the |top-level| and +% |next| code chunks. If there are code chunks we call +% \cs{@@_initialize_single:NNn} and pass to it ready made csnames % as they are needed several times inside. This way we save a bit % on processing time if we do that up front. % \begin{macrocode} \hook_if_exist:nT {#1} { \prop_if_empty:cTF {g_@@_#1_code_prop} - { \tl_gset:co { @@~#1 } - { \cs:w @@_next~#1 \cs_end: } } + { + \@@_tl_gset:co { @@~#1 } + { + \cs:w @@_toplevel~#1 \exp_after:wN \cs_end: + \cs:w @@_next~#1 \cs_end: + } + } { % \end{macrocode} % By default the algorithm sorts the code chunks and then saves the @@ -2836,9 +3009,9 @@ % in preparation is to change two definitions used later on. % \begin{macrocode} \@@_if_reversed:nTF {#1} - { \cs_set_eq:NN \@@_tl_gput:NV \tl_gput_left:NV + { \cs_set_eq:NN \@@_tl_gput:Nn \@@_tl_gput_left:Nn \cs_set_eq:NN \@@_clist_gput:NV \clist_gput_left:NV } - { \cs_set_eq:NN \@@_tl_gput:NV \tl_gput_right:NV + { \cs_set_eq:NN \@@_tl_gput:Nn \@@_tl_gput_right:Nn \cs_set_eq:NN \@@_clist_gput:NV \clist_gput_right:NV } % \end{macrocode} % @@ -2848,9 +3021,8 @@ % save the old code property list so that it can be restored later. % \begin{macrocode} \prop_set_eq:Nc \l_@@_work_prop { g_@@_#1_code_prop } - \@@_initialize_single:cccn - { @@~#1 } { @@_next~#1 } - { g_@@_#1_labels_clist } {#1} + \@@_initialize_single:ccn + { @@~#1 } { g_@@_#1_labels_clist } {#1} % \end{macrocode} % For debug display we want to keep track of those hooks that % actually got code added to them, so we record that in plist. We @@ -2862,7 +3034,6 @@ \g_@@_used_prop {#1}{} } } } - \debug_resume: } % \end{macrocode} % \end{macro} @@ -2918,12 +3089,13 @@ % \end{macro} % % -% \begin{macro}{\@@_initialize_single:NNNn,\@@_initialize_single:cccn} +% \begin{macro}{\@@_initialize_single:NNn,\@@_initialize_single:ccn} % -% \cs{@@_initialize_single:NNNn} implements the sorting of the code +% \cs{@@_initialize_single:NNn} implements the sorting of the code % chunks for a hook and saves the result in the token list for fast -% execution (\verb=#3=). The arguments are \meta{hook-code-plist}, -% \meta{hook-code-tl}, \meta{hook-next-code-tl}, +% execution (\verb=#4=). The arguments are \meta{hook-code-plist}, +% \meta{hook-code-tl}, \meta{hook-top-level-code-tl}, +% \meta{hook-next-code-tl}, % \meta{hook-ordered-labels-clist} and \meta{hook-name} (the latter % is only used for debugging---the \meta{hook-rule-plist} is accessed % using the \meta{hook-name}). @@ -2935,8 +3107,12 @@ % far as possible. The result is a restriction I do not test for at % the moment: a label can't be equal to the number 0! \fmi{Needs % checking for, just in case} +% +% ^^A #1 <- \@@~#1 +% ^^A #2 <- \g_@@_#1_labels_clist +% ^^A #3 <- #1 % \begin{macrocode} -\cs_new_protected:Npn \@@_initialize_single:NNNn #1#2#3#4 +\cs_new_protected:Npn \@@_initialize_single:NNn #1#2#3 { % \end{macrocode} % Step T1: Initialize the data structure \ldots @@ -2947,7 +3123,7 @@ % % Store the name of the hook: % \begin{macrocode} - \tl_set:Nn \l_@@_cur_hook_tl {#4} + \tl_set:Nn \l_@@_cur_hook_tl {#3} % \end{macrocode} % % We loop over the property list holding the code and record all @@ -2961,7 +3137,7 @@ { \int_incr:N \l_@@_labels_int \seq_put_right:Nn \l_@@_labels_seq {##1} - \tl_set:cn { \@@_tl_csname:n {##1} }{0} + \@@_tl_set:cn { \@@_tl_csname:n {##1} } { 0 } \seq_clear_new:c { \@@_seq_csname:n {##1} } } % \end{macrocode} @@ -2987,7 +3163,7 @@ { \prop_map_break: } { \@@_apply_label_pair:nnn {##1} {####1} } { \@@_apply_label_pair:nnn {####1} {##1} } - {#4} + {#3} } } % \end{macrocode} @@ -3014,8 +3190,8 @@ % \end{macrocode} % % \begin{macrocode} - \tl_gclear:N #1 - \clist_gclear:N #3 + \@@_tl_gclear:N #1 + \clist_gclear:N #2 % \end{macrocode} % % The whole loop combines steps T5--T7: @@ -3027,11 +3203,11 @@ % \begin{macrocode} \int_decr:N \l_@@_labels_int \prop_get:NVN \l_@@_work_prop \l_@@_front_tl \l_@@_return_tl - \@@_tl_gput:NV #1 \l_@@_return_tl + \exp_args:NNV \@@_tl_gput:Nn #1 \l_@@_return_tl % \end{macrocode} % % \begin{macrocode} - \@@_clist_gput:NV #3 \l_@@_front_tl + \@@_clist_gput:NV #2 \l_@@_front_tl \@@_debug:n{ \iow_term:x{Handled~ code~ for~ \l_@@_front_tl} } % \end{macrocode} % @@ -3078,27 +3254,31 @@ } % \end{macrocode} % After we have added all hook code to \verb=#1= we finish it off -% with adding extra code for a one time execution. That is stored -% in \verb=#2= but is normally empty. -% \begin{macrocode} - \tl_gput_right:Nn #1 {#2} +% with adding extra code for the |top-level| (\verb=#2=) and for one +% time execution (\verb=#3=). These should normally be empty. The +% |top-level| code is added with \cs{@@_tl_gput:Nn} as that might +% change for a reversed hook (then |top-level| is the very first code +% chunk added). The |next| code is always added last. +% \begin{macrocode} + \exp_args:NNo \@@_tl_gput:Nn #1 { \cs:w @@_toplevel~#3 \cs_end: } + \@@_tl_gput_right:No #1 { \cs:w @@_next~#3 \cs_end: } } % \end{macrocode} -% +% % \begin{macrocode} -\cs_generate_variant:Nn \@@_initialize_single:NNNn {ccc} +\cs_generate_variant:Nn \@@_initialize_single:NNn { cc } % \end{macrocode} % \end{macro} % % % -% \begin{macro}{\@@_tl_gput:NV,\@@_clist_gput:NV} +% \begin{macro}{\@@_tl_gput:Nn,\@@_clist_gput:NV} % These append either on the right (normal hook) or on the left % (reversed hook). This is setup up in % \cs{@@_initialize_hook_code:n}, elsewhere their behavior is undefined. % \begin{macrocode} -\cs_new:Npn \@@_tl_gput:NV {\ERROR} -\cs_new:Npn \@@_clist_gput:NV {\ERROR} +\cs_new:Npn \@@_tl_gput:Nn { \ERROR } +\cs_new:Npn \@@_clist_gput:NV { \ERROR } % \end{macrocode} % \end{macro} % @@ -3347,7 +3527,8 @@ % \begin{macrocode} \hook_if_exist:nF {#1} { \@@_log_line:x { is~not~declared! } } - \@@_if_exist:nTF {#1} + \hook_if_empty:nTF {#1} + { #2 { The~hook~is~empty } } { \@@_log_line:x { Code~chunks: } \prop_if_empty:cTF { g_@@_#1_code_prop } @@ -3357,9 +3538,25 @@ { \@@_log_line_indent:x { ##1~->~\tl_to_str:n {##2} } } } % \end{macrocode} -% +% +% If there is code in the |top-level| token list, print it: % \begin{macrocode} - \@@_log_line:x { Extra~code~for~next~invocation:} + \@@_log_line:x + { + Document-level~(top-level)~code + \hook_if_exist:nT {#1} + { ~(executed~\@@_if_reversed:nTF {#1} {first} {last} ) } : + } + \@@_log_line_indent:x + { + \tl_if_empty:cTF { @@_toplevel~#1 } + { --- } + { -> ~ \exp_args:Nv \tl_to_str:n { @@_toplevel~#1 } } + } +% \end{macrocode} +% +% \begin{macrocode} + \@@_log_line:x { Extra~code~for~next~invocation: } \@@_log_line_indent:x { \tl_if_empty:cTF { @@_next~#1 } @@ -3427,7 +3624,6 @@ } } } - { #2 { The~hook~is~empty. } } } % \end{macrocode} % @@ -3478,7 +3674,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_list_one_rule:nnn #1#2#3 { - \@@_list_if_rule_exists:nnnF {#1} {#2} {#3} { } + \@@_list_if_rule_exists:nnnF {#1} {#2} {#3} { \@@_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } } } \cs_new_protected:Npn \@@_list_if_rule_exists:nnnF #1#2#3 @@ -3486,7 +3682,9 @@ \if_cs_exist:w g_@@_ #3 _rule_ #1 | #2 _tl \cs_end: \exp_args:Nv \@@_tmp:w { g_@@_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3} + \exp_after:wN \use_none:nn \fi: + \use:n } % \end{macrocode} % \end{macro} @@ -3528,12 +3726,10 @@ { \@@_normalize_hook_args:Nn \@@_gput_next_code:nn {#1} } \cs_new_protected:Npn \@@_gput_next_code:nn #1 #2 { - \debug_suspend: \@@_declare:n {#1} \hook_if_exist:nTF {#1} { \@@_gput_next_do:nn {#1} {#2} } { \@@_try_declaring_generic_next_hook:nn {#1} {#2} } - \debug_resume: } \cs_new_protected:Npn \@@_gput_next_do:nn #1 { @@ -3556,8 +3752,8 @@ \tl_if_empty:cT { @@~#2 } { \@@_update_hook_code:n {#2} } \tl_if_empty:NT #1 - { \tl_gset:Nn #1 { \@@_clear_next:n {#2} } } - \tl_gput_right:Nn #1 + { \@@_tl_gset:Nn #1 { \@@_clear_next:n {#2} } } + \@@_tl_gput_right:Nn #1 } \cs_new_protected:Npn \@@_clear_next:n #1 { \cs_gset_eq:cN { @@_next~#1 } \c_empty_tl } @@ -3565,7 +3761,6 @@ % \end{macro} % \end{macro} % -% % \subsection{Using the hook} % % \begin{macro}{\hook_use:n} @@ -3720,8 +3915,9 @@ % % \begin{macro}[pTF]{\hook_if_empty:n} % Test if a hook is empty (that is, no code was added to that hook). -% A hook being empty means that \emph{both} its -% \cs[no-index]{g_@@_\meta{hook}_code_prop} and its +% A \meta{hook} being empty means that all three of its +% \cs[no-index]{g_@@_\meta{hook}_code_prop}, its +% \cs[no-index]{@@_toplevel~\meta{hook}} and its % \cs[no-index]{@@_next~\meta{hook}} are empty. % \begin{macrocode} \prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF } @@ -3730,7 +3926,11 @@ { \bool_lazy_and:nnTF { \prop_if_empty_p:c { g_@@_#1_code_prop } } - { \tl_if_empty_p:c { @@_next~#1 } } + { + \bool_lazy_and_p:nn + { \tl_if_empty_p:c { @@_toplevel~#1 } } + { \tl_if_empty_p:c { @@_next~#1 } } + } { \prg_return_true: } { \prg_return_false: } } @@ -3812,9 +4012,20 @@ % % \begin{macrocode} \msg_new:nnn { hooks } { empty-label } - { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. } + { + Empty~code~label~\msg_line_context:.~ + Using~`\@@_currname_or_default:'~instead. + } % \end{macrocode} -% +% +% \begin{macrocode} +\msg_new:nnn { hooks } { no-default-label } + { + Missing~(empty)~default~label~\msg_line_context:. \\ + This~command~was~ignored. + } +% \end{macrocode} +% % \begin{macrocode} \msg_new:nnnn { hooks } { unknown-rule } { Unknown~ relationship~ `#3'~ @@ -3834,6 +4045,51 @@ % \end{macrocode} % % \begin{macrocode} +\msg_new:nnnn { hooks } { misused-top-level } + { + Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\ + 'top-level'~is~reserved~for~the~user's~document. + } + { + The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~ + be~used~(sparingly)~in~the~main~document.~Use~the~default~label~ + '\@@_currname_or_default:'~for~this~\@cls@pkg,~or~another~ + suitable~label. + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { hooks } { set-top-level } + { + You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\ + \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\ + \msg_line_context:. + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { hooks } { ddhl-deprecated } + { + \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\ + Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\ + The~deprecated~name~will~be~removed~in~the~next~release. + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { hooks } { extra-pop-label } + { + Extra~\iow_char:N \\PopDefaultHookLabel. \\ + This~command~will~be~ignored. + } +\msg_new:nnn { hooks } { missing-pop-label } + { + Missing~\iow_char:N \\PopDefaultHookLabel. \\ + The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong. + } +% \end{macrocode} +% +% \begin{macrocode} \msg_new:nnn { hooks } { should-not-happen } { ERROR!~This~should~not~happen.~#1 \\ @@ -3879,39 +4135,77 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\SetDefaultHookLabel} +% \begin{macro}{\PushDefaultHookLabel} +% \begin{macro}{\PopDefaultHookLabel} % \begin{macro}{\DeclareDefaultHookLabel} -% \begin{macro}{\@@_curr_name_push:n,\@@_curr_name_pop:} +% \begin{macro}{\@@_curr_name_push:n,\@@_curr_name_push_aux:n} +% \begin{macro}{\@@_curr_name_pop:} +% \begin{macro}{\@@_end_document_label_check:} % The token list \cs{g_@@_hook_curr_name_tl} stores the name of the % current package/file to be used as label for hooks. % Providing a consistent interface is tricky, because packages can % be loaded within packages, and some packages may not use -% \cs{DeclareDefaultHookLabel} to change the default label (in which case -% \cs{@currname} is used, if set). +% \cs{SetDefaultHookLabel} to change the default label (in which +% case \cs{@currname} is used). % -% To pull that off, we keep a stack that contains the default label -% for each level of input. The bottom of the stack contains the -% default label for the top-level. Since the string \verb|top-level| -% is hardcoded, here this item of the stack is empty. Also, since -% we're in an input level, add \verb|lthooks| to the stack as well. -% This stack should never go empty. An empty entry is added to the -% stack to account for the \verb|top-level|. The item is empty so -% that the hard-coded default is used, but a call to -% \cs{DeclareDefaultHookLabel} will change it if needed. +% To pull that one off, we keep a stack that contains the default +% label for each level of input. The bottom of the stack contains the +% default label for the |top-level| (this stack should never go +% empty). If we're building the format, set the default label to be +% |top-level|: % \begin{macrocode} -\seq_gpush:Nn \g_@@_name_stack_seq { } +\tl_gset:Nn \g_@@_hook_curr_name_tl { top-level } % \end{macrocode} % +% Then, in case we're in \pkg{latexrelease} we push something on +% the stack to support roll forward. But in some rare cases, +% \pkg{latexrelease} may be loaded inside another package (notably +% \pkg{platexrelease}), so we'll first push the |top-level| entry: +% \begin{macrocode} +%<latexrelease>\seq_gput_right:Nn \g_@@_name_stack_seq { top-level } +% \end{macrocode} +% then we dissect the \cs{@currnamestack}, adding \cs{@currname} to +% the stack: +% \changes{v1.0f}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} +%<latexrelease>\cs_set_protected:Npn \@@_tmp:w #1 #2 #3 +%<latexrelease> { +%<latexrelease> \quark_if_recursion_tail_stop:n {#1} +%<latexrelease> \seq_gput_right:Nn \g_@@_name_stack_seq {#1} +%<latexrelease> \@@_tmp:w +%<latexrelease> } +%<latexrelease>\exp_after:wN \@@_tmp:w \@currnamestack +%<latexrelease> \q_recursion_tail \q_recursion_tail +%<latexrelease> \q_recursion_tail \q_recursion_stop +% \end{macrocode} +% and finalle set the default label to be the \cs{@currname}: +% \begin{macrocode} +%<latexrelease>\tl_gset:Nx \g_@@_hook_curr_name_tl { \@currname } +% \end{macrocode} % % Two commands keep track of the stack: when a file is input, -% \cs{@@_curr_name_push:n} pushes an (empty by default) label to the -% stack: +% \cs{@@_curr_name_push:n} pushes the current default label to the +% stack, and sets the new default label in one go: % \begin{macrocode} \cs_new_protected:Npn \@@_curr_name_push:n #1 + { \exp_args:Nx \@@_curr_name_push_aux:n { \@@_make_name:n {#1} } } +\cs_new_protected:Npn \@@_curr_name_push_aux:n #1 { - \seq_gpush:Nn \g_@@_name_stack_seq {#1} - \tl_gset:Nn \g_@@_hook_curr_name_tl {#1} + \tl_if_blank:nTF {#1} + { \msg_error:nn { hooks } { no-default-label } } + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { PushDefaultHookLabel } {#1} + } + { + \seq_gpush:NV \g_@@_name_stack_seq \g_@@_hook_curr_name_tl + \tl_gset:Nn \g_@@_hook_curr_name_tl {#1} + } + } } -% % \end{macrocode} % and when an input is over, the topmost item of the stack is popped, % since the label will not be used again, and \cs{g_@@_hook_curr_name_tl} @@ -3919,12 +4213,27 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_curr_name_pop: { - \seq_gpop:NN \g_@@_name_stack_seq \l_@@_return_tl - \seq_get:NNTF \g_@@_name_stack_seq \l_@@_return_tl + \seq_gpop:NNTF \g_@@_name_stack_seq \l_@@_return_tl { \tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl } + { \msg_error:nn { hooks } { extra-pop-label } } + } +% \end{macrocode} +% +% At the end of the document we want to check if there was no +% \cs{@@_curr_name_push:} without a matching \cs{@@_curr_name_pop:} +% (not a critical error, but it might indicate that something else is +% not quite right): +% \begin{macrocode} +\tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage + { \@@_end_document_label_check: } +\cs_new_protected:Npn \@@_end_document_label_check: + { + \seq_gpop:NNT \g_@@_name_stack_seq \l_@@_return_tl { - \msg_error:nnn { hooks } { should-not-happen } - { Tried~to~pop~from~an~empty~default~label~stack. } + \msg_error:nnx { hooks } { missing-pop-label } + { \g_@@_hook_curr_name_tl } + \tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl + \@@_end_document_label_check: } } % \end{macrocode} @@ -3935,14 +4244,69 @@ % Now define a wrapper that replaces the top of the stack with the % argument, and updates \cs{g_@@_hook_curr_name_tl} accordingly. % \begin{macrocode} +\NewDocumentCommand \SetDefaultHookLabel { m } + { + \seq_if_empty:NTF \g_@@_name_stack_seq + { + \msg_error:nnnnn { hooks } { set-top-level } + { for } { SetDefaultHookLabel } {#1} + } + { \exp_args:Nx \@@_set_default_label:n { \@@_make_name:n {#1} } } + } +\cs_new_protected:Npn \@@_set_default_label:n #1 + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { SetDefaultHookLabel } {#1} + } + { \tl_gset:Nn \g_@@_hook_curr_name_tl {#1} } + } \NewDocumentCommand \DeclareDefaultHookLabel { m } { - \seq_gpop:NN \g_@@_name_stack_seq \l_@@_return_tl - \@@_curr_name_push:n {#1} + \msg_error:nn { hooks } { ddhl-deprecated } + \SetDefaultHookLabel {#1} + } +% \end{macrocode} +% +% The label is only automatically updated with \cs{@onefilewithoptions} +% (\cs{usepackage} and \cs{documentclass}), but some packages, like +% Ti\emph{k}Z, define package-like interfaces, like +% \cs{usetikzlibrary} that are wrappers around \cs{input}, so they +% inherit the default label currently in force (usually |top-level|, +% but it may change if loaded in another package). To provide a +% package-like behaviour also for hooks in these files, we provide +% high-level access to the default label stack. +% \begin{macrocode} +\NewDocumentCommand \PushDefaultHookLabel { m } + { \@@_curr_name_push:n {#1} } +\NewDocumentCommand \PopDefaultHookLabel { } + { \@@_curr_name_pop: } +% \end{macrocode} +% +% The current label stack holds the labels for all files but the +% current one (more or less like \cs{@currnamestack}), and the current +% label token list, \cs{g_@@_hook_curr_name_tl}, holds the label for +% the current file. However \cs{@pushfilename} happens before +% \cs{@currname} is set, so we need to look ahead to get the +% \cs{@currname} for the label. \pkg{expl3} also requires the current +% file in \cs{@pushfilename}, so here we abuse +% \cs{@expl@push@filename@aux@@@@} to do \cs{@@_curr_name_push:n}. +% \begin{macrocode} +\cs_gset_protected:Npn \@expl@push@filename@aux@@@@ #1#2#3 + { + \@@_curr_name_push:n {#3} + \str_gset:Nx \g_file_curr_name_str {#3} + #1 #2 {#3} } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % % @@ -4029,20 +4393,14 @@ % \end{macrocode} % % \begin{macro}{\@expl@@@initialize@all@@, -% \@expl@@@hook@curr@name@push@@n, % \@expl@@@hook@curr@name@pop@@} -% +% % \begin{macrocode} \cs_new_eq:NN \@expl@@@initialize@all@@ \__hook_initialize_all: % \end{macrocode} % % \begin{macrocode} -\cs_new_eq:NN \@expl@@@hook@curr@name@push@@n - \__hook_curr_name_push:n -% \end{macrocode} -% -% \begin{macrocode} \cs_new_eq:NN \@expl@@@hook@curr@name@pop@@ \__hook_curr_name_pop: % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/base/ltmath.dtx b/Master/texmf-dist/source/latex/base/ltmath.dtx index 36b8bb7ec46..770367c8a30 100644 --- a/Master/texmf-dist/source/latex/base/ltmath.dtx +++ b/Master/texmf-dist/source/latex/base/ltmath.dtx @@ -38,7 +38,7 @@ %<*driver> % \fi \ProvidesFile{ltmath.dtx} - [2020/07/27 v1.2g LaTeX Kernel (Math Setup)] + [2020/11/09 v1.2h LaTeX Kernel (Math Setup)] % \iffalse %</driver> % @@ -593,6 +593,13 @@ %<latexrelease>\def\;{\mskip\thickmuskip} %<latexrelease>\def\!{\mskip-\thinmuskip} %<latexrelease> +% \end{macrocode} +% \changes{v1.2h}{2020/11/09}{\cs{negmedspace} and \cs{negthickspace} +% have been only in amsmath, so we need to undefine for rollback (gh/423)} +% \begin{macrocode} +%<latexrelease>\let\negmedspace\@undefined +%<latexrelease>\let\negthickspace\@undefined +%<latexrelease> %<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/base/ltmiscen.dtx b/Master/texmf-dist/source/latex/base/ltmiscen.dtx index 9acbcccd683..cf7f3c836be 100644 --- a/Master/texmf-dist/source/latex/base/ltmiscen.dtx +++ b/Master/texmf-dist/source/latex/base/ltmiscen.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltmiscen.dtx} - [2020/10/23 v1.1w LaTeX Kernel (Misc. Environments)] + [2020/12/18 v1.1x LaTeX Kernel (Misc. Environments)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltmiscen.dtx} @@ -277,17 +277,6 @@ % \end{macro} % \end{environment} % -% -% \begin{macro}{\@kernel@after@enddocument, -% \@kernel@after@enddocument@afterlastpage} -% -% The two kernel hooks above are used by the shipout code. -% \begin{macrocode} -\let\@kernel@after@enddocument\@empty -\let\@kernel@after@enddocument@afterlastpage\@empty -% \end{macrocode} -% \end{macro} -% % \begin{macro}{\@enddocument@kernel@warnings} % % \begin{macrocode} @@ -395,8 +384,6 @@ %<latexrelease> \endgroup %<latexrelease> \deadcycles\z@\@@end} %<latexrelease> -%<latexrelease>\let\@kernel@after@enddocument\@undefined -%<latexrelease>\let\@kernel@after@enddocument@afterlastpage\@undefined %<latexrelease>\let\@enddocument@kernel@warnings\@undefined %<latexrelease> %<latexrelease>\EndIncludeInRelease diff --git a/Master/texmf-dist/source/latex/base/ltshipout.dtx b/Master/texmf-dist/source/latex/base/ltshipout.dtx index 8f0422c887b..e226f753f35 100644 --- a/Master/texmf-dist/source/latex/base/ltshipout.dtx +++ b/Master/texmf-dist/source/latex/base/ltshipout.dtx @@ -31,8 +31,8 @@ %%% From File: ltshipout.dtx % % \begin{macrocode} -\providecommand\ltshipoutversion{v1.0c} -\providecommand\ltshipoutdate{2020/09/27} +\providecommand\ltshipoutversion{v1.0d} +\providecommand\ltshipoutdate{2020/11/24} % \end{macrocode} % %<*driver> @@ -1376,9 +1376,11 @@ % % % \begin{macro}{\AtBeginDvi} -% +% If we roll forward from an earlier kernel \cs{AtBeginDvi} is +% defined so we better not use \cs{cs_new_protected:Npn} here. +% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)} % \begin{macrocode} -\cs_new_protected:Npn \AtBeginDvi {\@@_add_firstpage_material:Nn \AtBeginDvi} +\cs_set_protected:Npn \AtBeginDvi {\@@_add_firstpage_material:Nn \AtBeginDvi} % \end{macrocode} % \end{macro} % @@ -1448,7 +1450,17 @@ % \begin{macrocode} %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\shipout}{The hook management (shipout)}% -%<latexrelease>\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname +%<latexrelease> +% \end{macrocode} +% If we roll forward then \cs{tex\_shipout:D} may not be defined in +% which case \cs{shipout} does have it original definition and so +% we must not \cs{let} it to something else which is \cs{relax}! +% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)} +% \begin{macrocode} +%<latexrelease>\ifcsname tex_shipout:D\endcsname +%<latexrelease>\expandafter\let\expandafter\shipout +%<latexrelease> \csname tex_shipout:D\endcsname +%<latexrelease>\fi %<latexrelease> %<latexrelease>\let \ShipoutBox\@undefined %<latexrelease>\let \ReadonlyShipoutCounter \@undefined diff --git a/Master/texmf-dist/source/latex/base/ltvers.dtx b/Master/texmf-dist/source/latex/base/ltvers.dtx index dd69d5a6e35..c2ec2ffde33 100644 --- a/Master/texmf-dist/source/latex/base/ltvers.dtx +++ b/Master/texmf-dist/source/latex/base/ltvers.dtx @@ -115,7 +115,7 @@ {2020-10-01} %</2ekernel|latexrelease> %<*2ekernel> -\def\patch@level{2} +\def\patch@level{3} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty b/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty index db9ebd43b60..28a8f04f6ee 100644 --- a/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty +++ b/Master/texmf-dist/tex/latex/base/atbegshi-ltx.sty @@ -45,8 +45,8 @@ %% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team %% %%% From File: ltshipout.dtx -\providecommand\ltshipoutversion{v1.0c} -\providecommand\ltshipoutdate{2020/09/27} +\providecommand\ltshipoutversion{v1.0d} +\providecommand\ltshipoutdate{2020/11/24} \ProvidesPackage{atbegshi-ltx} [2020/08/17 v1.0a Emulation of the original atbegshi package^^Jwith kernel methods] diff --git a/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty b/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty index b0ee689e5c8..56d21aff4bd 100644 --- a/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty +++ b/Master/texmf-dist/tex/latex/base/atveryend-ltx.sty @@ -45,8 +45,8 @@ %% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, %% Phelype Oleinik & LaTeX Team %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0c} -\providecommand\ltfilehookdate{2020/10/18} +\providecommand\ltfilehookversion{v1.0d} +\providecommand\ltfilehookdate{2020/11/24} \ProvidesPackage{atveryend-ltx} [2020/08/19 v1.0a Emulation of the original atvery package^^Jwith kernel methods] diff --git a/Master/texmf-dist/tex/latex/base/everyshi-ltx.sty b/Master/texmf-dist/tex/latex/base/everyshi-ltx.sty index 2be54dfdc71..59c66825a24 100644 --- a/Master/texmf-dist/tex/latex/base/everyshi-ltx.sty +++ b/Master/texmf-dist/tex/latex/base/everyshi-ltx.sty @@ -45,8 +45,8 @@ %% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team %% %%% From File: ltshipout.dtx -\providecommand\ltshipoutversion{v1.0c} -\providecommand\ltshipoutdate{2020/09/27} +\providecommand\ltshipoutversion{v1.0d} +\providecommand\ltshipoutdate{2020/11/24} \ProvidesPackage{everyshi-ltx} [2020/08/17 v1.0a Emulation of the original everyshi package^^Jwith kernel methods] diff --git a/Master/texmf-dist/tex/latex/base/latex.ltx b/Master/texmf-dist/tex/latex/base/latex.ltx index dbcb91450cc..0bdc56bbfff 100644 --- a/Master/texmf-dist/tex/latex/base/latex.ltx +++ b/Master/texmf-dist/tex/latex/base/latex.ltx @@ -710,7 +710,7 @@ \def\fmtname{LaTeX2e} \edef\fmtversion {2020-10-01} -\def\patch@level{2} +\def\patch@level{3} \edef\development@branch@name{} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -988,6 +988,8 @@ } \fi %%% From File: ltexpl.dtx +\let\@kernel@after@enddocument\@empty +\let\@kernel@after@enddocument@afterlastpage\@empty \def\@expl@sys@load@backend@@{} \def\@expl@push@filename@@{} \def\@expl@push@filename@aux@@{} @@ -1628,8 +1630,8 @@ %% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach, %% Phelype Oleinik & LaTeX Team %%% From File: lthooks.dtx -\def\lthooksversion{v1.0e} -\def\lthooksdate{2020/10/23} +\def\lthooksversion{v1.0g} +\def\lthooksdate{2020/12/18} \ExplSyntaxOn \bool_new:N \g__hook_debug_bool \cs_new_eq:NN \__hook_debug:n \use_none:n @@ -1666,6 +1668,18 @@ \cs_generate_variant:Nn \tl_show:n { x } \cs_generate_variant:Nn \tl_log:n { x } \scan_new:N \s__hook_mark +\cs_new_eq:NN \__hook_tl_set:Nn \tl_set:Nn +\cs_generate_variant:Nn \__hook_tl_set:Nn { cn, cx } +\cs_new_eq:NN \__hook_tl_gset:Nn \tl_gset:Nn +\cs_generate_variant:Nn \__hook_tl_gset:Nn { cn, co, cx } +\cs_new_eq:NN \__hook_tl_gput_right:Nn \tl_gput_right:Nn +\cs_generate_variant:Nn \__hook_tl_gput_right:Nn { No, cn } +\cs_new_eq:NN \__hook_tl_gput_left:Nn \tl_gput_left:Nn +\cs_generate_variant:Nn \__hook_tl_gput_left:Nn { No } +\cs_new_protected:Npn \__hook_tl_gclear:N #1 + { \__hook_tl_gset_eq:NN #1 \c_empty_tl } +\cs_generate_variant:Nn \__hook_tl_gclear:N { c } +\cs_new_eq:NN \__hook_tl_gset_eq:NN \tl_gset_eq:NN \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 @@ -1686,6 +1700,7 @@ \__hook_if_exist:nF {#1} { \prop_new:c { g__hook_#1_code_prop } + \tl_new:c { __hook_toplevel~#1 } \tl_new:c { __hook_next~#1 } } } @@ -1700,59 +1715,58 @@ { \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 } + \__hook_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 } - } + { \__hook_currname_or_default: } + { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n } } -\cs_new:Npn \__hook_parse_dot_label:nn #1 #2 +\cs_new:Npn \__hook_parse_dot_label:n #1 { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nnn { hooks } { empty-label } {#2} - #2 + \msg_expandable_error:nn { hooks } { empty-label } + \__hook_currname_or_default: } { \str_if_eq:nnTF {#1} { . } - { \__hook_currname_or_default:n {#2} } - { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark } + { \__hook_currname_or_default: } + { \__hook_parse_dot_label:w #1 ./ \s__hook_mark } } } -\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark +\cs_new:Npn \__hook_parse_dot_label:w #1 ./ #2 \s__hook_mark { - \tl_if_empty:nTF {#2} - { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark } + \tl_if_empty:nTF {#1} + { \__hook_parse_dot_label_aux:w #2 \s__hook_mark } { - \tl_if_empty:nTF {#3} - { \__hook_make_name:n {#2} } - { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark } + \tl_if_empty:nTF {#2} + { \__hook_make_name:n {#1} } + { \__hook_parse_dot_label_cleanup:w #1 ./ #2 \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 +\cs_new:Npn \__hook_parse_dot_label_aux:w #1 ./ \s__hook_mark + { \__hook_currname_or_default: / \__hook_make_name:n {#1} } +\cs_new:Npn \__hook_currname_or_default: { \tl_if_empty:NTF \g__hook_hook_curr_name_tl { \tl_if_empty:NTF \@currname - { \__hook_make_name:n {#1} } + { + \msg_expandable_error:nnn { hooks } { should-not-happen } + { Empty~default~label. } + \__hook_make_name:n { label-missing } + } { \@currname } } { \g__hook_hook_curr_name_tl } @@ -1822,12 +1836,23 @@ \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 + \str_if_eq:nnTF {#2} { top-level } { - \prop_gput:cno { g__hook_#1_code_prop } {#2} - { \l__hook_return_tl #3 } + \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: } + { + \__hook_declare:n {#1} + \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3} + } + { \msg_error:nnn { hooks } { misused-top-level } {#1} } + } + { + \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} } } - { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} } } \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3 { @@ -1918,12 +1943,20 @@ \__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} + \prop_gclear:c { g__hook_#1_code_prop } + \__hook_tl_gclear:c { __hook_toplevel~#1 } + \__hook_tl_gclear:c { __hook_next~#1 } + } + { + \str_if_eq:nnTF {#2} { top-level } + { \__hook_tl_gclear:c { __hook_toplevel~#1 } } + { + \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} } @@ -1962,7 +1995,6 @@ { \__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} @@ -1970,29 +2002,28 @@ } { \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_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_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_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 } } + { \__hook_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 } } + { \__hook_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 } } @@ -2039,30 +2070,32 @@ } \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_tl_gset:co { __hook~#1 } + { + \cs:w __hook_toplevel~#1 \exp_after:wN \cs_end: + \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_tl_gput:Nn \__hook_tl_gput_left:Nn \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_tl_gput:Nn \__hook_tl_gput_right:Nn \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_initialize_single:ccn + { __hook~#1 } { g__hook_#1_labels_clist } {#1} \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn \g__hook_used_prop {#1}{} } } } - \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 } @@ -2071,16 +2104,16 @@ \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 +\cs_new_protected:Npn \__hook_initialize_single:NNn #1#2#3 { \seq_clear:N \l__hook_labels_seq \int_zero:N \l__hook_labels_int - \tl_set:Nn \l__hook_cur_hook_tl {#4} + \tl_set:Nn \l__hook_cur_hook_tl {#3} \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} + \__hook_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 @@ -2091,7 +2124,7 @@ { \prop_map_break: } { \__hook_apply_label_pair:nnn {##1} {####1} } { \__hook_apply_label_pair:nnn {####1} {##1} } - {#4} + {#3} } } \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop } @@ -2106,14 +2139,14 @@ } } \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } } - \tl_gclear:N #1 - \clist_gclear:N #3 + \__hook_tl_gclear:N #1 + \clist_gclear:N #2 \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 + \exp_args:NNV \__hook_tl_gput:Nn #1 \l__hook_return_tl + \__hook_clist_gput:NV #2 \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 } } { @@ -2138,11 +2171,12 @@ \__hook_debug_label_data:N \l__hook_work_prop \iow_term:x{====================} } - \tl_gput_right:Nn #1 {#2} + \exp_args:NNo \__hook_tl_gput:Nn #1 { \cs:w __hook_toplevel~#3 \cs_end: } + \__hook_tl_gput_right:No #1 { \cs:w __hook_next~#3 \cs_end: } } -\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_generate_variant:Nn \__hook_initialize_single:NNn { cc } +\cs_new:Npn \__hook_tl_gput:Nn { \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} @@ -2261,7 +2295,8 @@ \__hook_log_cmd:x { ^^J ->~The~hook~'#1': } \hook_if_exist:nF {#1} { \__hook_log_line:x { is~not~declared! } } - \__hook_if_exist:nTF {#1} + \hook_if_empty:nTF {#1} + { #2 { The~hook~is~empty } } { \__hook_log_line:x { Code~chunks: } \prop_if_empty:cTF { g__hook_#1_code_prop } @@ -2270,7 +2305,19 @@ \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:x + { + Document-level~(top-level)~code + \hook_if_exist:nT {#1} + { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } : + } + \__hook_log_line_indent:x + { + \tl_if_empty:cTF { __hook_toplevel~#1 } + { --- } + { -> ~ \exp_args:Nv \tl_to_str:n { __hook_toplevel~#1 } } + } + \__hook_log_line:x { Extra~code~for~next~invocation: } \__hook_log_line_indent:x { \tl_if_empty:cTF { __hook_next~#1 } @@ -2321,7 +2368,6 @@ } } } - { #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 } } @@ -2342,7 +2388,7 @@ } \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} {#3} { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } } } \cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3 @@ -2350,7 +2396,9 @@ \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} + \exp_after:wN \use_none:nn \fi: + \use:n } \cs_new_protected:Npn \__hook_debug_print_rules:n #1 { @@ -2372,12 +2420,10 @@ { \__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 { @@ -2389,8 +2435,8 @@ \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 + { \__hook_tl_gset:Nn #1 { \__hook_clear_next:n {#2} } } + \__hook_tl_gput_right:Nn #1 } \cs_new_protected:Npn \__hook_clear_next:n #1 { \cs_gset_eq:cN { __hook_next~#1 } \c_empty_tl } @@ -2460,7 +2506,11 @@ { \bool_lazy_and:nnTF { \prop_if_empty_p:c { g__hook_#1_code_prop } } - { \tl_if_empty_p:c { __hook_next~#1 } } + { + \bool_lazy_and_p:nn + { \tl_if_empty_p:c { __hook_toplevel~#1 } } + { \tl_if_empty_p:c { __hook_next~#1 } } + } { \prg_return_true: } { \prg_return_false: } } @@ -2502,7 +2552,15 @@ name.\\ Please~ use~ a~ different~ name~ for~ your~ hook.} \msg_new:nnn { hooks } { empty-label } - { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. } + { + Empty~code~label~\msg_line_context:.~ + Using~`\__hook_currname_or_default:'~instead. + } +\msg_new:nnn { hooks } { no-default-label } + { + Missing~(empty)~default~label~\msg_line_context:. \\ + This~command~was~ignored. + } \msg_new:nnnn { hooks } { unknown-rule } { Unknown~ relationship~ `#3'~ between~ labels~ `#2'~ and~ `#4'~ @@ -2518,6 +2576,39 @@ `voids'~ or~ `unrelated'. } +\msg_new:nnnn { hooks } { misused-top-level } + { + Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\ + 'top-level'~is~reserved~for~the~user's~document. + } + { + The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~ + be~used~(sparingly)~in~the~main~document.~Use~the~default~label~ + '\__hook_currname_or_default:'~for~this~\@cls@pkg,~or~another~ + suitable~label. + } +\msg_new:nnn { hooks } { set-top-level } + { + You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\ + \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\ + \msg_line_context:. + } +\msg_new:nnn { hooks } { ddhl-deprecated } + { + \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\ + Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\ + The~deprecated~name~will~be~removed~in~the~next~release. + } +\msg_new:nnn { hooks } { extra-pop-label } + { + Extra~\iow_char:N \\PopDefaultHookLabel. \\ + This~command~will~be~ignored. + } +\msg_new:nnn { hooks } { missing-pop-label } + { + Missing~\iow_char:N \\PopDefaultHookLabel. \\ + The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong. + } \msg_new:nnn { hooks } { should-not-happen } { ERROR!~This~should~not~happen.~#1 \\ @@ -2532,26 +2623,75 @@ { \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 { } +\tl_gset:Nn \g__hook_hook_curr_name_tl { top-level } \cs_new_protected:Npn \__hook_curr_name_push:n #1 + { \exp_args:Nx \__hook_curr_name_push_aux:n { \__hook_make_name:n {#1} } } +\cs_new_protected:Npn \__hook_curr_name_push_aux:n #1 { - \seq_gpush:Nn \g__hook_name_stack_seq {#1} - \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} + \tl_if_blank:nTF {#1} + { \msg_error:nn { hooks } { no-default-label } } + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { PushDefaultHookLabel } {#1} + } + { + \seq_gpush:NV \g__hook_name_stack_seq \g__hook_hook_curr_name_tl + \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 + \seq_gpop:NNTF \g__hook_name_stack_seq \l__hook_return_tl { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl } + { \msg_error:nn { hooks } { extra-pop-label } } + } +\tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage + { \__hook_end_document_label_check: } +\cs_new_protected:Npn \__hook_end_document_label_check: + { + \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl { - \msg_error:nnn { hooks } { should-not-happen } - { Tried~to~pop~from~an~empty~default~label~stack. } + \msg_error:nnx { hooks } { missing-pop-label } + { \g__hook_hook_curr_name_tl } + \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl + \__hook_end_document_label_check: + } + } +\NewDocumentCommand \SetDefaultHookLabel { m } + { + \seq_if_empty:NTF \g__hook_name_stack_seq + { + \msg_error:nnnnn { hooks } { set-top-level } + { for } { SetDefaultHookLabel } {#1} + } + { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } } + } +\cs_new_protected:Npn \__hook_set_default_label:n #1 + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { SetDefaultHookLabel } {#1} } + { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } } \NewDocumentCommand \DeclareDefaultHookLabel { m } { - \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl - \__hook_curr_name_push:n {#1} + \msg_error:nn { hooks } { ddhl-deprecated } + \SetDefaultHookLabel {#1} + } +\NewDocumentCommand \PushDefaultHookLabel { m } + { \__hook_curr_name_push:n {#1} } +\NewDocumentCommand \PopDefaultHookLabel { } + { \__hook_curr_name_pop: } +\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3 + { + \__hook_curr_name_push:n {#3} + \str_gset:Nx \g_file_curr_name_str {#3} + #1 #2 {#3} } \cs_new:Npn \UseHook { \hook_use:n } \cs_new:Npn \UseOneTimeHook { \hook_use_once:n } @@ -2571,8 +2711,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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 @@ -4048,7 +4186,7 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\fontfamily[1]{\edef\f@family{#1}} \DeclareRobustCommand\usefont[4]{\fontencoding{#1}% \edef\f@family{#2}% - \edef\f@series{#3}% + \set@target@series{#3}% \edef\f@shape{#4}\selectfont \ignorespaces} \DeclareRobustCommand\linespread[1] @@ -4757,7 +4895,6 @@ Type H <return> for immediate help.}% \fi } \def\maybe@load@fontshape{\begingroup\try@load@fontshape\endgroup} -\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc} \def\set@target@series#1{% \edef\f@series{#1}% \series@maybe@drop@one@m\f@series\f@series @@ -7153,8 +7290,6 @@ Type H <return> for immediate help.}% \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 @@ -9635,6 +9770,7 @@ Type H <return> for immediate help.}% \let\@unusedoptionlist\@empty \@onlypreamble\@unusedoptionlist \let\CurrentOption\@empty +\let\@currpath\@empty \let\@currname\@empty \global\let\@currext=\@empty \def\@clsextension{cls} @@ -9642,17 +9778,20 @@ Type H <return> for immediate help.}% \@onlypreamble\@clsextension \@onlypreamble\@pkgextension \def\@pushfilename{% - \@expl@@@hook@curr@name@push@@n{}% \@expl@push@filename@@ \xdef\@currnamestack{% {\@currname}% {\@currext}% {\the\catcode`\@}% \@currnamestack}% + \xdef\@kernel@currpathstack{% + {\@currpath}% + \@kernel@currpathstack}% \@expl@push@filename@aux@@} \@onlypreamble\@pushfilename \def\@popfilename{\@expl@@@hook@curr@name@pop@@ \expandafter\@p@pfilename\@currnamestack\@nil + \expandafter\@p@pfilepath\@kernel@currpathstack\@nil \@expl@pop@filename@@} \@onlypreamble\@popfilename \def\@p@pfilename#1#2#3#4\@nil{% @@ -9663,6 +9802,11 @@ Type H <return> for immediate help.}% \@onlypreamble\@p@pfilename \gdef\@currnamestack{} \@onlypreamble\@currnamestack +\gdef\@kernel@currpathstack{} +\def\@p@pfilepath#1{% + \gdef\@currpath{#1}\@p@pfilepath@aux\@empty} +\def\@p@pfilepath@aux#1\@nil{% + \xdef\@kernel@currpathstack{#1}} \def\@ptionlist#1{% \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}} \@onlypreamble\@ptionlist @@ -9729,11 +9873,12 @@ Type H <return> for immediate help.}% \@onlypreamble\@if@pti@ns \def\ProvidesPackage#1{% \xdef\@gtempa{#1}% - \ifx\@gtempa\@currname\else + \@expandtwoargs\@expl@str@if@eq@@nnTF + {\@gtempa}{\@currpath\@currname}{}{% \@latex@warning@no@line{You have requested - \@cls@pkg\space`\@currname',\MessageBreak + \@cls@pkg\space`\@currpath\@currname',\MessageBreak but the \@cls@pkg\space provides `#1'}% - \fi + }% \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] \@onlypreamble\ProvidesPackage \def\@pr@videpackage[#1]{% @@ -9768,10 +9913,14 @@ Type H <return> for immediate help.}% \@expl@@@filehook@set@curr@file@@nNN {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b + \@expl@@@filehook@clear@replacement@flag@@ \expandafter\xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% - \zap@space#2 \@empty}} + \zap@space#2 \@empty}% + \expandafter\let + \csname opt@#3.#1\expandafter\endcsname + \csname opt@\reserved@a\endcsname} \@onlypreamble\@pass@ptions \def\PassOptionsToPackage{\@pass@ptions\@pkgextension} \def\PassOptionsToClass{\@pass@ptions\@clsextension} @@ -9965,8 +10114,14 @@ Type H <return> for immediate help.}% \reserved@a} \@onlypreamble\@fileswith@pti@ns \def\@onefilewithoptions#1[#2][#3]#4{% + \@expl@@@filehook@set@curr@file@@nNN{#1.#4}\reserved@a\reserved@b + \edef\reserved@c{\def\noexpand\reserved@c####1% + \detokenize\expandafter{\expanded{.#4}}% + \noexpand\@nil{\def\noexpand\reserved@a{####1}}}\reserved@c + \expandafter\reserved@c\reserved@a\@nil \@pushfilename - \xdef\@currname{#1}% + \xdef\@currname{\string@makeletter\reserved@a}% + \xdef\@currpath{\ifx\reserved@b\@empty\else\reserved@b/\fi}% \global\let\@currext#4% \@ifl@aded\@currext\@currname {\@if@ptions\@currext{\@currname}{#2}{}% @@ -9987,14 +10142,14 @@ Type H <return> for immediate help.}% \@firstofone}% {\makeatletter \@reset@ptions - \IfFileExists{\@currname.\@currext}{}% + \IfFileExists{\@currpath\@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}% + \set@curr@file{\@currpath\@currname.\@currext}% \@filehook@set@CurrentFile \expandafter\@swaptwoargs\expandafter {\expandafter{\@currpkg@reqd}}% @@ -10003,6 +10158,7 @@ Type H <return> for immediate help.}% \ifx\CurrentFile\CurrentFileUsed \else \filename@parse\@curr@file + \edef\@currpath{\string@makeletter\filename@area}% \edef\@currname{\string@makeletter\filename@base}% \edef\@currext{\string@makeletter\filename@ext}% \fi @@ -10027,14 +10183,18 @@ Type H <return> for immediate help.}% \@onlypreamble\@onefilewithoptions \let\@unprocessedoptions\@undefined \def\@missing@onefilewithoptions#1{% - \@missingfileerror\@currname\@currext - \xdef\@currname{\@missingfile@area\@missingfile@base}% + \@missingfileerror{\@currpath\@currname}\@currext + \global\let\@currpath\@missingfile@area + \global\let\@currname\@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}% + \expandafter\let + \csname opt@\@currpkg@reqd\expandafter\endcsname + \csname opt@\@currname.\@currext\endcsname \global\expandafter \let\csname ver@\@currname.\@currext\endcsname\@empty \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty @@ -10047,9 +10207,9 @@ Type H <return> for immediate help.}% \UseHook{class/before/\@currname}% \fi \fi - \InputIfFileExists{\@currpkg@reqd}{}% + \InputIfFileExists{\@currpath\@currpkg@reqd}{}% {\@latex@error - {The \@cls@pkg\space\@currpkg@reqd\space failed to load.}\@ehd}% + {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 @@ -10427,10 +10587,10 @@ Type H <return> for immediate help.}% } \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 + {The \@cls@pkg\space'\@currname' has no rollback data + before #1 which\MessageBreak is after your requested rollback date --- so - something is wrong here.\MessageBreak + something may be wrong here.\MessageBreak Continue and we use the earliest known release.}} \def\DeclareCurrentRelease#1#2{% \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request @@ -10474,8 +10634,8 @@ Type H <return> for immediate help.}% %% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, %% Phelype Oleinik & LaTeX Team %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0c} -\providecommand\ltfilehookdate{2020/10/18} +\providecommand\ltfilehookversion{v1.0d} +\providecommand\ltfilehookdate{2020/11/24} \ExplSyntaxOn \tl_new:N \CurrentFile \tl_new:N \CurrentFilePath @@ -10545,34 +10705,40 @@ Type H <return> for immediate help.}% {% \@expl@@@filehook@file@push@@ \@filehook@set@CurrentFile - \edef\reserved@a{\@filef@und + \edef\reserved@a{% \@expl@@@filehook@file@pop@assign@@nnnn {\CurrentFilePathUsed}% {\CurrentFileUsed}% {\CurrentFilePath}% - {\CurrentFile}}% + {\CurrentFile}% + \noexpand\@input@file@exists@with@hooks{\@filef@und}}% \expandafter\@swaptwoargs\expandafter {\reserved@a}% - {% - #2% - \@addtofilelist{#1}% - \UseHook{file/before}% - \UseHook{file/before/\CurrentFile}% - \@@input - }% - \UseHook{file/after/\CurrentFile}% - \UseHook{file/after}% + {#2}% \@expl@@@filehook@file@pop@@ }% } +\def\@input@file@exists@with@hooks#1{% + \edef\reserved@a{\unqu@tefilef@und#1\@nil}% + \@addtofilelist{\string@makeletter\reserved@a}% + \UseHook{file/before}% + \UseHook{file/before/\CurrentFile}% + \@@input #1% <- trailing space comes from \@filef@und + \UseHook{file/after/\CurrentFile}% + \UseHook{file/after}} +\def\unqu@tefilef@und"#1" \@nil{#1} \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} } + \cs_gset:cpx + { + @file-subst@ + \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1} + } + { \__filehook_subst_file_normalize:Nn \__filehook_file_name_compose:nnn {#2} } \group_end: } \cs_new_protected:Npn \__filehook_subst_remove:n #1 @@ -10580,14 +10746,18 @@ Type H <return> for immediate help.}% \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} } + \cs_undefine:c + { + @file-subst@ + \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1} + } \group_end: } -\cs_new:Npn \__filehook_subst_file_normalize:n #1 +\cs_new:Npn \__filehook_subst_file_normalize:Nn #1 #2 { \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:w \__filehook_file_parse_full_name:nN {#2} #1 \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: } @@ -10613,6 +10783,7 @@ Type H <return> for immediate help.}% \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}% {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi \global\let\@curr@file@reqd\@curr@file}% + \@expl@@@filehook@clear@replacement@flag@@ \endgroup} \def\@kernel@make@file@csname#1#2#3{% \xdef#1{\expandafter\@set@curr@file@aux @@ -10651,7 +10822,9 @@ Type H <return> for immediate help.}% { \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} } + { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} } +\cs_new_protected:Npn \__filehook_clear_replacement_flag: + { \flag_clear:n { __filehook_file_replaced } } \cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3 { \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 } @@ -10715,6 +10888,8 @@ Type H <return> for immediate help.}% \__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@clear@replacement@flag@@ + \__filehook_clear_replacement_flag: \cs_new_eq:NN \@expl@@@filehook@drop@extension@@N \__filehook_drop_extension:N \cs_new_eq:NN \@expl@@@filehook@file@push@@ @@ -10730,8 +10905,8 @@ Type H <return> for immediate help.}% %% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team %% %%% From File: ltshipout.dtx -\providecommand\ltshipoutversion{v1.0c} -\providecommand\ltshipoutdate{2020/09/27} +\providecommand\ltshipoutversion{v1.0d} +\providecommand\ltshipoutdate{2020/11/24} \ExplSyntaxOn \bool_new:N \g__shipout_debug_bool \cs_new_eq:NN \__shipout_debug:n \use_none:n @@ -11050,7 +11225,7 @@ Type H <return> for immediate help.}% {\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_set_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 diff --git a/Master/texmf-dist/tex/latex/base/latexrelease.sty b/Master/texmf-dist/tex/latex/base/latexrelease.sty index 9f825c010bf..5e42b975a59 100644 --- a/Master/texmf-dist/tex/latex/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex/base/latexrelease.sty @@ -8,6 +8,8 @@ %% ltvers.dtx (with options: `latexrelease') %% latexrelease.dtx (with options: `latexrelease') %% ltdirchk.dtx (with options: `latexrelease') +%% ltplain.dtx (with options: `latexrelease') +%% ltluatex.dtx (with options: `latexrelease') %% ltexpl.dtx (with options: `latexrelease') %% ltdefns.dtx (with options: `latexrelease') %% lthooks.dtx (with options: `latexrelease') @@ -15,42 +17,39 @@ %% ltcntrl.dtx (with options: `latexrelease') %% lterror.dtx (with options: `latexrelease') %% ltpar.dtx (with options: `latexrelease') +%% ltspace.dtx (with options: `latexrelease') +%% ltlogos.dtx (with options: `latexrelease') +%% ltfiles.dtx (with options: `latexrelease') +%% ltoutenc.dtx (with options: `latexrelease') +%% ltcounts.dtx (with options: `latexrelease') +%% ltlength.dtx (with options: `latexrelease') +%% ltfssbas.dtx (with options: `latexrelease') +%% ltfssaxes.dtx (with options: `latexrelease') +%% ltfsstrc.dtx (with options: `latexrelease') +%% ltfssdcl.dtx (with options: `latexrelease') +%% ltfssini.dtx (with options: `latexrelease') +%% fontdef.dtx (with options: `latexrelease') +%% ltfntcmd.dtx (with options: `latexrelease') +%% lttextcomp.dtx (with options: `latexrelease') +%% ltpageno.dtx (with options: `latexrelease') +%% ltxref.dtx (with options: `latexrelease') +%% ltmiscen.dtx (with options: `latexrelease') +%% ltmath.dtx (with options: `latexrelease') %% ltlists.dtx (with options: `latexrelease') %% ltboxes.dtx (with options: `latexrelease') %% lttab.dtx (with options: `latexrelease') -%% ltmath.dtx (with options: `latexrelease') %% ltpictur.dtx (with options: `latexrelease') %% ltthm.dtx (with options: `latexrelease') %% ltsect.dtx (with options: `latexrelease') -%% ltfiles.dtx (with options: `latexrelease') -%% ltoutenc.dtx (with options: `latexrelease') -%% ltcounts.dtx (with options: `latexrelease') -%% ltlength.dtx (with options: `latexrelease') %% ltfloat.dtx (with options: `latexrelease') %% ltidxglo.dtx (with options: `latexrelease') %% ltbibl.dtx (with options: `latexrelease') %% ltpage.dtx (with options: `latexrelease') +%% ltclass.dtx (with options: `latexrelease,tracerollback') %% ltfilehook.dtx (with options: `latexrelease') %% ltshipout.dtx (with options: `latexrelease') %% ltoutput.dtx (with options: `latexrelease') -%% ltclass.dtx (with options: `latexrelease,tracerollback') -%% ltspace.dtx (with options: `latexrelease') -%% ltlogos.dtx (with options: `latexrelease') -%% ltplain.dtx (with options: `latexrelease') -%% ltfssdcl.dtx (with options: `latexrelease') -%% ltfssini.dtx (with options: `latexrelease') -%% fontdef.dtx (with options: `latexrelease') -%% ltfntcmd.dtx (with options: `latexrelease') -%% lttextcomp.dtx (with options: `latexrelease') -%% ltfssbas.dtx (with options: `latexrelease') -%% ltfssaxes.dtx (with options: `latexrelease') -%% ltfsstrc.dtx (with options: `latexrelease') %% ltfsscmp.dtx (with options: `latexrelease') -%% ltpageno.dtx (with options: `latexrelease') -%% ltxref.dtx (with options: `latexrelease') -%% ltmiscen.dtx (with options: `latexrelease') -%% ltluatex.dtx (with options: `latexrelease') -%% ltexpl.dtx (with options: `latexrelease') %% ltfinal.dtx (with options: `latexrelease') %% %% This is a generated file. @@ -239,10 +238,10 @@ } \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 + {The \@cls@pkg\space'\@currname' has no rollback data + before #1 which\MessageBreak is after your requested rollback date --- so - something is wrong here.\MessageBreak + something may be wrong here.\MessageBreak Continue and we use the earliest known release.}} \def\DeclareCurrentRelease#1#2{% \ifnum\pkgcls@targetdate>\z@ % some sort of rollback request @@ -446,8 +445,558 @@ of this package available from CTAN} \fi \edef\filename@base{#1}} \EndIncludeInRelease +%%% From File: ltplain.dtx +\IncludeInRelease{2015/01/01}% + {\newcount}{Extended Allocation}% +\def\newcount {\e@alloc\count \countdef {\count10}\insc@unt\float@count} +\def\newdimen {\e@alloc\dimen \dimendef {\count11}\insc@unt\float@count} +\def\newskip {\e@alloc\skip \skipdef {\count12}\insc@unt\float@count} +\def\newmuskip + {\e@alloc\muskip\muskipdef{\count13}\m@ne\e@alloc@top} +\def\newbox {\e@alloc\box + {\ifnum\allocationnumber<\@cclvi + \expandafter\chardef + \else + \expandafter\e@alloc@chardef + \fi} + {\count14}\insc@unt\float@count} +\def\newtoks {\e@alloc\toks \toksdef{\count15}\m@ne\e@alloc@top} +\def\newread {\e@alloc\read \chardef{\count16}\m@ne\sixt@@n} +\ifx\directlua\@undefined + \def\newwrite {\e@alloc\write \chardef{\count17}\m@ne\sixt@@n} +\else + \def\newwrite {\e@alloc\write + {\ifnum\allocationnumber=18 + \advance\count17\@ne + \allocationnumber\count17 % + \fi + \global\chardef}% + {\count17}% + \m@ne + {128}} +\fi +\def\new@mathgroup + {\e@alloc\mathgroup\chardef{\count18}\m@ne\e@mathgroup@top} +\let\newfam\new@mathgroup +\ifx\directlua\@undefined + \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne\@cclvi} +\else + \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne{16384}} +\fi +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\newcount}{Extended Allocation}% +\def\newcount{\alloc@0\count\countdef\insc@unt} +\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\def\newskip{\alloc@2\skip\skipdef\insc@unt} +\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\def\newbox{\alloc@4\box\chardef\insc@unt} +\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\def\newread{\alloc@6\read\chardef\sixt@@n} +\def\newwrite{\alloc@7\write\chardef\sixt@@n} +\def\new@mathgroup{\alloc@8\fam\chardef\sixt@@n} +\def\newlanguage{\alloc@9\language\chardef\@cclvi} +\let\newfam\new@mathgroup +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\e@alloc@chardef}{Extended Allocation}% +\ifx\directlua\@undefined + \ifx\widowpenalties\@undefined + \mathchardef\e@alloc@top=255 + \let\e@alloc@chardef\chardef + \else + \mathchardef\e@alloc@top=32767 + \let\e@alloc@chardef\mathchardef + \fi +\else + \chardef\e@alloc@top=65535 + \let\e@alloc@chardef\chardef +\fi +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\e@alloc@chardef}{Extended Allocation}% +\let\e@alloc@top\@undefined +\let\e@alloc@chardef\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\e@mathgroup@top}{Extended Allocation}% +\ifx\Umathcode\@undefined + \chardef\e@mathgroup@top=16 +\else + \chardef\e@mathgroup@top=256 +\fi +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\e@mathgroup@top}{Extended Allocation}% +\let\e@mathgroup@top\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\e@alloc}{Extended Allocation}% +\def\e@alloc#1#2#3#4#5#6{% + \global\advance#3\@ne + \e@ch@ck{#3}{#4}{#5}#1% + \allocationnumber#3\relax + \global#2#6\allocationnumber + \wlog{\string#6=\string#1\the\allocationnumber}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\e@alloc}{Extended Allocation}% +\let\e@alloc\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/10/01} + {\e@ch@ck}{Extended Allocation (checking)}% +\gdef\e@ch@ck#1#2#3#4{% + \ifnum#1<#2\else + \ifnum#1=#2\relax + \global#1\@cclvi + \ifx\count#4\global\advance#1 10 \fi + \fi + \ifnum#1<#3\relax + \else + \errmessage{No room for a new \string#4}% + \fi + \fi}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\e@ch@ck}{Extended Allocation (checking)}% +\gdef\e@ch@ck#1#2#3#4{% + \ifnum#1<#2\else + \ifnum#1=#2\relax + #1\@cclvi + \ifx\count#4\advance#1 10 \fi + \fi + \ifnum#1<#3\relax + \else + \errmessage{No room for a new #4}% + \fi + \fi}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\e@ch@ck}{Extended Allocation (checking)}% +\let\e@ch@ck\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\extrafloats}{Extra floats}% +\let\float@count\e@alloc@top +\ifx\numexpr\@undefined +\def\extrafloats#1{% +\count@#1\relax +\ifnum\count@>\z@ +\newinsert\reserved@a +\global\expandafter\chardef + \csname bx@\the\allocationnumber\endcsname\allocationnumber +\@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}% +\advance\count@\m@ne +\expandafter\extrafloats +\expandafter\count@ +\fi +}% +\else +\def\extrafloats#1{% +\ifnum#1>\z@ +\count@\numexpr\float@count-1\relax + \ch@ck0\count@\count + \ch@ck1\count@\dimen + \ch@ck2\count@\skip + \ch@ck4\count@\box +\global\e@alloc@chardef\float@count\count@ +\global\expandafter\e@alloc@chardef + \csname bx@\the\float@count\endcsname\float@count +\@cons\@freelist{\csname bx@\the\float@count\endcsname}% +\expandafter +\extrafloats\expandafter{\numexpr#1-1\relax}% +\fi}% +\fi +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\extrafloats}{Extra floats}% +\let\float@count\@undefined +\let\extrafloats\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01} + {\alloc@}{emulate alloc@}% +\def\alloc@#1#2#3#4{\e@alloc#2#3{\count1#1}#4\float@count} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\alloc@}{emulate alloc@}% +\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne + \ch@ck#1#4#2% + \allocationnumber\count1#1% + \global#3#5\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +\EndIncludeInRelease +\IncludeInRelease{2015/10/01} + {\newinsert}{Extended \newinsert}% +\ifx\numexpr\@undefined +\def\newinsert#1{\global\advance\insc@unt \m@ne + \ch@ck0\insc@unt\count + \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip + \ch@ck4\insc@unt\box + \allocationnumber\insc@unt + \global\chardef#1\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +\else +\ifx\directlua\@undefined + \chardef\e@insert@top255 +\else + \chardef\e@insert@top\e@alloc@top +\fi +\def\newinsert#1{% +\@tempswafalse +\global\advance\insc@unt\m@ne +\ifnum\count10<\insc@unt +\ifnum\count11<\insc@unt +\ifnum\count12<\insc@unt +\ifnum\count14<\insc@unt + \@tempswatrue +\fi\fi\fi\fi +\if@tempswa +\allocationnumber\insc@unt +\else +\global\advance\insc@unt\@ne + \extrafloats\@ne + \@next\@currbox\@freelist + {\ifnum\@currbox<\e@insert@top + \allocationnumber\@currbox + \else + \ch@ck0\m@ne\insert + \fi}% + {\ch@ck0\m@ne\insert}% +\fi +\global\chardef#1\allocationnumber +\wlog{\string#1=\string\insert\the\allocationnumber}% +} +\fi +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\newinsert}{Extended \newinsert}% +\let\e@insert@top\@undefined +\def\newinsert#1{\global\advance\insc@unt \m@ne + \ch@ck0\insc@unt\count + \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip + \ch@ck4\insc@unt\box + \allocationnumber\insc@unt + \global\chardef#1\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}% +\ifx\tracingscantokens\@undefined +\gdef\loggingall{% + \tracingstats\tw@ + \tracingpages\@ne + \tracinglostchars\@ne + \tracingparagraphs\@ne + \errorcontextlines\maxdimen + \loggingoutput + \tracingmacros\tw@ + \tracingcommands\tw@ + \tracingrestores\@ne + }% +\else +\gdef\loggingall{% + \tracingstats\tw@ + \tracingpages\@ne + \tracinglostchars\tw@ + \tracingparagraphs\@ne + \tracinggroups\@ne + \tracingifs\@ne + \tracingscantokens\@ne + \tracingnesting\@ne + \errorcontextlines\maxdimen + \loggingoutput + \tracingmacros\tw@ + \tracingcommands\thr@@ + \tracingrestores\@ne + \tracingassigns\@ne +}% +\fi +\gdef\tracingall{\showoverfull\loggingall} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}% +\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@ + \tracingpages\@ne\tracinglostchars\@ne + \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne + \errorcontextlines\maxdimen\loggingoutput} + \gdef\tracingall{\loggingall\showoverfull} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\tracingnone}% + {turn off etex tracing}% +\ifx\tracingscantokens\@undefined +\def\tracingnone{% + \tracingonline\z@ + \tracingcommands\z@ + \showboxdepth\m@ne + \showboxbreadth\m@ne + \tracingoutput\z@ + \errorcontextlines\m@ne + \tracingrestores\z@ + \tracingparagraphs\z@ + \tracingmacros\z@ + \tracinglostchars\@ne + \tracingpages\z@ + \tracingstats\z@ +}% +\else +\def\tracingnone{% + \tracingassigns\z@ + \tracingrestores\z@ + \tracingonline\z@ + \tracingcommands\z@ + \showboxdepth\m@ne + \showboxbreadth\m@ne + \tracingoutput\z@ + \errorcontextlines\m@ne + \tracingnesting\z@ + \tracingscantokens\z@ + \tracingifs\z@ + \tracinggroups\z@ + \tracingparagraphs\z@ + \tracingmacros\z@ + \tracinglostchars\@ne + \tracingpages\z@ + \tracingstats\z@ +}% +\fi +\def\hideoutput{% + \tracingoutput\z@ + \showboxbreadth\m@ne + \showboxdepth\m@ne + \tracingonline\m@ne +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\tracingnone}% + {turn off etex tracing}% +\let\tracingnone\@undefined +\let\hideoutput\@undefined +\EndIncludeInRelease +\ifx\directlua\@undefined\else +\IncludeInRelease{2015/10/01} + {\newluafunction}{LuaTeX}% +\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% +} + \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 +\EndIncludeInRelease +\IncludeInRelease{0000/00/00} + {\newluafunction}{LuaTeX}% +\let\e@alloc@attribute@count\@undefined +\let\newattribute\@undefined +\let\setattribute\@undefined +\let\unsetattribute\@undefined +\let\e@alloc@ccodetable@count\@undefined +\let\newcatcodetable\@undefined +\let\catcodetable@initex\@undefined +\let\catcodetable@string\@undefined +\let\catcodetable@latex\@undefined +\let\catcodetable@atletter\@undefined +\let\e@alloc@luafunction@count\@undefined +\let\newluafunction\@undefined +\let\e@alloc@luafunction@count\@undefined +\let\newwhatsit\@undefined +\let\e@alloc@whatsit@count\@undefined +\let\newluabytecode\@undefined +\let\e@alloc@bytecode@count\@undefined +\let\newluachunkname\@undefined +\let\e@alloc@luachunk@count\@undefined +\directlua{luatexbase.uninstall()} +\EndIncludeInRelease +\IncludeInRelease{2017/01/01}% + {\fontencoding}{TU in everyjob}% +\fontencoding{TU}\let\encodingdefault\f@encoding +\ifx\directlua\@undefined\else + \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 +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\fontencoding}{TU in everyjob}% +\fontencoding{OT1}\let\encodingdefault\f@encoding +\EndIncludeInRelease +\fi %%% From File: ltexpl.dtx \IncludeInRelease{2020/10/01}% + {kernel@enddocument hooks}{Define kernel enddocument Hooks}% +\let\@kernel@after@enddocument\@empty +\let\@kernel@after@enddocument@afterlastpage\@empty +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {kernel@enddocument hooks}{Define kernel enddocument Hooks}% +\let\@kernel@after@enddocument\@undefined +\let\@kernel@after@enddocument@afterlastpage\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@expl@sys@load@backend@@}{Roll forward support}% +\def\@expl@sys@load@backend@@{} +\def\@expl@push@filename@@{} +\def\@expl@push@filename@aux@@{} +\def\@expl@pop@filename@@{} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% {expl3}{Pre-load expl3}% \expandafter\ifx\csname tex\string _let:D\endcsname\relax \expandafter\@firstofone @@ -478,8 +1027,14 @@ of this package available from CTAN} \fi } {% - \@latex@error{LaTeX requires expl3}\@ehd - \@gobble + \@latex@warning@no@line + {You need a format that already contains a recent\MessageBreak + expl3 as part of the kernel, e.g. at least a kernel\MessageBreak + from 2019 to roll forward to that date!\MessageBreak + --- I'm giving up!\MessageBreak\MessageBreak + Note that manually loading the expl3 package\MessageBreak + from your distribution is not enough}% + \@@end % die }% {% \input expl3.ltx @@ -513,9 +1068,17 @@ of this package available from CTAN} }% \input{expl3.ltx} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\NewDocumentCommand}{Emergency loading xparse}% + +\ifdefined\NewDocumentCommand \else + \RequirePackage{xparse} +\fi + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}{\@expl@cs@to@str@@N}% + {expl3 macros added for the 2020-10-01 release}% \ExplSyntaxOn -\IncludeInRelease{2020/10/01}{expl3~2020-10-01}% - {expl3~macros~added~for~the~2020-10-01~release}% \cs_gset_eq:NN \@expl@cs@to@str@@N \cs_to_str:N \cs_gset_eq:NN \@expl@str@if@eq@@nnTF \str_if_eq:nnTF \cs_gset_eq:NN \@expl@cs@prefix@spec@@N \cs_prefix_spec:N @@ -523,17 +1086,17 @@ of this package available from CTAN} \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 \EndIncludeInRelease -\IncludeInRelease{0000/00/00}{expl3~2020-10-01}% - {expl3~macros~added~for~the~2020-10-01~release}% -\cs_undefine:N \@expl@cs@to@str@@N -\cs_undefine:N \@expl@str@if@eq@@nnTF -\cs_undefine:N \@expl@cs@prefix@spec@@N -\cs_undefine:N \@expl@cs@argument@spec@@N -\cs_undefine:N \@expl@cs@replacement@spec@@N -\cs_undefine:N \@expl@str@map@function@@NN +\IncludeInRelease{0000/00/00}{\@expl@cs@to@str@@N}% + {expl3 macros added for the 2020-10-01 release}% +\let \@expl@cs@to@str@@N \@undefined +\let \@expl@str@if@eq@@nnTF \@undefined +\let \@expl@cs@prefix@spec@@N \@undefined +\let \@expl@cs@argument@spec@@N \@undefined +\let \@expl@cs@replacement@spec@@N \@undefined +\let \@expl@str@map@function@@NN \@undefined \EndIncludeInRelease -\ExplSyntaxOff %%% From File: ltdefns.dtx \IncludeInRelease{2020/10/01}% {\typeout}{Allow "par" in \typeout}% @@ -548,6 +1111,12 @@ of this package available from CTAN} \def\typeout#1{\begingroup\set@display@protect \immediate\write\@unused{#1}\endgroup} \EndIncludeInRelease +\IncludeInRelease{2020/10/01}{\@carcube}{Make \@carcube long}% +\long\def\@carcube#1#2#3#4\@nil{#1#2#3} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}% +\def\@carcube#1#2#3#4\@nil{#1#2#3} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}% \def\MakeRobust#1{% \count@=\escapechar @@ -1011,8 +1580,8 @@ of this package available from CTAN} %% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach, %% Phelype Oleinik & LaTeX Team %%% From File: lthooks.dtx -\def\lthooksversion{v1.0e} -\def\lthooksdate{2020/10/23} +\def\lthooksversion{v1.0g} +\def\lthooksdate{2020/12/18} \IncludeInRelease{2020/10/01}% {\NewHook}{The hook management}% \ExplSyntaxOn @@ -1051,6 +1620,18 @@ of this package available from CTAN} \cs_generate_variant:Nn \tl_show:n { x } \cs_generate_variant:Nn \tl_log:n { x } \scan_new:N \s__hook_mark +\cs_new_eq:NN \__hook_tl_set:Nn \tl_set:Nn +\cs_generate_variant:Nn \__hook_tl_set:Nn { cn, cx } +\cs_new_eq:NN \__hook_tl_gset:Nn \tl_gset:Nn +\cs_generate_variant:Nn \__hook_tl_gset:Nn { cn, co, cx } +\cs_new_eq:NN \__hook_tl_gput_right:Nn \tl_gput_right:Nn +\cs_generate_variant:Nn \__hook_tl_gput_right:Nn { No, cn } +\cs_new_eq:NN \__hook_tl_gput_left:Nn \tl_gput_left:Nn +\cs_generate_variant:Nn \__hook_tl_gput_left:Nn { No } +\cs_new_protected:Npn \__hook_tl_gclear:N #1 + { \__hook_tl_gset_eq:NN #1 \c_empty_tl } +\cs_generate_variant:Nn \__hook_tl_gclear:N { c } +\cs_new_eq:NN \__hook_tl_gset_eq:NN \tl_gset_eq:NN \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 @@ -1071,6 +1652,7 @@ of this package available from CTAN} \__hook_if_exist:nF {#1} { \prop_new:c { g__hook_#1_code_prop } + \tl_new:c { __hook_toplevel~#1 } \tl_new:c { __hook_next~#1 } } } @@ -1085,59 +1667,58 @@ of this package available from CTAN} { \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 } + \__hook_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 } - } + { \__hook_currname_or_default: } + { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n } } -\cs_new:Npn \__hook_parse_dot_label:nn #1 #2 +\cs_new:Npn \__hook_parse_dot_label:n #1 { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nnn { hooks } { empty-label } {#2} - #2 + \msg_expandable_error:nn { hooks } { empty-label } + \__hook_currname_or_default: } { \str_if_eq:nnTF {#1} { . } - { \__hook_currname_or_default:n {#2} } - { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark } + { \__hook_currname_or_default: } + { \__hook_parse_dot_label:w #1 ./ \s__hook_mark } } } -\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark +\cs_new:Npn \__hook_parse_dot_label:w #1 ./ #2 \s__hook_mark { - \tl_if_empty:nTF {#2} - { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark } + \tl_if_empty:nTF {#1} + { \__hook_parse_dot_label_aux:w #2 \s__hook_mark } { - \tl_if_empty:nTF {#3} - { \__hook_make_name:n {#2} } - { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark } + \tl_if_empty:nTF {#2} + { \__hook_make_name:n {#1} } + { \__hook_parse_dot_label_cleanup:w #1 ./ #2 \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 +\cs_new:Npn \__hook_parse_dot_label_aux:w #1 ./ \s__hook_mark + { \__hook_currname_or_default: / \__hook_make_name:n {#1} } +\cs_new:Npn \__hook_currname_or_default: { \tl_if_empty:NTF \g__hook_hook_curr_name_tl { \tl_if_empty:NTF \@currname - { \__hook_make_name:n {#1} } + { + \msg_expandable_error:nnn { hooks } { should-not-happen } + { Empty~default~label. } + \__hook_make_name:n { label-missing } + } { \@currname } } { \g__hook_hook_curr_name_tl } @@ -1207,12 +1788,23 @@ of this package available from CTAN} \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 + \str_if_eq:nnTF {#2} { top-level } { - \prop_gput:cno { g__hook_#1_code_prop } {#2} - { \l__hook_return_tl #3 } + \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: } + { + \__hook_declare:n {#1} + \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3} + } + { \msg_error:nnn { hooks } { misused-top-level } {#1} } + } + { + \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} } } - { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} } } \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3 { @@ -1303,12 +1895,20 @@ of this package available from CTAN} \__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} + \prop_gclear:c { g__hook_#1_code_prop } + \__hook_tl_gclear:c { __hook_toplevel~#1 } + \__hook_tl_gclear:c { __hook_next~#1 } + } + { + \str_if_eq:nnTF {#2} { top-level } + { \__hook_tl_gclear:c { __hook_toplevel~#1 } } + { + \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} } @@ -1347,7 +1947,6 @@ of this package available from CTAN} { \__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} @@ -1355,29 +1954,28 @@ of this package available from CTAN} } { \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_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_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_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 } } + { \__hook_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 } } + { \__hook_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 } } @@ -1424,30 +2022,32 @@ of this package available from CTAN} } \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_tl_gset:co { __hook~#1 } + { + \cs:w __hook_toplevel~#1 \exp_after:wN \cs_end: + \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_tl_gput:Nn \__hook_tl_gput_left:Nn \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_tl_gput:Nn \__hook_tl_gput_right:Nn \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_initialize_single:ccn + { __hook~#1 } { g__hook_#1_labels_clist } {#1} \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn \g__hook_used_prop {#1}{} } } } - \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 } @@ -1456,16 +2056,16 @@ of this package available from CTAN} \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 +\cs_new_protected:Npn \__hook_initialize_single:NNn #1#2#3 { \seq_clear:N \l__hook_labels_seq \int_zero:N \l__hook_labels_int - \tl_set:Nn \l__hook_cur_hook_tl {#4} + \tl_set:Nn \l__hook_cur_hook_tl {#3} \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} + \__hook_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 @@ -1476,7 +2076,7 @@ of this package available from CTAN} { \prop_map_break: } { \__hook_apply_label_pair:nnn {##1} {####1} } { \__hook_apply_label_pair:nnn {####1} {##1} } - {#4} + {#3} } } \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop } @@ -1491,14 +2091,14 @@ of this package available from CTAN} } } \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } } - \tl_gclear:N #1 - \clist_gclear:N #3 + \__hook_tl_gclear:N #1 + \clist_gclear:N #2 \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 + \exp_args:NNV \__hook_tl_gput:Nn #1 \l__hook_return_tl + \__hook_clist_gput:NV #2 \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 } } { @@ -1523,11 +2123,12 @@ of this package available from CTAN} \__hook_debug_label_data:N \l__hook_work_prop \iow_term:x{====================} } - \tl_gput_right:Nn #1 {#2} + \exp_args:NNo \__hook_tl_gput:Nn #1 { \cs:w __hook_toplevel~#3 \cs_end: } + \__hook_tl_gput_right:No #1 { \cs:w __hook_next~#3 \cs_end: } } -\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_generate_variant:Nn \__hook_initialize_single:NNn { cc } +\cs_new:Npn \__hook_tl_gput:Nn { \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} @@ -1646,7 +2247,8 @@ of this package available from CTAN} \__hook_log_cmd:x { ^^J ->~The~hook~'#1': } \hook_if_exist:nF {#1} { \__hook_log_line:x { is~not~declared! } } - \__hook_if_exist:nTF {#1} + \hook_if_empty:nTF {#1} + { #2 { The~hook~is~empty } } { \__hook_log_line:x { Code~chunks: } \prop_if_empty:cTF { g__hook_#1_code_prop } @@ -1655,7 +2257,19 @@ of this package available from CTAN} \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:x + { + Document-level~(top-level)~code + \hook_if_exist:nT {#1} + { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } : + } + \__hook_log_line_indent:x + { + \tl_if_empty:cTF { __hook_toplevel~#1 } + { --- } + { -> ~ \exp_args:Nv \tl_to_str:n { __hook_toplevel~#1 } } + } + \__hook_log_line:x { Extra~code~for~next~invocation: } \__hook_log_line_indent:x { \tl_if_empty:cTF { __hook_next~#1 } @@ -1706,7 +2320,6 @@ of this package available from CTAN} } } } - { #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 } } @@ -1727,7 +2340,7 @@ of this package available from CTAN} } \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} {#3} { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } } } \cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3 @@ -1735,7 +2348,9 @@ of this package available from CTAN} \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} + \exp_after:wN \use_none:nn \fi: + \use:n } \cs_new_protected:Npn \__hook_debug_print_rules:n #1 { @@ -1757,12 +2372,10 @@ of this package available from CTAN} { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} } \cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2 { - \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 { @@ -1774,8 +2387,8 @@ of this package available from CTAN} \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 + { \__hook_tl_gset:Nn #1 { \__hook_clear_next:n {#2} } } + \__hook_tl_gput_right:Nn #1 } \cs_new_protected:Npn \__hook_clear_next:n #1 { \cs_gset_eq:cN { __hook_next~#1 } \c_empty_tl } @@ -1845,7 +2458,11 @@ of this package available from CTAN} { \bool_lazy_and:nnTF { \prop_if_empty_p:c { g__hook_#1_code_prop } } - { \tl_if_empty_p:c { __hook_next~#1 } } + { + \bool_lazy_and_p:nn + { \tl_if_empty_p:c { __hook_toplevel~#1 } } + { \tl_if_empty_p:c { __hook_next~#1 } } + } { \prg_return_true: } { \prg_return_false: } } @@ -1887,7 +2504,15 @@ of this package available from CTAN} name.\\ Please~ use~ a~ different~ name~ for~ your~ hook.} \msg_new:nnn { hooks } { empty-label } - { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. } + { + Empty~code~label~\msg_line_context:.~ + Using~`\__hook_currname_or_default:'~instead. + } +\msg_new:nnn { hooks } { no-default-label } + { + Missing~(empty)~default~label~\msg_line_context:. \\ + This~command~was~ignored. + } \msg_new:nnnn { hooks } { unknown-rule } { Unknown~ relationship~ `#3'~ between~ labels~ `#2'~ and~ `#4'~ @@ -1903,6 +2528,39 @@ of this package available from CTAN} `voids'~ or~ `unrelated'. } +\msg_new:nnnn { hooks } { misused-top-level } + { + Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\ + 'top-level'~is~reserved~for~the~user's~document. + } + { + The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~ + be~used~(sparingly)~in~the~main~document.~Use~the~default~label~ + '\__hook_currname_or_default:'~for~this~\@cls@pkg,~or~another~ + suitable~label. + } +\msg_new:nnn { hooks } { set-top-level } + { + You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\ + \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\ + \msg_line_context:. + } +\msg_new:nnn { hooks } { ddhl-deprecated } + { + \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\ + Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\ + The~deprecated~name~will~be~removed~in~the~next~release. + } +\msg_new:nnn { hooks } { extra-pop-label } + { + Extra~\iow_char:N \\PopDefaultHookLabel. \\ + This~command~will~be~ignored. + } +\msg_new:nnn { hooks } { missing-pop-label } + { + Missing~\iow_char:N \\PopDefaultHookLabel. \\ + The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong. + } \msg_new:nnn { hooks } { should-not-happen } { ERROR!~This~should~not~happen.~#1 \\ @@ -1917,26 +2575,86 @@ of this package available from CTAN} { \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 { } +\tl_gset:Nn \g__hook_hook_curr_name_tl { top-level } +\seq_gput_right:Nn \g__hook_name_stack_seq { top-level } +\cs_set_protected:Npn \__hook_tmp:w #1 #2 #3 + { + \quark_if_recursion_tail_stop:n {#1} + \seq_gput_right:Nn \g__hook_name_stack_seq {#1} + \__hook_tmp:w + } +\exp_after:wN \__hook_tmp:w \@currnamestack + \q_recursion_tail \q_recursion_tail + \q_recursion_tail \q_recursion_stop +\tl_gset:Nx \g__hook_hook_curr_name_tl { \@currname } \cs_new_protected:Npn \__hook_curr_name_push:n #1 + { \exp_args:Nx \__hook_curr_name_push_aux:n { \__hook_make_name:n {#1} } } +\cs_new_protected:Npn \__hook_curr_name_push_aux:n #1 { - \seq_gpush:Nn \g__hook_name_stack_seq {#1} - \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} + \tl_if_blank:nTF {#1} + { \msg_error:nn { hooks } { no-default-label } } + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { PushDefaultHookLabel } {#1} + } + { + \seq_gpush:NV \g__hook_name_stack_seq \g__hook_hook_curr_name_tl + \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 + \seq_gpop:NNTF \g__hook_name_stack_seq \l__hook_return_tl { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl } + { \msg_error:nn { hooks } { extra-pop-label } } + } +\tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage + { \__hook_end_document_label_check: } +\cs_new_protected:Npn \__hook_end_document_label_check: + { + \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl { - \msg_error:nnn { hooks } { should-not-happen } - { Tried~to~pop~from~an~empty~default~label~stack. } + \msg_error:nnx { hooks } { missing-pop-label } + { \g__hook_hook_curr_name_tl } + \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl + \__hook_end_document_label_check: + } + } +\NewDocumentCommand \SetDefaultHookLabel { m } + { + \seq_if_empty:NTF \g__hook_name_stack_seq + { + \msg_error:nnnnn { hooks } { set-top-level } + { for } { SetDefaultHookLabel } {#1} } + { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } } + } +\cs_new_protected:Npn \__hook_set_default_label:n #1 + { + \str_if_eq:nnTF {#1} { top-level } + { + \msg_error:nnnnn { hooks } { set-top-level } + { to } { SetDefaultHookLabel } {#1} + } + { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } } \NewDocumentCommand \DeclareDefaultHookLabel { m } { - \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl - \__hook_curr_name_push:n {#1} + \msg_error:nn { hooks } { ddhl-deprecated } + \SetDefaultHookLabel {#1} + } +\NewDocumentCommand \PushDefaultHookLabel { m } + { \__hook_curr_name_push:n {#1} } +\NewDocumentCommand \PopDefaultHookLabel { } + { \__hook_curr_name_pop: } +\cs_gset_protected:Npn \@expl@push@filename@aux@@ #1#2#3 + { + \__hook_curr_name_push:n {#3} + \str_gset:Nx \g_file_curr_name_str {#3} + #1 #2 {#3} } \cs_new:Npn \UseHook { \hook_use:n } \cs_new:Npn \UseOneTimeHook { \hook_use_once:n } @@ -1956,8 +2674,6 @@ of this package available from CTAN} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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 @@ -1995,1052 +2711,340 @@ of this package available from CTAN} %%% From File: ltcntrl.dtx %%% From File: lterror.dtx %%% From File: ltpar.dtx -%%% From File: ltlists.dtx -%%% From File: ltboxes.dtx -\IncludeInRelease{2015/01/01}% - {\makebox}{Make \makebox robust}% -\DeclareRobustCommand\makebox{% - \leavevmode - \@ifnextchar(%) - \@makepicbox - {\@ifnextchar[\@makebox\mbox}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\makebox}{Make \makebox robust}% -\def\makebox{% - \leavevmode - \@ifnextchar(%) - \@makepicbox - {\@ifnextchar[\@makebox\mbox}}% -\expandafter\let\csname makebox \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@imakepicbox}{default units}% -\long\def\@imakepicbox(#1,#2)[#3]#4{% - \@defaultunitsset\@tempdimc{#2}\unitlength - \vbox to\@tempdimc - {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss - \let\mb@t\vss - \@tfor\reserved@a :=#3\do{% - \if s\reserved@a - \let\mb@l\relax\let\mb@r\relax - \else - \expandafter\let\csname mb@\reserved@a\endcsname\relax - \fi}% - \mb@t - \@defaultunitsset\@tempdimc{#1}\unitlength - \hb@xt@\@tempdimc{\mb@l #4\mb@r}% - \mb@b - \kern\z@}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@imakepicbox}{default units}% -\long\def\@imakepicbox(#1,#2)[#3]#4{% - \vbox to#2\unitlength - {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss - \let\mb@t\vss - \@tfor\reserved@a :=#3\do{% - \if s\reserved@a - \let\mb@l\relax\let\mb@r\relax - \else - \expandafter\let\csname mb@\reserved@a\endcsname\relax - \fi}% - \mb@t - \hb@xt@ #1\unitlength{\mb@l #4\mb@r}% - \mb@b - \kern\z@}} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\savebox}{Make \savebox robust}% -\DeclareRobustCommand\savebox[1]{% - \@ifnextchar(%) - {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\savebox}{Make \savebox robust}% -\def\savebox#1{% - \@ifnextchar(%) - {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}% -\expandafter\let\csname savebox \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\framebox}{Make \framebox robust}% -\DeclareRobustCommand\framebox{% - \@ifnextchar(%) - \@framepicbox{\@ifnextchar[\@framebox\fbox}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\framebox}{Make \framebox robust}% -\def\framebox{% - \@ifnextchar(%) - \@framepicbox{\@ifnextchar[\@framebox\fbox}}% -\expandafter\let\csname framebox \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\parbox}{Make \parbox robust}% -\DeclareRobustCommand\parbox{% - \@ifnextchar[%] - \@iparbox - {\@iiiparbox c\relax[s]}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\parbox}{Make \parbox robust}% -\def\parbox{% - \@ifnextchar[%] - \@iparbox - {\@iiiparbox c\relax[s]}}% -\expandafter\let\csname parbox \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2017-04-15}% - {\normallineskiplimit} - {reset \lineskiplimit}% -\def\@arrayparboxrestore{% - \let\if@nobreak\iffalse - \let\if@noskipsec\iffalse - \let\par\@@par - \let\-\@dischyph - \let\'\@acci\let\`\@accii\let\=\@acciii - \parindent\z@ \parskip\z@skip - \everypar{}% - \linewidth\hsize - \@totalleftmargin\z@ - \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip - \parfillskip\@flushglue - \lineskip\normallineskip - \lineskiplimit\normallineskiplimit - \baselineskip\normalbaselineskip - \sloppy} -\EndIncludeInRelease -\IncludeInRelease{0000-00-00}% - {\normallineskiplimit} - {reset \lineskiplimit}% -\def\@arrayparboxrestore{% - \let\if@nobreak\iffalse - \let\if@noskipsec\iffalse - \let\par\@@par - \let\-\@dischyph - \let\'\@acci\let\`\@accii\let\=\@acciii - \parindent\z@ \parskip\z@skip - \everypar{}% - \linewidth\hsize - \@totalleftmargin\z@ - \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip - \parfillskip\@flushglue \lineskip\normallineskip - \baselineskip\normalbaselineskip - \sloppy} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\rule}{Make \rule robust}% -\DeclareRobustCommand\rule{\@ifnextchar[\@rule{\@rule[\z@]}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\rule}{Make \rule robust}% -\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}}% -\expandafter\let\csname rule \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\raisebox}{Make \raisebox robust}% -\DeclareRobustCommand\raisebox[1]{% - \leavevmode - \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\raisebox}{Make \raisebox robust}% -\def\raisebox#1{% - \leavevmode - \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}} -\expandafter\let\csname raisebox \endcsname\@undefined -\EndIncludeInRelease -%%% From File: lttab.dtx -\IncludeInRelease{2020/10/01}% - {\@itabcr}{Tabbing calc syntax}% -\def\@itabcr[#1]{\@vspace@calcify{#1}\@startline\ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@itabcr}{Tabbing calc syntax}% - -\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces} -\EndIncludeInRelease +%%% From File: ltspace.dtx \IncludeInRelease{2019/10/01}% - {\pushtabs}{Make commands robust}% -\DeclareRobustCommand\pushtabs{% - \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup - \@contfield} -\DeclareRobustCommand\poptabs{\@stopfield\@addfield - \ifnum \@tabpush >\z@ - \endgroup - \global\advance\@tabpush \m@ne - \ifnum \@curtab >\@hightab - \global \@curtab \@hightab - \@badtab - \fi - \else - \@badpoptabs - \fi - \@contfield} -\DeclareRobustCommand\kill{\@stopfield\@startline\ignorespaces} + {\pagebreak}{Make commands robust}% +\DeclareRobustCommand\pagebreak{\@testopt{\@no@pgbk-}4} +\DeclareRobustCommand\nopagebreak{\@testopt\@no@pgbk4} +\DeclareRobustCommand\linebreak{\@testopt{\@no@lnbk-}4} +\DeclareRobustCommand\nolinebreak{\@testopt\@no@lnbk4} +\DeclareRobustCommand\samepage{\interlinepenalty\@M + \postdisplaypenalty\@M + \interdisplaylinepenalty\@M + \@beginparpenalty\@M + \@endparpenalty\@M + \@itempenalty\@M + \@secpenalty\@M + \interfootnotelinepenalty\@M} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\pushtabs}{Make commands robust}% - -\kernel@make@fragile\pushtabs -\kernel@make@fragile\poptabs -\kernel@make@fragile\kill + {\pagebreak}{Make commands robust}% -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@yargarraycr}{tabular support calc syntax}% -\def\@yargarraycr#1{\cr\noalign{\@vspace@calcify{#1}}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@yargarraycr}{tabular support calc syntax}% +\kernel@make@fragile\pagebreak +\kernel@make@fragile\nopagebreak +\kernel@make@fragile\linebreak +\kernel@make@fragile\nolinebreak +\kernel@make@fragile\samepage -\def\@yargarraycr#1{\cr\noalign{\vskip #1}} \EndIncludeInRelease -%%% From File: ltmath.dtx -\IncludeInRelease{2019/10/01}% - {\vphantom}{Make commands robust}% -\DeclareRobustCommand\vphantom{\v@true\h@false\ph@nt} -\DeclareRobustCommand\hphantom{\v@false\h@true\ph@nt} -\DeclareRobustCommand\phantom{\v@true\h@true\ph@nt} -\DeclareRobustCommand\mathstrut{\vphantom(} +\IncludeInRelease{2020/02/02}% + {\@normalcr}{Make robust}% +\protected\def\@normalcr{% + \let \reserved@e \relax + \let \reserved@f \relax + \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak + \@xnewline}% + \@xnewline} +\let\\\@normalcr \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\vphantom}{Make commands robust}% + {\@normalcr}{Make robust}% -\kernel@make@fragile\vphantom -\kernel@make@fragile\hphantom -\kernel@make@fragile\phantom -\kernel@make@fragile\mathstrut +\DeclareRobustCommand\\{% + \let \reserved@e \relax + \let \reserved@f \relax + \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak + \@xnewline}% + \@xnewline} +\expandafter\let\expandafter\@normalcr + \csname\expandafter\@gobble\string\\ \endcsname \EndIncludeInRelease -\IncludeInRelease{2018/12/01}% - {\finph@nt}{Start LR-mode}% -\def\finph@nt{% - \setbox\tw@\null - \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi - \ifh@ \wd\tw@\wd\z@\fi - \leavevmode@ifvmode\box\tw@} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\finph@nt}{Start LR-mode}% -\def\finph@nt{% - \setbox\tw@\null - \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi - \ifh@ \wd\tw@\wd\z@\fi \box\tw@} -\EndIncludeInRelease -\IncludeInRelease{2018/12/01}% - {\finsm@sh}{Start LR-mode}% -\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \leavevmode@ifvmode\box\z@} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\finsm@sh}{Start LR-mode}% -\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@} -\EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\cases}{Make commands robust}% -\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th - \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.} -\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)} +\IncludeInRelease{2020/10/01}% + {\@vspace@calcify}{Add calc support}% +\def\@vspace@calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\cases}{Make commands robust}% - -\kernel@make@fragile\cases -\kernel@make@fragile\matrix -\kernel@make@fragile\pmatrix + {\@vspace@calcify}{Add calc support}% +\let\@vspace@calcify\@undefined \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\tmspace}{amsmath spacing commands}% -\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}} + {\@newline}{\newline calc support}% +\def\@newline[#1]{\let \reserved@e \vadjust + \@gnewline {\@vspace@calcify{#1}}} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\tmspace}{amsmath spacing commands}% - -\let\tmspace\@undefined -\DeclareRobustCommand{\,}{% - \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi} -\DeclareRobustCommand\thinspace{\leavevmode@ifvmode\kern .16667em } -\DeclareRobustCommand\negthinspace{\leavevmode@ifvmode\kern-.16667em } -\def\>{\mskip\medmuskip} -\let\:=\> -\def\;{\mskip\thickmuskip} -\def\!{\mskip-\thinmuskip} + {\@newline}{\newline calc support}% +\def\@newline[#1]{\let \reserved@e \vadjust + \@gnewline {\vskip #1}} \EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\(}{Make \( robust}% -\DeclareRobustCommand\({% - \relax\ifmmode\@badmath\else$\fi}% -\DeclareRobustCommand\){% - \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\(}{Make \( robust}% -\def\({% - \relax\ifmmode\@badmath\else$\fi}% -\expandafter\let\csname\string( \endcsname\@undefined -\def\){% - \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}% -\expandafter\let\csname\string) \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\[}{Make \[ robust}% -\DeclareRobustCommand\[{% - \relax\ifmmode - \@badmath - \else - \ifvmode - \nointerlineskip - \makebox[.6\linewidth]{}% - \fi - $$%%$$ BRACE MATCH HACK - \fi -}% -\DeclareRobustCommand\]{% - \relax\ifmmode - \ifinner - \@badmath - \else - $$%%$$ BRACE MATCH HACK +\IncludeInRelease{2018/10/10}% + {\@esphack}{hyphenation and nobreak after space hack}% +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \ifdim\lastskip=\z@ + \nobreak \hskip\z@skip \fi - \else - \@badmath - \fi - \ignorespaces -}% + \ignorespaces + \fi + \else + \ifvmode + \if@nobreak\nobreak\else\if@noskipsec\nobreak\fi\fi + \fi + \fi}% \EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\[}{Make \[ robust}% -\def\[{% - \relax\ifmmode - \@badmath - \else - \ifvmode - \nointerlineskip - \makebox[.6\linewidth]{}% - \fi - $$%%$$ BRACE MATCH HACK - \fi -}% -\expandafter\let\csname\string[ \endcsname\@undefined -\def\]{% - \relax\ifmmode - \ifinner - \@badmath - \else - $$%%$$ BRACE MATCH HACK +\IncludeInRelease{2015/10/01}% + {\@esphack}{hyphenation and nobreak after space hack}% +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \ifdim\lastskip=\z@ + \nobreak \hskip\z@skip \fi - \else - \@badmath - \fi - \ignorespaces -}% -\expandafter\let\csname\string] \endcsname\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@xeqncr}{eqnarray support calc syntax}% -\def\@xeqncr[#1]{% - \ifnum0=`{\fi}% - \@@eqncr - \noalign{\penalty\@eqpen\vskip\jot\@vspace@calcify{#1}}% -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@xeqncr}{eqnarray support calc syntax}% - -\def\@xeqncr[#1]{% - \ifnum0=`{\fi}% - \@@eqncr - \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}% -} -\EndIncludeInRelease -%%% From File: ltpictur.dtx -\IncludeInRelease{2020/10/01}% - {\@defaultunitsset}{default units}% -\def\@defaultunitsset#1#2#3{% - \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@defaultunitsset}{default units}% -\let\@defaultunitsset\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@picture}{default units}% -\def\@picture(#1,#2)(#3,#4){% - \@defaultunitsset\@picht{#2}\unitlength - \@defaultunitsset\@tempdimc{#1}\unitlength - \setbox\@picbox\hb@xt@\@tempdimc\bgroup - \@defaultunitsset\@tempdimc{#3}\unitlength - \hskip -\@tempdimc - \@defaultunitsset\@tempdimc{#4}\unitlength - \lower\@tempdimc\hbox\bgroup - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@picture}{default units}% -\def\@picture(#1,#2)(#3,#4){% - \@picht#2\unitlength - \setbox\@picbox\hb@xt@#1\unitlength\bgroup - \hskip -#3\unitlength - \lower #4\unitlength\hbox\bgroup - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\put}{default units}% -\expandafter\let\csname put \endcsname\@undefind -\long\def\put(#1,#2)#3{% - \@killglue - \@defaultunitsset\@tempdimc{#2}\unitlength - \raise\@tempdimc - \hb@xt@\z@{% - \@defaultunitsset\@tempdimc{#1}\unitlength - \kern\@tempdimc - #3\hss}% - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\put}{default units}% -\expandafter\let\csname put \endcsname\@undefind -\long\def\put(#1,#2)#3{% - \@killglue\raise#2\unitlength - \hb@xt@\z@{\kern#1\unitlength #3\hss}% - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\multiput}{default units}% -\expandafter\let\csname multiput \endcsname\@undefind -\def\multiput(#1,#2)#3{% - \@defaultunitsset\@xdim{#1}\unitlength - \@defaultunitsset\@ydim{#2}\unitlength - \@multiput(} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\multiput}{default units}% -\expandafter\let\csname multiput \endcsname\@undefind -\def\multiput(#1,#2)#3{% - \@xdim #1\unitlength - \@ydim #2\unitlength - \@multiput(} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@multiput}{default units}% -\long\def\@multiput(#1,#2)#3#4{% - \@killglue\@multicnt #3\relax - \@whilenum \@multicnt >\z@\do - {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% - \advance\@multicnt\m@ne - \@defaultunitsset{\advance\@xdim}{#1}\unitlength - \@defaultunitsset{\advance\@ydim}{#2}\unitlength}% - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@multiput}{default units}% -\long\def\@multiput(#1,#2)#3#4{% - \@killglue\@multicnt #3\relax - \@whilenum \@multicnt >\z@\do - {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% - \advance\@multicnt\m@ne - \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}% - \ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@istackcr}{\shortstack calc support}% -\def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@istackcr}{\shortstack calc support}% - -\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} + \ignorespaces + \fi + \fi}% \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\line}{default units}% -\expandafter\let\csname line \endcsname\@undefind -\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax - \@defaultunitsset\@linelen{#3}\unitlength - \ifdim\@linelen<\z@\@badlinearg\else - \ifnum\@xarg =\z@ \@vline - \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi +\IncludeInRelease{2015/01/01}% + {\@esphack}{hyphenation and nobreak after space hack}% +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \nobreak \hskip\z@skip + \ignorespaces \fi - \fi} + \fi}% \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\line}{default units}% -\expandafter\let\csname line \endcsname\@undefind -\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax - \@linelen #3\unitlength - \ifdim\@linelen<\z@\@badlinearg\else - \ifnum\@xarg =\z@ \@vline - \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + {\@esphack}{hyphenation and nobreak after space hack}% +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \ignorespaces \fi - \fi} + \fi}% \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\vector}{default units}% -\expandafter\let\csname vector \endcsname\@undefind -\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax - \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi - \ifnum\@tempcnta<5\relax - \@defaultunitsset\@linelen{#3}\unitlength - \ifdim\@linelen<\z@\@badlinearg\else - \ifnum\@xarg =\z@ \@vvector - \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi +\IncludeInRelease{2015/01/01}% + {\@Esphack}{hyphenation after space hack}% +\def\@Esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \nobreak \hskip\z@skip + \@ignoretrue + \ignorespaces \fi - \fi - \else\@badlinearg\fi} + \fi}% \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\vector}{default units}% -\expandafter\let\csname vector \endcsname\@undefind -\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax - \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi - \ifnum\@tempcnta<5\relax - \@linelen #3\unitlength - \ifdim\@linelen<\z@\@badlinearg\else - \ifnum\@xarg =\z@ \@vvector - \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + {\@Esphack}{hyphenation after space hack}% +\def\@Esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \@ignoretrue + \ignorespaces \fi - \fi - \else\@badlinearg\fi} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\dashbox}{default units}% -\expandafter\let\csname dashbox \endcsname\@undefind -\def\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip -\lineskip \z@skip -\@defaultunitsset\@dashdim{#2}\unitlength -\@dashcnt \@dashdim \advance\@dashcnt 200 -\@defaultunitsset\@dashdim{#1}\unitlength -\divide\@dashcnt \@dashdim -\ifodd\@dashcnt\@dashdim \z@ -\advance\@dashcnt \@ne \divide\@dashcnt \tw@ -\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ -\advance\@dashcnt \m@ne -\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth -\@width \@dashdim}\put(0,0){\copy\@dashbox}% -\put(0,#3){\copy\@dashbox}% -\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% -\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% -\multiply\@dashdim \thr@@ -\fi -\setbox\@dashbox \hbox{% - \@defaultunitsset\@tempdimc{#1}\unitlength - \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc - \hskip\@tempdimc}% -\@tempcnta\z@ -\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt -\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ -\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt -\do{\copy\@dashbox\advance\@tempcnta \@ne }}% -\@defaultunitsset\@dashdim{#3}\unitlength -\@dashcnt \@dashdim \advance\@dashcnt 200 -\@defaultunitsset\@dashdim{#1}\unitlength -\divide\@dashcnt \@dashdim -\ifodd\@dashcnt \@dashdim \z@ -\advance\@dashcnt \@ne \divide\@dashcnt \tw@ -\else -\divide\@dashdim \tw@ \divide\@dashcnt \tw@ -\advance\@dashcnt \m@ne -\setbox\@dashbox\hbox{\hskip -\@halfwidth -\vrule \@width \@wholewidth -\@height \@dashdim}\put(0,0){\copy\@dashbox}% -\put(#2,0){\copy\@dashbox}% -\put(0,#3){\lower\@dashdim\copy\@dashbox}% -\put(#2,#3){\lower\@dashdim\copy\@dashbox}% -\multiply\@dashdim \thr@@ -\fi -\@defaultunitsset\@tempdimb{#1}\unitlength -\setbox\@dashbox\hbox{% - \vrule \@width \@wholewidth \@height\@tempdimb}% -\@tempcnta\z@ -\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt -\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% -\vskip\@dashdim}}\@tempcnta\z@ -\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt -\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% -\vskip\@dashdim}}}\@makepicbox(#2,#3)} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\dashbox}{default units}% -\expandafter\let\csname dashbox \endcsname\@undefind -\def\dashbox#1(#2,#3){% -\leavevmode\hb@xt@\z@{\baselineskip \z@skip -\lineskip \z@skip -\@dashdim #2\unitlength -\@dashcnt \@dashdim \advance\@dashcnt 200 -\@dashdim #1\unitlength\divide\@dashcnt \@dashdim -\ifodd\@dashcnt\@dashdim \z@ -\advance\@dashcnt \@ne \divide\@dashcnt \tw@ -\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ -\advance\@dashcnt \m@ne -\setbox\@dashbox \hbox{% - \vrule \@height \@halfwidth \@depth \@halfwidth - \@width \@dashdim}\put(0,0){\copy\@dashbox}% -\put(0,#3){\copy\@dashbox}% -\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% -\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% -\multiply\@dashdim \thr@@ -\fi -\setbox\@dashbox \hbox{% - \vrule \@height \@halfwidth \@depth \@halfwidth - \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ -\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt -\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ -\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt -\do{\copy\@dashbox\advance\@tempcnta \@ne }}% -\@dashdim #3\unitlength -\@dashcnt \@dashdim \advance\@dashcnt 200 -\@dashdim #1\unitlength\divide\@dashcnt \@dashdim -\ifodd\@dashcnt \@dashdim \z@ -\advance\@dashcnt \@ne \divide\@dashcnt \tw@ -\else -\divide\@dashdim \tw@ \divide\@dashcnt \tw@ -\advance\@dashcnt \m@ne -\setbox\@dashbox\hbox{\hskip -\@halfwidth -\vrule \@width \@wholewidth -\@height \@dashdim}\put(0,0){\copy\@dashbox}% -\put(#2,0){\copy\@dashbox}% -\put(0,#3){\lower\@dashdim\copy\@dashbox}% -\put(#2,#3){\lower\@dashdim\copy\@dashbox}% -\multiply\@dashdim \thr@@ -\fi -\setbox\@dashbox\hbox{\vrule \@width \@wholewidth -\@height #1\unitlength}\@tempcnta\z@ -\put(0,0){% - \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt - \do{\vskip #1\unitlength\copy\@dashbox - \advance\@tempcnta\@ne }% - \vskip\@dashdim}}\@tempcnta\z@ -\put(#2,0){% - \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt - \do{\vskip #1\unitlength\copy\@dashbox - \advance\@tempcnta \@ne }% - \vskip\@dashdim}}}\@makepicbox(#2,#3)} -\EndIncludeInRelease -\IncludeInRelease{2016/03/31}% - {\@ovhlinetrue}% - {Avoid almost zero length leaders}% -\newif\if@ovvline \@ovvlinetrue -\newif\if@ovhline \@ovhlinetrue -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@ovhlinetrue}% - {Avoid almost zero length leaders}% -\let\if@ovvline\@undefined -\let\if@ovhline\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@oval}{default units}% -\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen - \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue - \@ovvlinefalse \@ovhlinefalse - \@tfor\reserved@a :=#3\do{% - \csname @ov\reserved@a false\endcsname}% - \@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@ - \@getcirc \@tempdimb - \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa - \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ - \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ - \ifdim \@ovdx >\z@ \@ovhlinetrue \fi - \ifdim \@ovdy >\z@ \@ovvlinetrue \fi - \@circlefnt \setbox\@tempboxa - \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi - \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi - \if@ovt \@ovhorz \kern -\@ovxx \fi - \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro - \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ - \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% - \endgroup} -\EndIncludeInRelease -\IncludeInRelease{2016/03/31}% - {\@oval}{default units}% -\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen - \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue - \@ovvlinefalse \@ovhlinefalse - \@tfor\reserved@a :=#3\do{% - \csname @ov\reserved@a false\endcsname}% - \@ovxx #1\unitlength - \@ovyy #2\unitlength - \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue - \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue - \fi\fi - \advance \@tempdimb -2\p@ - \@getcirc \@tempdimb - \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa - \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ - \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ - \ifdim \@ovdx >\z@ \@ovhlinetrue \fi - \ifdim \@ovdy >\z@ \@ovvlinetrue \fi - \@circlefnt \setbox\@tempboxa - \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi - \if@ovl - \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx - \fi - \if@ovt \@ovhorz \kern -\@ovxx \fi - \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro - \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ - \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% - \endgroup} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@oval}{default units}% -\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen - \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue - \@tfor\reserved@a :=#3\do - {\csname @ov\reserved@a false\endcsname}% - \@ovxx #1\unitlength - \@ovyy #2\unitlength - \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi - \advance \@tempdimb -2\p@ - \@getcirc \@tempdimb - \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa - \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ - \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ - \@circlefnt \setbox\@tempboxa - \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi - \if@ovl - \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx - \fi - \if@ovt \@ovhorz \kern -\@ovxx \fi - \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro - \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ - \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% - \endgroup} -\EndIncludeInRelease -\IncludeInRelease{2016/03/31}% - {\@ovvert}{Avoid almost zero length leaders}% -\def\@ovvert#1#2{\vbox to\@ovyy{% - \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax - \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip - \else \kern \@ovri \kern \@ovdy \fi - \if@ovvline \leaders\vrule \@width \@wholewidth \fi - \vfil \nointerlineskip - \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax - \hbox{\char \@tempcntb}% - \else \kern \@ovdy \kern \@ovro \fi}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@ovvert}{Avoid almost zero length leaders}% -\def\@ovvert#1#2{\vbox to\@ovyy{% - \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax - \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip - \else \kern \@ovri \kern \@ovdy \fi - \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip - \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax - \hbox{\char \@tempcntb}% - \else \kern \@ovdy \kern \@ovro \fi}} -\EndIncludeInRelease -\IncludeInRelease{2016/03/31}% - {\@ovhorz}{Avoid almost zero length leaders}% -\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro - \if@ovr \else \kern \@ovdx \fi - \if@ovhline \leaders \hrule \@height \@wholewidth \fi - \hfil - \if@ovl \else \kern \@ovdx \fi - \kern \@ovri}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@ovhorz}{Avoid almost zero length leaders}% -\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro - \if@ovr \else \kern \@ovdx \fi - \leaders \hrule \@height \@wholewidth \hfil - \if@ovl \else \kern \@ovdx \fi - \kern \@ovri}} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@circle}{default units}% -\def\@circle#1{% - \begingroup \boxmaxdepth \maxdimen - \@defaultunitsset\@tempdimb{#1}\unitlength - \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb - \@ovro\ht\@tempboxa - \setbox\@tempboxa\hbox{\@circlefnt - \advance\@tempcnta\tw@ \char \@tempcnta - \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima - \advance\@tempcnta\tw@ - \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima - \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ - \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% - \else \@circ\@tempdimb{96}\fi\endgroup} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@circle}{default units}% -\def\@circle#1{% - \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength - \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb - \@ovro\ht\@tempboxa - \setbox\@tempboxa\hbox{\@circlefnt - \advance\@tempcnta\tw@ \char \@tempcnta - \advance\@tempcnta\m@ne \char \@tempcnta - \kern -2\@tempdima - \advance\@tempcnta\tw@ - \raise \@tempdima \hbox{\char\@tempcnta}% - \raise \@tempdima - \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ - \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% - \else \@circ\@tempdimb{96}\fi\endgroup} + \fi}% \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\@dot}{default units}% -\def\@dot#1{% - \@defaultunitsset\@tempdimb{#1}\unitlength - \@circ\@tempdimb{112}} + {\addvspace}{\addvspace calc support}% +\def\addvspace#1{% + \ifvmode + \if@minipage\else + \ifdim \lastskip =\z@ + \@vspace@calcify{#1}% + \else + \setlength\@tempskipb{#1}% + \@xaddvskip + \fi + \fi + \else + \@noitemerr + \fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@dot}{default units}% -\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}} + {\addvspace}{\addvspace calc support}% + +\def\addvspace#1{% + \ifvmode + \if@minipage\else + \ifdim \lastskip =\z@ + \vskip #1\relax + \else + \@tempskipb#1\relax + \@xaddvskip + \fi + \fi + \else + \@noitemerr + \fi} \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@bezier}{default units}% -\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% - \ifnum #1=\z@ - \@defaultunitsset\@ovxx{#4}\unitlength - \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength - \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi - \@defaultunitsset\@ovdx{#6}\unitlength - \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength - \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi - \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi - \@defaultunitsset\@ovyy{#5}\unitlength - \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength - \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi - \@defaultunitsset\@ovdy{#7}\unitlength - \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength - \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi - \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi - \@multicnt - \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi - \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx - \ifnum \qbeziermax<\@multicnt - \@multicnt\qbeziermax\relax +\IncludeInRelease{2015/01/01}% + {\addpenalty}{\addpenalty}% +\def\addpenalty#1{% + \ifvmode + \if@minipage + \else + \if@nobreak + \else + \ifdim\lastskip=\z@ + \penalty#1\relax + \else + \@tempskipb\lastskip + \begingroup + \@tempskipa\@tempskipb + \advance \@tempskipb + \ifdim\prevdepth>\maxdepth\maxdepth\else + \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi + \fi + \vskip -\@tempskipb + \penalty#1% + \ifdim\@tempskipa=\@tempskipb + \else + \advance\@tempskipb -\@tempskipa + \vskip \@tempskipb + \fi + \vskip \@tempskipa + \endgroup + \fi \fi - \else \@multicnt#1\relax \fi - \@tempcnta\@multicnt \advance\@tempcnta\@ne - \@defaultunitsset\@ovdx{#4}\unitlength - \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength - \multiply\@ovdx \tw@ - \@defaultunitsset\@ovxx{#6}\unitlength - \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength - \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt - \@defaultunitsset\@ovdy{#5}\unitlength - \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength - \multiply\@ovdy \tw@ - \@defaultunitsset\@ovyy{#7}\unitlength - \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength - \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt - \setbox\@tempboxa\hbox{% - \hskip -\@halfwidth - \vrule \@height\@halfwidth - \@depth \@halfwidth - \@width \@wholewidth}% - \put(#2,#3){% - \count@\z@ - \@whilenum{\count@<\@tempcnta}\do - {\@xdim\count@\@ovxx - \advance\@xdim\@ovdx - \divide\@xdim\@multicnt - \multiply\@xdim\count@ - \@ydim\count@\@ovyy - \advance\@ydim\@ovdy - \divide\@ydim\@multicnt - \multiply\@ydim\count@ - \raise \@ydim - \hb@xt@\z@{\kern\@xdim - \unhcopy\@tempboxa\hss}% - \advance\count@\@ne}}} + \fi + \else + \@noitemerr + \fi}% \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@bezier}{default units}% -\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% - \ifnum #1=\z@ - \@ovxx #4\unitlength - \advance\@ovxx -#2\unitlength - \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi - \@ovdx #6\unitlength - \advance\@ovdx -#4\unitlength - \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi - \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi - \@ovyy #5\unitlength - \advance\@ovyy -#3\unitlength - \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi - \@ovdy #7\unitlength - \advance\@ovdy -#5\unitlength - \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi - \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi - \@multicnt - \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi - \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx - \ifnum - \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax + {\addpenalty}{\addpenalty}% +\def\addpenalty#1{% + \ifvmode + \if@minipage + \else + \if@nobreak + \else + \ifdim\lastskip=\z@ + \penalty#1\relax + \else + \@tempskipb\lastskip + \vskip -\lastskip + \penalty#1% + \vskip\@tempskipb + \fi \fi - \else \@multicnt#1\relax \fi - \@tempcnta\@multicnt \advance\@tempcnta\@ne - \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength - \multiply\@ovdx \tw@ - \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength - \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt - \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength - \multiply\@ovdy \tw@ - \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength - \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt - \setbox\@tempboxa\hbox{% - \hskip -\@halfwidth - \vrule \@height\@halfwidth - \@depth \@halfwidth - \@width \@wholewidth}% - \put(#2,#3){% - \count@\z@ - \@whilenum{\count@<\@tempcnta}\do - {\@xdim\count@\@ovxx - \advance\@xdim\@ovdx - \divide\@xdim\@multicnt - \multiply\@xdim\count@ - \@ydim\count@\@ovyy - \advance\@ydim\@ovdy - \divide\@ydim\@multicnt - \multiply\@ydim\count@ - \raise \@ydim - \hb@xt@\z@{\kern\@xdim - \unhcopy\@tempboxa\hss}% - \advance\count@\@ne}}} + \fi + \else + \@noitemerr + \fi}% \EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\bezier}{Make commands robust}% -\MakeRobust\bezier -\MakeRobust\circle -\MakeRobust\dashbox -\MakeRobust\line -\MakeRobust\linethickness -\MakeRobust\multiput -\MakeRobust\oval -\MakeRobust\put -\MakeRobust\qbezier -\MakeRobust\shortstack -\MakeRobust\thinlines -\MakeRobust\vector +\IncludeInRelease{2020/10/01}% + {\@vspace}{Support calc in \vspace}% +\def\@vspace #1{% + \ifvmode + \@vspace@calcify{#1}% + \vskip\z@skip + \else + \@bsphack + \vadjust{\@restorepar + \@vspace@calcify{#1}% + \vskip\z@skip + }% + \@esphack + \fi} +\def\@vspacer#1{% + \ifvmode + \dimen@\prevdepth + \hrule \@height\z@ + \nobreak + \@vspace@calcify{#1}% + \vskip\z@skip + \prevdepth\dimen@ + \else + \@bsphack + \vadjust{\@restorepar + \hrule \@height\z@ + \nobreak + \@vspace@calcify{#1}% + \vskip\z@skip}% + \@esphack + \fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\bezier}{Make commands robust}% - -\kernel@make@fragile\bezier -\kernel@make@fragile\circle -\kernel@make@fragile\dashbox -\kernel@make@fragile\line -\kernel@make@fragile\linethickness -\kernel@make@fragile\multiput -\kernel@make@fragile\oval -\kernel@make@fragile\put -\kernel@make@fragile\qbezier -\kernel@make@fragile\shortstack -\kernel@make@fragile\thinlines -\kernel@make@fragile\vector + {\@vspace}{Support calc in \vspace}% +\def\@vspace #1{% + \ifvmode + \vskip #1 + \vskip\z@skip + \else + \@bsphack + \vadjust{\@restorepar + \vskip #1 + \vskip\z@skip + }% + \@esphack + \fi} +\def\@vspacer#1{% + \ifvmode + \dimen@\prevdepth + \hrule \@height\z@ + \nobreak + \vskip #1 + \vskip\z@skip + \prevdepth\dimen@ + \else + \@bsphack + \vadjust{\@restorepar + \hrule \@height\z@ + \nobreak + \vskip #1 + \vskip\z@skip}% + \@esphack + \fi} \EndIncludeInRelease -%%% From File: ltthm.dtx -%%% From File: ltsect.dtx -\IncludeInRelease{2019/10/01}% - {\title}{Make commands robust}% -\DeclareRobustCommand\title[1]{\gdef\@title{#1}} -\DeclareRobustCommand*\author[1]{\gdef\@author{#1}} -\DeclareRobustCommand*\date[1]{\gdef\@date{#1}} -\DeclareRobustCommand\thanks[1]{\footnotemark - \protected@xdef\@thanks{\@thanks - \protect\footnotetext[\the\c@footnote]{#1}}% -} -\DeclareRobustCommand\and{% % \begin{tabular} - \end{tabular}% - \hskip 1em \@plus.17fil% - \begin{tabular}[t]{c}}% % \end{tabular} +\IncludeInRelease{2015/01/01}% + {\@}{Space after \@}% +\def\@{\spacefactor\@m{}}% \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\title}{Make commands robust}% - -\kernel@make@fragile\title -\kernel@make@fragile\author -\kernel@make@fragile\date -\kernel@make@fragile\thanks -\kernel@make@fragile\and - + {\@}{Space after \@}% +\def\@{\spacefactor\@m}% \EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {\addcontentsline}{fourth argument}% -\def\addcontentsline#1#2#3{% - \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}% - \protected@file@percent}} -\EndIncludeInRelease -\IncludeInRelease{2018/12/01}% - {\addcontentsline}{Mask line endings}% - \def\addcontentsline#1#2#3{% - \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}% - \protected@file@percent}} + {\@hspace}{Support calc with \hspace}% +\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\addcontentsline}{Mask line endings}% -\def\addcontentsline#1#2#3{% - \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}} + {\@hspace}{Support calc with \hspace}% + + +\def\@hspace#1{\hskip #1\relax} \EndIncludeInRelease \IncludeInRelease{2018/12/01}% - {\@dottedtocline}{Prevent protrusion}% -\def\@dottedtocline#1#2#3#4#5{% - \ifnum #1>\c@tocdepth \else - \vskip \z@ \@plus.2\p@ - {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip - \parindent #2\relax\@afterindenttrue - \interlinepenalty\@M - \leavevmode - \@tempdima #3\relax - \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip - {#4}\nobreak - \leaders\hbox{$\m@th - \mkern \@dotsep mu\hbox{.}\mkern \@dotsep - mu$}\hfill - \nobreak - \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5% - \kern-\p@\kern\p@}% - \par}% - \fi} - -\DeclareRobustCommand\noprotrusion{\leavevmode\kern-\p@\kern\p@} + {\thinspace}{Start LR-mode}% +\DeclareRobustCommand\enspace{\leavevmode@ifvmode\kern.5em } +\protected\def\leavevmode@ifvmode{\ifvmode\expandafter\indent\fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@dottedtocline}{Prevent protrusion}% -\def\@dottedtocline#1#2#3#4#5{% - \ifnum #1>\c@tocdepth \else - \vskip \z@ \@plus.2\p@ - {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip - \parindent #2\relax\@afterindenttrue - \interlinepenalty\@M - \leavevmode - \@tempdima #3\relax - \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip - {#4}\nobreak - \leaders\hbox{$\m@th - \mkern \@dotsep mu\hbox{.}\mkern \@dotsep - mu$}\hfill - \nobreak - \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% - \par}% - \fi} - -\let\noprotrusion\@undefined + {\thinspace}{Start LR-mode}% +\def\thinspace{\kern .16667em } +\def\negthinspace{\kern-.16667em } +\def\enspace{\kern.5em } +\let\leavevmode@ifvmode\@undefined \EndIncludeInRelease +%%% From File: ltlogos.dtx %%% From File: ltfiles.dtx \IncludeInRelease{2020/10/01}% {\document}{Added hook to load l3backend code}% @@ -3778,3302 +3782,949 @@ of this package available from CTAN} {\setlength}{Using \setlength with \dimen0}% \def\setlength#1#2{#1#2\relax} \EndIncludeInRelease -%%% From File: ltfloat.dtx -\IncludeInRelease{2015/01/01}% - {\@xfloat}{Check float options}% -\def\@xfloat #1[#2]{% - \@nodocument - \def \@captype {#1}% - \def \@fps {#2}% - \@onelevel@sanitize \@fps - \def \reserved@b {!}% - \ifx \reserved@b \@fps - \@fpsadddefault +%%% From File: ltfssbas.dtx +%% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf +\IncludeInRelease{2020/02/02}% + {\DeclareFontShape@}{Maybe drop one m}% +\def\DeclareFontShape@#1#2#3#4#5#6{% + \expandafter\ifx\csname #1+#2\endcsname\relax + \@latex@error{Font family `#1+#2' unknown}\@eha \else - \ifx \@fps \@empty - \@fpsadddefault + \edef\reserved@a{#3}% + \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'! + Please correct it.\MessageBreak Found}% \fi + \expandafter + \xdef\csname#1/#2/\reserved@b/#4\endcsname + {\expandafter\noexpand\csname #5\endcsname}% + \def\reserved@a{#6}% + \global + \expandafter\let\csname#5\expandafter\endcsname + \ifx\reserved@a\@empty + \@empty + \else + \reserved@a + \fi \fi - \ifhmode - \@bsphack - \@floatpenalty -\@Mii - \else - \@floatpenalty-\@Miii - \fi - \ifinner - \@parmoderr\@floatpenalty\z@ - \else - \@next\@currbox\@freelist - {% - \@tempcnta \sixt@@n - \expandafter \@tfor \expandafter \reserved@a - \expandafter :\expandafter =\@fps - \do - {% - \if \reserved@a h% - \ifodd \@tempcnta - \else - \advance \@tempcnta \@ne - \fi - \else\if \reserved@a t% - \@setfpsbit \tw@ - \else\if \reserved@a b% - \@setfpsbit 4% - \else\if \reserved@a p% - \@setfpsbit 8% - \else\if \reserved@a !% - \ifnum \@tempcnta>15 - \advance\@tempcnta -\sixt@@n\relax - \fi - \else - \@latex@error{Unknown float option `\reserved@a'}% - {Option `\reserved@a' ignored and `p' used.}% - \@setfpsbit 8% - \fi\fi\fi\fi\fi - }% - \@tempcntb \csname ftype@\@captype \endcsname - \multiply \@tempcntb \@xxxii - \advance \@tempcnta \@tempcntb - \global \count\@currbox \@tempcnta - }% - \@fltovf - \fi - \global \setbox\@currbox - \color@vbox - \normalcolor - \vbox \bgroup - \hsize\columnwidth - \@parboxrestore - \@floatboxreset -}% + } \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@xfloat}{Check float options}% -\def\@xfloat #1[#2]{% - \@nodocument - \def \@captype {#1}% - \def \@fps {#2}% - \@onelevel@sanitize \@fps - \def \reserved@b {!}% - \ifx \reserved@b \@fps - \@fpsadddefault - \else - \ifx \@fps \@empty - \@fpsadddefault - \fi - \fi - \ifhmode - \@bsphack - \@floatpenalty -\@Mii + {\DeclareFontShape@}{Maybe drop one m}% + +\def\DeclareFontShape@#1#2#3#4#5#6{% + \expandafter\ifx\csname #1+#2\endcsname\relax + \@latex@error{Font family `#1+#2' unknown}\@eha \else - \@floatpenalty-\@Miii + \expandafter + \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand + \csname #5\endcsname}% + \def\reserved@a{#6}% + \global + \expandafter\let\csname#5\expandafter\endcsname + \ifx\reserved@a\@empty + \@empty + \else + \reserved@a + \fi \fi - \ifinner - \@parmoderr\@floatpenalty\z@ - \else - \@next\@currbox\@freelist - {% - \@tempcnta \sixt@@n - \expandafter \@tfor \expandafter \reserved@a - \expandafter :\expandafter =\@fps - \do - {% - \if \reserved@a h% - \ifodd \@tempcnta - \else - \advance \@tempcnta \@ne - \fi - \fi - \if \reserved@a t% - \@setfpsbit \tw@ - \fi - \if \reserved@a b% - \@setfpsbit 4% - \fi - \if \reserved@a p% - \@setfpsbit 8% - \fi - \if \reserved@a !% - \ifnum \@tempcnta>15 - \advance\@tempcnta -\sixt@@n\relax - \fi - \fi - }% - \@tempcntb \csname ftype@\@captype \endcsname - \multiply \@tempcntb \@xxxii - \advance \@tempcnta \@tempcntb - \global \count\@currbox \@tempcnta - }% - \@fltovf - \fi - \global \setbox\@currbox - \color@vbox - \normalcolor - \vbox \bgroup - \hsize\columnwidth - \@parboxrestore - \@floatboxreset -}% + } \EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\end@dblfloat}{float order in 2-column}% -\def\end@dblfloat{% - \if@twocolumn - \@endfloatbox - \ifnum\@floatpenalty <\z@ - \@largefloatcheck - \global\dp\@currbox1sp % - \@cons\@currlist\@currbox - \ifnum\@floatpenalty <-\@Mii - \penalty -\@Miv - \@tempdima\prevdepth - \vbox{}% - \prevdepth\@tempdima - \penalty\@floatpenalty - \else - \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack - \fi - \fi +\IncludeInRelease{2015/01/01}{\@DeclareMathSizes}% + {Arbitrary units in \DeclareMathSizes}% +\def\@DeclareMathSizes #1#2#3#4#5{% + \@defaultunits\dimen@ #2pt\relax\@nnil + \if $#3$% + \expandafter\let\csname S@\strip@pt\dimen@\endcsname\math@fontsfalse \else - \end@float - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\end@dblfloat}{float order in 2-column}% -\def\end@dblfloat{% -\if@twocolumn - \@endfloatbox - \ifnum\@floatpenalty <\z@ - \@largefloatcheck - \@cons\@dbldeferlist\@currbox + \@defaultunits\dimen@ii #3pt\relax\@nnil + \@defaultunits\@tempdima #4pt\relax\@nnil + \@defaultunits\@tempdimb #5pt\relax\@nnil + \toks@{#1}% + \expandafter\xdef\csname S@\strip@pt\dimen@\endcsname{% + \gdef\noexpand\tf@size{\strip@pt\dimen@ii}% + \gdef\noexpand\sf@size{\strip@pt\@tempdima}% + \gdef\noexpand\ssf@size{\strip@pt\@tempdimb}% + \the\toks@ + }% \fi - \ifnum \@floatpenalty =-\@Mii \@Esphack\fi -\else - \end@float -\fi }% \EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@dblfloatplacement}{float order in 2-column}% -\def\@dblfloatplacement{\global\@dbltopnum\c@dbltopnumber - \global\@dbltoproom \dbltopfraction\@colht - \@textmin \@colht - \advance \@textmin -\@dbltoproom - \@fpmin \dblfloatpagefraction\textheight - \@fptop \@dblfptop - \@fpsep \@dblfpsep - \@fpbot \@dblfpbot - \def\f@depth{1sp}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@dblfloatplacement}{float order in 2-column}% -\def \@dblfloatplacement {% - \global \@dbltopnum \c@dbltopnumber - \global \@dbltoproom \dbltopfraction\@colht - \@textmin \@colht - \advance \@textmin -\@dbltoproom - \@fpmin \dblfloatpagefraction\textheight - \@fptop \@dblfptop - \@fpsep \@dblfpsep - \@fpbot \@dblfpbot -}% +\IncludeInRelease{0000/00/00}{\@DeclareMathSizes}% + {Arbitrary units in \DeclareMathSizes}% +\def\@DeclareMathSizes#1#2#3#4#5{% + \@defaultunits\dimen@#2pt\relax\@nnil + \if$#3$% + \expandafter \let + \csname S@\strip@pt\dimen@\endcsname + \math@fontsfalse + \else + \expandafter \gdef + \csname S@\strip@pt\dimen@\endcsname + {\gdef\tf@size{#3}\gdef\sf@size{#4}% + \gdef\ssf@size{#5}% + #1% + }% + \fi}% \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@textsuperscript}{superscript baseline}% -\def\@textsuperscript#1{% - {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\sf@size#1}}}}} +\IncludeInRelease{2020/02/02}% + {\usefont}{Drop m in usefont}% +\DeclareRobustCommand\usefont[4]{\fontencoding{#1}% + \edef\f@family{#2}% + \set@target@series{#3}% + \edef\f@shape{#4}\selectfont + \ignorespaces} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@textsuperscript}{superscript baseline}% + {\usefont}{Drop m in usefont}% -\def\@textsuperscript#1{% - {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\textsubscript}{\textsubscript}% -\DeclareRobustCommand*\textsubscript[1]{% - \@textsubscript{\selectfont#1}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\textsubscript}{\textsubscript}% -\let\textsubscript\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@textsubscript}{subscript baseline}% -\def\@textsubscript#1{% - {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\sf@size#1}}}}} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@textsubscript}{subscript baseline}% +\DeclareRobustCommand\usefont[4]{\fontencoding{#1}% + \edef\f@family{#2}% + \edef\f@series{#3}% + \edef\f@shape{#4}\selectfont + \ignorespaces} -\def\@textsubscript#1{% - {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}} \EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@textsubscript}{subscript baseline}% -\let\@textsubscript\@undefined -\EndIncludeInRelease -%%% From File: ltidxglo.dtx -%%% From File: ltbibl.dtx -%%% From File: ltpage.dtx -\IncludeInRelease{2019/10/01}% - {\markboth}{Make commands robust}% -\DeclareRobustCommand*\markboth[2]{% - \begingroup - \let\label\relax \let\index\relax \let\glossary\relax - \unrestored@protected@xdef\@themark {{#1}{#2}}% - \@temptokena \expandafter{\@themark}% - \mark{\the\@temptokena}% - \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi} -\DeclareRobustCommand*\markright[1]{% +\IncludeInRelease{2020/02/02}% + {\LoadFontDefinitionFile}{Loading .fd files}% +\def\LoadFontDefinitionFile#1#2{% \begingroup - \let\label\relax \let\index\relax \let\glossary\relax - \expandafter\@markright\@themark {#1}% - \@temptokena \expandafter{\@themark}% - \mark{\the\@temptokena}% + \edef\f@encoding{#1}% + \edef\f@family{#2}% + \try@load@fontshape \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\markboth}{Make commands robust}% - -\kernel@make@fragile\markboth -\kernel@make@fragile\markright - -\EndIncludeInRelease -%% -%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, -%% Phelype Oleinik & LaTeX Team -%%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0c} -\providecommand\ltfilehookdate{2020/10/18} -\IncludeInRelease{2020/10/01}% - {\CurrentFile}{Hook management file}% -\ExplSyntaxOn -\tl_new:N \CurrentFile -\tl_new:N \CurrentFilePath -\tl_new:N \CurrentFileUsed -\tl_new:N \CurrentFilePathUsed -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\CurrentFile}{Hook management file}% - -\let \CurrentFile \@undefined -\let \CurrentFilePath \@undefined -\let \CurrentFileUsed \@undefined -\let \CurrentFilePathUsed \@undefined - -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\__filehook_file_parse_full_name:nN}{File helpers}% -\ExplSyntaxOn -\cs_new:Npn \__filehook_file_parse_full_name:nN #1 - { - \exp_args:Nf \file_parse_full_name_apply:nN - { - \exp_args:Nf \__filehook_full_name:nn - { \file_full_name:n {#1} } {#1} - } - } -\cs_new:Npn \__filehook_full_name:nn #1 #2 - { - \tl_if_empty:nTF {#1} - { \tl_trim_spaces:n {#2} } - { \tl_trim_spaces:n {#1} } - } -\cs_new:Npn \__filehook_if_no_extension:nTF #1 - { - \exp_args:Ne \tl_if_empty:nTF - { \file_parse_full_name_apply:nN {#1} \use_iii:nnn } - } -\cs_new_protected:Npn \__filehook_drop_extension:N #1 - { - \tl_gset:Nx #1 - { - \exp_args:NV \__filehook_file_parse_full_name:nN #1 - \__filehook_drop_extension_aux:nnn - } - } -\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3 - { \tl_if_empty:nF {#1} { #1 / } #2 } -\tl_new:N \l__filehook_internal_tl -\seq_new:N \g__filehook_input_file_seq -\cs_new_protected:Npn \__filehook_file_push: - { - \seq_gpush:Nx \g__filehook_input_file_seq - { - { \CurrentFilePathUsed } { \CurrentFileUsed } - { \CurrentFilePath } { \CurrentFile } - } - } -\cs_new_protected:Npn \__filehook_file_pop: - { - \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl - { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl } - { - \msg_error:nnn { hooks } { should-not-happen } - { Tried~to~pop~from~an~empty~file~name~stack. } - } - } -\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4 - { - \tl_set:Nn \CurrentFilePathUsed {#1} - \tl_set:Nn \CurrentFileUsed {#2} - \tl_set:Nn \CurrentFilePath {#3} - \tl_set:Nn \CurrentFile {#4} - } -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\InputIfFileExists}{Hook management (files)}% -\let\InputIfFileExists\@undefined -\DeclareRobustCommand \InputIfFileExists[2]{% - \IfFileExists{#1}% - {% - \@expl@@@filehook@file@push@@ - \@filehook@set@CurrentFile - \edef\reserved@a{\@filef@und - \@expl@@@filehook@file@pop@assign@@nnnn - {\CurrentFilePathUsed}% - {\CurrentFileUsed}% - {\CurrentFilePath}% - {\CurrentFile}}% - \expandafter\@swaptwoargs\expandafter - {\reserved@a}% - {% - #2% - \@addtofilelist{#1}% - \UseHook{file/before}% - \UseHook{file/before/\CurrentFile}% - \@@input - }% - \UseHook{file/after/\CurrentFile}% - \UseHook{file/after}% - \@expl@@@filehook@file@pop@@ - }% } \EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\InputIfFileExists}{Hook management (files)}% - -\DeclareRobustCommand \InputIfFileExists[2]{% - \IfFileExists{#1}% - {% - \expandafter\@swaptwoargs\expandafter - {\@filef@und}{#2\@addtofilelist{#1}\@@input}}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\InputIfFileExists}{Hook management (files)}% -\long\def \InputIfFileExists#1#2{% - \IfFileExists{#1}% - {#2\@addtofilelist{#1}\@@input \@filef@und}} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\__filehook_subst_add:nn}{Declaring file substitution}% -\ExplSyntaxOn -\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2 - { - \group_begin: - \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } - \int_set:Nn \tex_escapechar:D { -1 } - \cs_gset:cpx { @file-subst@ \__filehook_subst_file_normalize:n {#1} } - { \__filehook_subst_file_normalize:n {#2} } - \group_end: - } -\cs_new_protected:Npn \__filehook_subst_remove:n #1 - { - \group_begin: - \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } - \int_set:Nn \tex_escapechar:D { -1 } - \cs_undefine:c { @file-subst@ \__filehook_subst_file_normalize:n {#1} } - \group_end: - } -\cs_new:Npn \__filehook_subst_file_normalize:n #1 - { - \exp_after:wN \__filehook_subst_empty_name_chk:NN - \cs:w \exp_after:wN \cs_end: - \cs:w \__filehook_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end: - } -\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2 - { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: } -\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3} -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\declare@file@substitution}{File substitution}% -\ExplSyntaxOn -\cs_new_eq:NN \declare@file@substitution \__filehook_subst_add:nn -\cs_new_eq:NN \undeclare@file@substitution \__filehook_subst_remove:n -\ExplSyntaxOff -\EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\declare@file@substitution}{File substitution}% - -\let \declare@file@substitution \@undefined -\let \undeclare@file@substitution \@undefined + {\LoadFontDefinitionFile}{Loading .fd files}% +\let\LoadFontDefinitionFile\@undefined \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\set@curr@file}{Setting current file name}% -\def\set@curr@file#1{% - \begingroup - \escapechar\m@ne - \expandafter\def\csname\expandafter\endcsname - \expandafter{\csname\endcsname}% - \@expl@@@filehook@if@no@extension@@nTF{#1}% - {\@tempswatrue}{\@tempswafalse}% - \@kernel@make@file@csname\@curr@file - \@expl@@@filehook@resolve@file@subst@@w {#1}% - \@expl@@@filehook@if@file@replaced@@TF - {\@kernel@make@file@csname\@curr@file@reqd - \@expl@@@filehook@normalize@file@name@@w{#1}% - \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}% - {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi - \global\let\@curr@file@reqd\@curr@file}% - \endgroup} -\EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\set@curr@file}{Setting current file name}% -\def\set@curr@file#1{% - \begingroup - \escapechar\m@ne - \xdef\@curr@file{% - \expandafter\expandafter\expandafter\unquote@name - \expandafter\expandafter\expandafter{% - \expandafter\string - \csname\@firstofone#1\@empty\endcsname}}% - \endgroup +\IncludeInRelease{2020/02/02}% + {\DeclareFontFamilySubstitution}{Provide family substituation}% +\begingroup +\nfss@catcodes +\gdef\DeclareFontFamilySubstitution#1#2#3{% + \LoadFontDefinitionFile{#1}{#2}% + \LoadFontDefinitionFile{#1}{#3}% + \DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}% + \DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}% + \DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}% + \DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}% + \DeclareFontShape{#1}{#2}{m}{sw}{<->ssub * #3/m/sw}{}% + \DeclareFontShape{#1}{#2}{m}{scit}{<->ssub * #3/m/scit}{}% + \DeclareFontShape{#1}{#2}{m}{scsl}{<->ssub * #3/m/scsl}{}% + \DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/b/it}{}% + \DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/b/n}{}% + \DeclareFontShape{#1}{#2}{b}{scit}{<->ssub * #3/b/scit}{}% + \DeclareFontShape{#1}{#2}{b}{scsl}{<->ssub * #3/b/scsl}{}% + \DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/b/sc}{}% + \DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/b/sl}{}% + \DeclareFontShape{#1}{#2}{b}{sw}{<->ssub * #3/b/sw}{}% + \DeclareFontShape{#1}{#2}{bx}{it}{<->ssub * #3/bx/it}{}% + \DeclareFontShape{#1}{#2}{bx}{n}{<->ssub * #3/bx/n}{}% + \DeclareFontShape{#1}{#2}{bx}{scit}{<->ssub * #3/bx/scit}{}% + \DeclareFontShape{#1}{#2}{bx}{scsl}{<->ssub * #3/bx/scsl}{}% + \DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub * #3/bx/sc}{}% + \DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub * #3/bx/sl}{}% + \DeclareFontShape{#1}{#2}{bx}{sw}{<->ssub * #3/bx/sw}{}% } +\endgroup \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\set@curr@file}{Setting current file name}% -\let\set@curr@file\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@kernel@make@file@csname}{Make file csname}% -\def\@kernel@make@file@csname#1#2#3{% - \xdef#1{\expandafter\@set@curr@file@aux - \csname\expandafter#2\@firstofone#3\@nil\endcsname}} -\def\@set@curr@file@aux#1{% - \expandafter\ifx\csname\endcsname#1% - .tex\else\string#1\fi} -\def\@filehook@set@CurrentFile{% - \@expl@@@filehook@set@curr@file@@nNN{\@curr@file}% - \CurrentFileUsed\CurrentFilePathUsed - \ifx\@curr@file@reqd\@curr@file - \let\CurrentFile\CurrentFileUsed - \let\CurrentFilePath\CurrentFilePathUsed - \else - \@expl@@@filehook@set@curr@file@@nNN{\@curr@file@reqd}% - \CurrentFile\CurrentFilePath - \fi} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {@@_set_curr_file:nNN}{Set curr file}% -\ExplSyntaxOn -\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1 - { - \exp_args:Nf \__filehook_file_parse_full_name:nN {#1} - \__filehook_set_curr_file_assign:nnnNN - } -\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5 - { - \str_set:Nn #5 {#1} - \str_set:Nn #4 {#2#3} - } -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\__filehook_resolve_file_subst:w}{Replace files detect loops}% -\ExplSyntaxOn -\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil - { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn } -\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil - { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn } -\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3 - { \tl_if_empty:nF {#1} { #1 / } #2#3 } -\flag_new:n { __filehook_file_replaced } -\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2 - { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} } -\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3 - { - \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 } - { \__filehook_file_name_compose:nnn {#1} {#2} {#3} } - } -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\__filehook_file_subst_tortoise_hare:nn}{Tortoise and Hare}% -\ExplSyntaxOn -\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3 - { - \cs_if_exist:cTF { @file-subst@ #2 } - { - \flag_if_raised:nF { __filehook_file_replaced } - { \flag_raise:n { __filehook_file_replaced } } - \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } } - { - \__filehook_file_subst_loop:cc - { @file-subst@ #1 } - { @file-subst@ \use:c { @file-subst@ #2 } } - } - { \use:c { @file-subst@ #2 } } - } - { #3 } - } -\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2 - { - \token_if_eq_meaning:NNTF #1 #2 - { - .tex - \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1 - } - { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} } - } -\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc } -\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2 - { - \__kernel_msg_expandable_error:nnff { kernel } { file-cycle } - {#1} { \use:c { @file-subst@ #1 } } - \token_if_eq_meaning:NNF #1 #2 - { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 } - } -\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c } -\__kernel_msg_new:nnn { kernel } { file-cycle } - { File~loop!~#1~replaced~by~#2... } -\ExplSyntaxOff -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\disable@package@load}{Disable packages}% -\def\disable@package@load#1#2{% - \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}} -\def\@disable@packageload@do#1#2{% - \@ifundefined{@pkg-disable@#1}{#2}% - {\@nameuse{@pkg-disable@#1}}} -\def\reenable@package@load#1{% - \global\expandafter\let - \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\disable@package@load}{Disable packages}% + {\DeclareFontFamilySubstitution}{Provide family substituation}% -\let\disable@package@load \@undefined -\let\@disable@packageload@do\@undefined -\let\reenable@package@load \@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@expl@@@filehook@if@no@extension@@nTF}{2e tmp interfaces}% -\ExplSyntaxOn -\cs_new_eq:NN \@expl@@@filehook@if@no@extension@@nTF - \__filehook_if_no_extension:nTF -\cs_new_eq:NN \@expl@@@filehook@set@curr@file@@nNN - \__filehook_set_curr_file:nNN -\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 +\let\DeclareFontFamilySubstitution\@undefined \EndIncludeInRelease -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team -%% -%%% From File: ltshipout.dtx -\providecommand\ltshipoutversion{v1.0c} -\providecommand\ltshipoutdate{2020/09/27} -\IncludeInRelease{2020/10/01}% - {\shipout}{Hook mangement (shipout)}% -\ExplSyntaxOn -\bool_new:N \g__shipout_debug_bool -\cs_new_eq:NN \__shipout_debug:n \use_none:n -\cs_new_protected:Npn \shipout_debug_on: - { - \bool_gset_true:N \g__shipout_debug_bool - \__shipout_debug_gset: - } -\cs_new_protected:Npn \shipout_debug_off: - { - \bool_gset_false:N \g__shipout_debug_bool - \__shipout_debug_gset: - } -\cs_new_protected:Npn \__shipout_debug_gset: - { - \cs_gset_protected:Npx \__shipout_debug:n ##1 - { \bool_if:NT \g__shipout_debug_bool {##1} } - } -\box_new:N \l_shipout_box -\cs_set_eq:NN \ShipoutBox \l_shipout_box -\cs_set_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 +\IncludeInRelease{2019/10/01}% + {\DeclareErrorFont}{No side effects please}% +\def\DeclareErrorFont#1#2#3#4#5{% + \xdef\error@fontshape{% + \noexpand\expandafter\noexpand\split@name\noexpand\string + \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname + \noexpand\@nil}% + \gdef\default@family{#2}% + \gdef\default@series{#3}% + \gdef\default@shape{#4}% } -\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 \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\shipout}{The hook management (shipout)}% -\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname - -\let \ShipoutBox\@undefined -\let \ReadonlyShipoutCounter \@undefined -\let \c@totalpages \@undefined -\let \thetotalpages \@undefined - -\let \DiscardShipoutBox \@undefined -\let \DebugShipoutsOn \@undefined -\let \DebugShipoutsOff \@undefined + {\DeclareErrorFont}{No side effects please}% -\DeclareRobustCommand \AtBeginDvi [1]{% - \global \setbox \@begindvibox - \vbox{\unvbox \@begindvibox #1}% +\def\DeclareErrorFont#1#2#3#4#5{% + \xdef\error@fontshape{% + \noexpand\expandafter\noexpand\split@name\noexpand\string + \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname + \noexpand\@nil}% + \gdef\default@family{#2}% + \gdef\default@series{#3}% + \gdef\default@shape{#4}% + \global\let\f@family\default@family + \global\let\f@series\default@series + \global\let\f@shape\default@shape + \gdef\f@size{#5}% + \gdef\f@baselineskip{#5pt}% } - -\let \AtBeginShipout \@undefined -\let \AtBeginShipoutNext \@undefined - -\let \AtBeginShipoutFirst \@undefined - -\let \ShipoutBoxHeight \@undefined -\let \ShipoutBoxDepth \@undefined -\let \ShipoutBoxWidth \@undefined - -\let \AtBeginShipoutDiscard \@undefined - -\let \AtBeginShipoutAddToBox \@undefined -\let \AtBeginShipoutAddToBoxForeground \@undefined -\let \AtBeginShipoutUpperLeft \@undefined -\let \AtBeginShipoutUpperLeftForeground \@undefined - - -\let \AtEndDvi \@undefined - -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\AtEndDvi}{atenddvi emulation}% -\ExplSyntaxOn -\cs_new_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}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\AtEndDvi}{atenddvi emulation}% -\let \AtEndDvi \@undefined -\EndIncludeInRelease -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% From File: ltoutput.dtx -\IncludeInRelease{2015/10/01}% - {\bx@ZZ}{Extended float list}% -\let\@elt\newinsert -\ifx\numexpr\@undefined\else -\def\reserved@a{% - \@elt\bx@S\@elt\bx@T\@elt\bx@U\@elt\bx@V - \@elt\bx@W\@elt\bx@X\@elt\bx@Y\@elt\bx@Z - \@elt\bx@AA\@elt\bx@BB\@elt\bx@CC\@elt\bx@DD\@elt\bx@EE - \@elt\bx@FF\@elt\bx@GG\@elt\bx@HH\@elt\bx@II\@elt\bx@JJ - \@elt\bx@KK\@elt\bx@LL\@elt\bx@MM\@elt\bx@NN - \@elt\bx@OO\@elt\bx@PP\@elt\bx@QQ\@elt\bx@RR - \@elt\bx@SS\@elt\bx@TT\@elt\bx@UU\@elt\bx@VV - \@elt\bx@WW\@elt\bx@XX\@elt\bx@YY\@elt\bx@ZZ} -\reserved@a -\def\@elt{\noexpand\@elt\noexpand} -\edef\@freelist{\@freelist\reserved@a} -\fi -\let\reserved@a\relax -\let\@elt\relax \EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\bx@ZZ}{Extended float list}% -\def\@freelist{% - \@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E - \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J - \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N - \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R} - \insc@unt=234 -\EndIncludeInRelease -\IncludeInRelease{2017/04/15}% - {\newpage}{Check depth of page}% -\def \newpage {% - \if@noskipsec - \ifx \@nodocument\relax - \leavevmode - \global \@noskipsecfalse - \fi - \fi - \if@inlabel - \leavevmode - \global \@inlabelfalse - \fi - \if@nobreak \@nobreakfalse \everypar{}\fi - \par - \ifdim\prevdepth>\z@ - \vskip -% - \ifdim\prevdepth>\maxdepth - \maxdepth - \else - \prevdepth - \fi - \fi - \vfil - \penalty -\@M} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\newpage}{Check depth of page}% -\def \newpage {% - \if@noskipsec - \ifx \@nodocument\relax - \leavevmode - \global \@noskipsecfalse - \fi - \fi - \if@inlabel - \leavevmode - \global \@inlabelfalse - \fi - \if@nobreak \@nobreakfalse \everypar{}\fi - \par - \vfil - \penalty -\@M} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@testwrongwidth}{float order in 2-column}% -\def\@testwrongwidth #1{% - \ifdim\dp#1=\f@depth +\IncludeInRelease{2015/01/01}{\wrong@fontshape}% + {Font substituation in preamble}% +\def\wrong@fontshape{% + \csname D@\f@encoding\endcsname % install defaults if in math + \edef\reserved@a{\csname\curr@fontshape\endcsname}% + \ifx\last@fontshape\reserved@a + \errmessage{Corrupted NFSS tables}% + \error@fontshape \else - \global\@testtrue - \fi}% -\let\f@depth\z@ -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@testwrongwidth}{float order in 2-column}% -\let\@testwrongwidth\@undefined -\let\f@depth\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\@doclearpage}% - {float order in 2-column}% -\def \@doclearpage {% - \ifvoid\footins - \ifvbox\@kludgeins - {\setbox \@tempboxa \box \@kludgeins}% - \fi - \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa - \setbox\@tempboxa\box\@cclv - \xdef\@deferlist{\@toplist\@botlist\@deferlist}% - \global \let \@toplist \@empty - \global \let \@botlist \@empty - \global \@colroom \@colht - \ifx \@currlist\@empty - \else - \@latexerr{Float(s) lost}\@ehb - \global \let \@currlist \@empty - \fi - \@makefcolumn\@deferlist - \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% - \if@twocolumn - \if@firstcolumn - \xdef\@deferlist{\@dbltoplist\@deferlist}% - \global \let \@dbltoplist \@empty - \global \@colht \textheight - \begingroup - \@dblfloatplacement - \@makefcolumn\@deferlist - \@whilesw\if@fcolmade \fi{\@outputpage - \@makefcolumn\@deferlist}% - \endgroup - \else - \vbox{}\clearpage - \fi - \fi - \ifx\@deferlist\@empty \else\clearpage \fi - \else - \setbox\@cclv\vbox{\box\@cclv\vfil}% - \@makecol\@opcol - \clearpage - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\@doclearpage}% - {float order in 2-column}% -\def \@doclearpage {% - \ifvoid\footins - \ifvbox\@kludgeins - {\setbox \@tempboxa \box \@kludgeins}% - \fi - \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa - \setbox\@tempboxa\box\@cclv - \xdef\@deferlist{\@toplist\@botlist\@deferlist}% - \global \let \@toplist \@empty - \global \let \@botlist \@empty - \global \@colroom \@colht - \ifx \@currlist\@empty - \else - \@latexerr{Float(s) lost}\@ehb - \global \let \@currlist \@empty - \fi - \@makefcolumn\@deferlist - \@whilesw\if@fcolmade \fi - {\@opcol\@makefcolumn\@deferlist}% - \if@twocolumn - \if@firstcolumn - \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% - \global \let \@dbltoplist \@empty - \global \@colht \textheight + \let\f@shape\default@shape + \expandafter\ifx\csname\curr@fontshape\endcsname\relax + \let\f@series\default@series + \expandafter + \ifx\csname\curr@fontshape\endcsname\relax + \let\f@family\default@family \begingroup - \@dblfloatplacement - \@makefcolumn\@dbldeferlist - \@whilesw\if@fcolmade \fi - {\@outputpage\@makefcolumn\@dbldeferlist}% + \try@load@fontshape \endgroup - \else - \vbox{}\clearpage - \fi - \fi - \else - \setbox\@cclv\vbox{\box\@cclv\vfil}% - \@makecol\@opcol - \clearpage - \fi - }% -\EndIncludeInRelease -\IncludeInRelease{2017/04/15}% - {\@outputpage}{Reset language for hyphenation}% -\def\@outputpage{% -\begingroup - \let \protect \noexpand - \language\document@default@language - \@resetactivechars - \global\let\@@if@newlist\if@newlist - \global\@newlistfalse - \@parboxrestore - \shipout \vbox{% - \set@typeset@protect - \aftergroup \endgroup - \aftergroup \set@typeset@protect - \if@specialpage - \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% - \fi - \if@twoside - \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot - \let\@themargin\oddsidemargin - \else \let\@thehead\@evenhead - \let\@thefoot\@evenfoot \let\@themargin\evensidemargin - \fi - \fi - \reset@font - \normalsize - \normalsfcodes - \let\label\@gobble - \let\index\@gobble - \let\glossary\@gobble - \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ - \@begindvi - \vskip \topmargin - \moveright\@themargin \vbox {% - \setbox\@tempboxa \vbox to\headheight{% - \vfil - \color@hbox - \normalcolor - \hb@xt@\textwidth{\@thehead}% - \color@endbox - }% - \dp\@tempboxa \z@ - \box\@tempboxa - \vskip \headsep - \box\@outputbox - \baselineskip \footskip - \color@hbox - \normalcolor - \hb@xt@\textwidth{\@thefoot}% - \color@endbox - }% - }% - \global\let\if@newlist\@@if@newlist - \global \@colht \textheight - \stepcounter{page}% - \let\firstmark\botmark -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@outputpage}{Reset language for hyphenation}% -\def\@outputpage{% -\begingroup - \let \protect \noexpand - \@resetactivechars - \global\let\@@if@newlist\if@newlist - \global\@newlistfalse - \@parboxrestore - \shipout \vbox{% - \set@typeset@protect - \aftergroup \endgroup - \aftergroup \set@typeset@protect - \if@specialpage - \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% - \fi - \if@twoside - \ifodd\count\z@ - \let\@thehead\@oddhead \let\@thefoot\@oddfoot - \let\@themargin\oddsidemargin - \else \let\@thehead\@evenhead - \let\@thefoot\@evenfoot \let\@themargin\evensidemargin - \fi - \fi - \reset@font - \normalsize - \normalsfcodes - \let\label\@gobble - \let\index\@gobble - \let\glossary\@gobble - \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ - \@begindvi - \vskip \topmargin - \moveright\@themargin \vbox {% - \setbox\@tempboxa \vbox to\headheight{% - \vfil - \color@hbox - \normalcolor - \hb@xt@\textwidth{\@thehead}% - \color@endbox - }% - \dp\@tempboxa \z@ - \box\@tempboxa - \vskip \headsep - \box\@outputbox - \baselineskip \footskip - \color@hbox - \normalcolor - \hb@xt@\textwidth{\@thefoot}% - \color@endbox - }% - }% - \global\let\if@newlist\@@if@newlist - \global \@colht \textheight - \stepcounter{page}% - \let\firstmark\botmark -} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@startdblcolumn}{float order in 2-column}% -\def \@startdblcolumn {% - \@tryfcolumn \@deferlist - \if@fcolmade - \else - \begingroup - \let \reserved@b \@deferlist - \global \let \@deferlist \@empty - \let \@elt \@sdblcolelt - \reserved@b - \endgroup - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@startdblcolumn}{float order in 2-column}% -\def \@startdblcolumn {% -% \global \@colht \textheight - \@tryfcolumn \@dbldeferlist - \if@fcolmade - \else - \begingroup - \let \reserved@b \@dbldeferlist - \global \let \@dbldeferlist \@empty - \let \@elt \@sdblcolelt - \reserved@b - \endgroup - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\@xtryfc}% - {float order in 2-column}% -\def\@xtryfc #1{% - \@next\reserved@a\@trylist{}{}% - \@currtype \count #1% - \divide\@currtype\@xxxii - \multiply\@currtype\@xxxii - \@bitor \@currtype \@failedlist - \@testfp #1% - \@testwrongwidth #1% - \ifdim \ht #1>\@colht - \@testtrue - \fi - \if@test - \@cons\@failedlist #1% - \else - \@ytryfc #1% - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\@xtryfc}% - {float order in 2-column}% -\def\@xtryfc #1{% - \@next\reserved@a\@trylist{}{}% - \@currtype \count #1% - \divide\@currtype\@xxxii - \multiply\@currtype\@xxxii - \@bitor \@currtype \@failedlist - \@testfp #1% - \ifdim \ht #1>\@colht - \@testtrue + \fi \fi \fi - \if@test - \@cons\@failedlist #1% - \else - \@ytryfc #1% - \fi}% + \@font@warning{Font shape `\expandafter\string\reserved@a' + \expandafter\@gobble\string\@undefined\MessageBreak + using `\curr@fontshape' instead\@wrong@font@char}% + \global\let\last@fontshape\reserved@a + \gdef\@defaultsubs{% + \@font@warning{Some font shapes were not available, defaults + substituted.\@gobbletwo}}% + \global\expandafter\expandafter\expandafter\let + \expandafter\reserved@a + \csname\curr@fontshape\endcsname + \xdef\font@name{% + \csname\curr@fontshape/\f@size\endcsname}% + \pickup@font} \EndIncludeInRelease -\IncludeInRelease{2015/01/01}{@ztryfc}% - {float order in 2-column}% -\def\@ztryfc #1{% - \@tempcnta\count #1% - \divide\@tempcnta\@xxxii - \multiply\@tempcnta\@xxxii - \@bitor \@tempcnta {\@failedlist \@flfail}% - \@testfp #1% - \@testwrongwidth #1% - \@tempdimb\@tempdima - \advance\@tempdimb\ht #1% - \advance\@tempdimb\@fpsep - \ifdim \@tempdimb >\@colht - \@testtrue - \fi - \if@test - \@cons\@flfail #1% +\IncludeInRelease{0000/00/00}{\wrong@fontshape}% + {Font substituation in preamble}% +\def\wrong@fontshape{% + \csname D@\f@encoding\endcsname + \edef\reserved@a{\csname\curr@fontshape\endcsname}% + \ifx\last@fontshape\reserved@a + \errmessage{Corrupted NFSS tables}% + \error@fontshape \else - \@cons\@flsucceed #1% - \@tempdima\@tempdimb - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{@ztryfc}% - {float order in 2-column}% -\def\@ztryfc #1{% - \@tempcnta \count#1% - \divide\@tempcnta\@xxxii - \multiply\@tempcnta\@xxxii - \@bitor \@tempcnta {\@failedlist \@flfail}% - \@testfp #1% - \@tempdimb\@tempdima - \advance\@tempdimb \ht#1% - \advance\@tempdimb\@fpsep - \ifdim \@tempdimb >\@colht - \@testtrue + \let\f@shape\default@shape + \expandafter\ifx\csname\curr@fontshape\endcsname\relax + \let\f@series\default@series + \expandafter + \ifx\csname\curr@fontshape\endcsname\relax + \let\f@family\default@family + \fi \fi \fi - \if@test - \@cons\@flfail #1% - \else - \@cons\@flsucceed #1% - \@tempdima\@tempdimb - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@addtocurcol}{float order in 2-column}% -\def \@addtocurcol {% - \@insertfalse - \@setfloattypecounts - \ifnum \@fpstype=8 - \else - \ifnum \@fpstype=24 - \else - \@flsettextmin - \advance \@textmin \@textfloatsheight - \@reqcolroom \@pageht - \ifdim \@textmin>\@reqcolroom - \@reqcolroom \@textmin - \fi - \advance \@reqcolroom \ht\@currbox - \ifdim \@colroom>\@reqcolroom - \@flsetnum \@colnum - \ifnum \@colnum>\z@ - \@bitor\@currtype\@deferlist - \@testwrongwidth\@currbox - \if@test - \else - \@bitor\@currtype\@botlist - \if@test - \@addtobot - \else - \ifodd \count\@currbox - \advance \@reqcolroom \intextsep - \ifdim \@colroom>\@reqcolroom - \global \advance \@colnum \m@ne - \global \advance \@textfloatsheight \ht\@currbox - \global \advance \@textfloatsheight 2\intextsep - \@cons \@midlist \@currbox - \if@nobreak - \nobreak - \@nobreakfalse - \everypar{}% - \else - \addpenalty \interlinepenalty - \fi - \vskip \intextsep - \box\@currbox - \penalty\interlinepenalty - \vskip\intextsep - \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi - \outputpenalty \z@ - \@inserttrue - \fi - \fi - \if@insert - \else - \@addtotoporbot - \fi - \fi - \fi - \fi - \fi - \fi - \fi - \if@insert - \else - \@resethfps - \@cons\@deferlist\@currbox - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@addtocurcol}{float order in 2-column}% -\def \@addtocurcol {% - \@insertfalse - \@setfloattypecounts - \ifnum \@fpstype=8 - \else - \ifnum \@fpstype=24 - \else - \@flsettextmin - \advance \@textmin \@textfloatsheight - \@reqcolroom \@pageht - \ifdim \@textmin>\@reqcolroom - \@reqcolroom \@textmin - \fi - \advance \@reqcolroom \ht\@currbox - \ifdim \@colroom>\@reqcolroom - \@flsetnum \@colnum - \ifnum \@colnum>\z@ - \@bitor\@currtype\@deferlist - \if@test - \else - \@bitor\@currtype\@botlist - \if@test - \@addtobot - \else - \ifodd \count\@currbox - \advance \@reqcolroom \intextsep - \ifdim \@colroom>\@reqcolroom - \global \advance \@colnum \m@ne - \global \advance - \@textfloatsheight\ht\@currbox - \global \advance - \@textfloatsheight 2\intextsep - \@cons \@midlist \@currbox - \if@nobreak - \nobreak - \@nobreakfalse - \everypar{}% - \else - \addpenalty\interlinepenalty - \fi - \vskip \intextsep - \box\@currbox - \penalty\interlinepenalty - \vskip\intextsep - \ifnum\outputpenalty - <-\@Mii \vskip - -\parskip\fi - \outputpenalty \z@ - \@inserttrue - \fi - \fi - \if@insert - \else - \@addtobot - \fi - \fi - \fi - \fi - \fi - \fi - \fi - \if@insert - \else - \@resethfps - \@cons\@deferlist\@currbox - \fi - }% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01} - {\@addtonextcol}{float order in 2-column}% -\def\@addtonextcol{% - \begingroup - \@insertfalse - \@setfloattypecounts - \ifnum \@fpstype=8 - \else - \ifnum \@fpstype=24 - \else - \@flsettextmin - \@reqcolroom \ht\@currbox - \advance \@reqcolroom \@textmin - \ifdim \@colroom>\@reqcolroom - \@flsetnum \@colnum - \ifnum\@colnum>\z@ - \@bitor\@currtype\@deferlist - \@testwrongwidth\@currbox - \if@test - \else - \@addtotoporbot - \fi - \fi - \fi - \fi - \fi - \if@insert - \else - \@cons\@deferlist\@currbox - \fi - \endgroup -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@addtonextcol}{float order in 2-column}% -\def\@addtonextcol{% - \begingroup - \@insertfalse - \@setfloattypecounts - \ifnum \@fpstype=8 - \else - \ifnum \@fpstype=24 - \else - \@flsettextmin - \@reqcolroom \ht\@currbox - \advance \@reqcolroom \@textmin - \ifdim \@colroom>\@reqcolroom - \@flsetnum \@colnum - \ifnum\@colnum>\z@ - \@bitor\@currtype\@deferlist - \if@test - \else - \@addtotoporbot - \fi - \fi - \fi - \fi - \fi - \if@insert - \else - \@cons\@deferlist\@currbox - \fi - \endgroup -}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@addtodblcol}{float order in 2-column}% -\def\@addtodblcol{% - \begingroup - \@insertfalse - \@setfloattypecounts - \@getfpsbit \tw@ - \ifodd\@tempcnta - \@flsetnum \@dbltopnum - \ifnum \@dbltopnum>\z@ - \@tempswafalse - \ifdim \@dbltoproom>\ht\@currbox - \@tempswatrue - \else - \ifnum \@fpstype<\sixt@@n - \advance \@dbltoproom \@textmin - \ifdim \@dbltoproom>\ht\@currbox - \@tempswatrue - \fi - \advance \@dbltoproom -\@textmin - \fi - \fi - \if@tempswa - \@bitor \@currtype \@deferlist - \@testwrongwidth\@currbox - \if@test - \else - \@tempdima -\ht\@currbox - \advance\@tempdima - -\ifx \@dbltoplist\@empty \dbltextfloatsep \else - \dblfloatsep \fi - \global \advance \@dbltoproom \@tempdima - \global \advance \@colht \@tempdima - \global \advance \@dbltopnum \m@ne - \@cons \@dbltoplist \@currbox - \@inserttrue - \fi - \fi - \fi - \fi - \if@insert - \else - \@cons\@deferlist\@currbox - \fi - \endgroup -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@addtodblcol}{float order in 2-column}% -\def\@addtodblcol{% - \begingroup - \@insertfalse - \@setfloattypecounts - \@getfpsbit \tw@ - \ifodd\@tempcnta - \@flsetnum \@dbltopnum - \ifnum \@dbltopnum>\z@ - \@tempswafalse - \ifdim \@dbltoproom>\ht\@currbox - \@tempswatrue - \else - \ifnum \@fpstype<\sixt@@n - \advance \@dbltoproom \@textmin - \ifdim \@dbltoproom>\ht\@currbox - \@tempswatrue - \fi - \advance \@dbltoproom -\@textmin - \fi - \fi - \if@tempswa - \@bitor \@currtype \@dbldeferlist - \if@test - \else - \@tempdima -\ht\@currbox - \advance\@tempdima - -\ifx \@dbltoplist\@empty - \dbltextfloatsep - \else \dblfloatsep \fi - \global \advance \@dbltoproom \@tempdima - \global \advance \@colht \@tempdima - \global \advance \@dbltopnum \m@ne - \@cons \@dbltoplist \@currbox - \@inserttrue - \fi - \fi - \fi - \fi - \if@insert - \else - \@cons\@dbldeferlist\@currbox - \fi - \endgroup -}% -\EndIncludeInRelease -\IncludeInRelease{2017/01/01}% - {\@makefcolumn}{negative height floats}% -\def\@makefcolumn #1{% - \begingroup - \@fpmin -\maxdimen - \let \@testfp \@gobble - \@tryfcolumn #1% - \endgroup -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@makefcolumn}{negative height floats}% -\def\@makefcolumn #1{% - \begingroup - \@fpmin \z@ - \let \@testfp \@gobble - \@tryfcolumn #1% - \endgroup -} + \@font@warning{Font shape + `\expandafter\string\reserved@a' + \expandafter\@gobble\string\@undefined + \MessageBreak + using `\curr@fontshape' instead\@wrong@font@char}% + \global\let\last@fontshape\reserved@a + \gdef\@defaultsubs{% + \@font@warning{Some font shapes were not available, + defaults substituted.\@gobbletwo}}% + \global\expandafter\expandafter\expandafter\let + \expandafter\reserved@a + \csname\curr@fontshape\endcsname + \xdef\font@name{% + \csname\curr@fontshape/\f@size\endcsname}% + \pickup@font} \EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@outputdblcol}{2 column marks}% -\def\@outputdblcol{% - \if@firstcolumn - \global\@firstcolumnfalse - \global\setbox\@leftcolumn\copy\@outputbox - \splitmaxdepth\maxdimen - \vbadness\maxdimen - \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}% - \setbox\@outputbox\vsplit\@outputbox to\maxdimen - \toks@\expandafter{\topmark}% - \xdef\@firstcoltopmark{\the\toks@}% - \toks@\expandafter{\splitfirstmark}% - \xdef\@firstcolfirstmark{\the\toks@}% - \ifx\@firstcolfirstmark\@empty - \global\let\@setmarks\relax - \else - \gdef\@setmarks{% - \let\firstmark\@firstcolfirstmark - \let\topmark\@firstcoltopmark}% +\IncludeInRelease{2017/01/01}{\showhyphens}% + {XeTeX support for \showhyphens}% +\ifx\XeTeXcharclass\@undefined +\DeclareRobustCommand\showhyphens[1]{% + \setbox0\vbox{% + \color@begingroup + \everypar{}% + \parfillskip\z@skip\hsize\maxdimen + \normalfont + \pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1% + \color@endgroup}} +\else +\DeclareRobustCommand\showhyphens[1]{% + \setbox0\vbox{% + \usefont{TU}{lmr}{m}{n}% + \hsize 1sp % + \hbadness\@M + \hfuzz\maxdimen + \tracingonline\z@ + \everypar={}% + \leftskip\z@skip + \rightskip\z@skip + \parfillskip\z@skip + \hyphenpenalty=-\@M + \pretolerance\m@ne + \interlinepenalty\z@ + \clubpenalty\z@ + \widowpenalty\z@ + \brokenpenalty1127 % + \setbox\z@\hbox{}% + \noindent + \hskip\z@skip + #1% + \par + \loop + \@tempswafalse + \ifnum\lastnodetype=11\unskip\@tempswatrue\fi + \ifnum\lastnodetype=12\unkern\@tempswatrue\fi + \ifnum\lastnodetype=13 % + \count@\lastpenalty + \unpenalty\@tempswatrue \fi - \else - \global\@firstcolumntrue - \setbox\@outputbox\vbox{% - \hb@xt@\textwidth{% - \hb@xt@\columnwidth{\box\@leftcolumn \hss}% - \hfil - {\normalcolor\vrule \@width\columnseprule}% - \hfil - \hb@xt@\columnwidth{\box\@outputbox \hss}}}% - \@combinedblfloats - \@setmarks - \@outputpage - \begingroup - \@dblfloatplacement - \@startdblcolumn - \@whilesw\if@fcolmade \fi{\@outputpage - \@startdblcolumn}% - \endgroup - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@outputdblcol}{2 column marks}% -\def\@outputdblcol{% - \if@firstcolumn - \global \@firstcolumnfalse - \global \setbox\@leftcolumn \box\@outputbox - \else - \global \@firstcolumntrue - \setbox\@outputbox \vbox {% - \hb@xt@\textwidth {% - \hb@xt@\columnwidth {% - \box\@leftcolumn \hss}% - \hfil - {\normalcolor\vrule - \@width\columnseprule}% - \hfil - \hb@xt@\columnwidth {% - \box\@outputbox \hss}% - }% - }% - \@combinedblfloats - \@outputpage - \begingroup - \@dblfloatplacement - \@startdblcolumn - \@whilesw\if@fcolmade \fi - {\@outputpage - \@startdblcolumn}% - \endgroup - \fi -}% -\EndIncludeInRelease -%%% From File: ltclass.dtx - -\IncludeInRelease{2020/10/01}{\@pushfilename}% - {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% -\def\@pushfilename{% - \@expl@@@hook@curr@name@push@@n{}% - \@expl@push@filename@@ - \xdef\@currnamestack{% - {\@currname}% - {\@currext}% - {\the\catcode`\@}% - \@currnamestack}% - \@expl@push@filename@aux@@} -\EndIncludeInRelease - -\IncludeInRelease{2020/02/02}{\@pushfilename}% - {Add \@expl@push@filename@@}% -\def\@pushfilename{% - \@expl@push@filename@@ - \xdef\@currnamestack{% - {\@currname}% - {\@currext}% - {\the\catcode`\@}% - \@currnamestack}% - \@expl@push@filename@aux@@} -\EndIncludeInRelease - -\IncludeInRelease{0000/00/00}{\@pushfilename}% - {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% -\def\@pushfilename{% - \xdef\@currnamestack{% - {\@currname}% - {\@currext}% - {\the\catcode`\@}% - \@currnamestack}} -\EndIncludeInRelease -\@onlypreamble\@pushfilename - -\IncludeInRelease{2020/10/01}{\@popfilename}% - {Add \@expl@pop@filename@@}% -\def\@popfilename{\@expl@@@hook@curr@name@pop@@ - \expandafter\@p@pfilename\@currnamestack\@nil - \@expl@pop@filename@@} -\EndIncludeInRelease - -\IncludeInRelease{2020/02/02}{\@popfilename}% - {Add \@expl@push@filename@@}% -\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil - \@expl@pop@filename@@} -\EndIncludeInRelease - -\IncludeInRelease{0000/00/00}{\@popfilename}% - {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% -\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} -\EndIncludeInRelease -\@onlypreamble\@popfilename -\IncludeInRelease{2020/10/01}% - {\IfFormatAtLeastTF}{Test format date}% -\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} -\let\IfPackageAtLeastTF\@ifpackagelater -\let\IfClassAtLeastTF\@ifclasslater -\@onlypreamble\IfFormatAtLeastTF -\@onlypreamble\IfPackageAtLeastTF -\@onlypreamble\IfClassAtLeastTF -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\IfFormatAtLeastTF}{Test format date}% -\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} -\let\IfPackageAtLeastTF\@ifpackagelater -\let\IfClassAtLeastTF\@ifclasslater -\EndIncludeInRelease -\IncludeInRelease{2018/04/01}% - {\@ifl@t@r}{Guard against bad input}% -\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} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@ifl@t@r}{Guard against bad input}% -\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} -\let\@parse@version@\@undefined -\EndIncludeInRelease -\IncludeInRelease{2017/01/01}% - {\@if@pti@ns}{Spaces in option clash check}% -\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} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@if@pti@ns}{Spaces in option clash check}% -\def\@if@pti@ns#1#2{% - \let\reserved@a\@firstoftwo - \@for\reserved@b:=#2\do{% - \ifx\reserved@b\@empty - \else - \expandafter\in@\expandafter - {\expandafter,\reserved@b,}{,#1,}% - \ifin@ - \else - \let\reserved@a\@secondoftwo + \ifnum\lastnodetype=\@ne + \setbox\tw@\lastbox\@tempswatrue + \setbox0\hbox{\unhbox\tw@\unskip\unskip\unpenalty + \ifnum\count@=1127 \else\ \fi + \unhbox0}% + \count@\z@ \fi - \fi - }% - \reserved@a} + \if@tempswa + \repeat + \hbadness\z@ + \hsize\maxdimen + \showboxdepth\z@ + \tolerance\m@ne + \hyphenpenalty\z@ + \noindent\unhbox\z@ +}} +\fi \EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@pr@videpackage}{Allow for package subsitution}% -\def\@pr@videpackage[#1]{% - \expandafter\protected@xdef % <-- protected... - \csname ver@\@currname.\@currext\endcsname{#1}% Loaded package - \expandafter\let - \csname ver@\@currpkg@reqd\expandafter\endcsname % Requested package - \csname ver@\@currname.\@currext\endcsname - \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 } +\IncludeInRelease{0000/00/00}{\showhyphens}% + {XeTeX support for \showhyphens}% +\gdef\showhyphens#1{% + \setbox0\vbox{% + \color@begingroup + \everypar{}% + \parfillskip\z@skip\hsize\maxdimen + \normalfont + \pretolerance\m@ne\tolerance\m@ne + \hbadness\z@\showboxdepth\z@\ #1% + \color@endgroup}} \EndIncludeInRelease +%%% From File: ltfssaxes.dtx +%% Copyright (C) 1999-2020 Frank Mittelbach \IncludeInRelease{2020/02/02}% - {\@pr@videpackage}{Protection for package info}% - -\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} - -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@pr@videpackage}{Protection for package info}% + {\DeclareFontSeriesChangeRule}{Series change rules}% +\def\DeclareFontSeriesChangeRule#1#2#3#4{% + \@namedef{series@#1@#2}{{#3}{#4}}} +\DeclareFontSeriesChangeRule {bc}{b}{bc}{} +\DeclareFontSeriesChangeRule {bc}{c}{bc}{} +\DeclareFontSeriesChangeRule {bc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {bc}{ec}{bec} {bc} +\DeclareFontSeriesChangeRule {bc}{el}{elc}{} +\DeclareFontSeriesChangeRule {bc}{l}{lc}{} +\DeclareFontSeriesChangeRule {bc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {bc}{sc}{bsc} {bc} +\DeclareFontSeriesChangeRule {bc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {bc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {bc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {bc}{x}{bx}{} +\DeclareFontSeriesChangeRule {bx}{b}{bx}{} +\DeclareFontSeriesChangeRule {bx}{c} {bc} {bx} %<----- +\DeclareFontSeriesChangeRule {bx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {bx}{ec} {bec} {bx} %<----- +\DeclareFontSeriesChangeRule {bx}{el}{elx}{} +\DeclareFontSeriesChangeRule {bx}{l}{lx}{} +\DeclareFontSeriesChangeRule {bx}{sb} {sbx} {} +\DeclareFontSeriesChangeRule {bx}{sc} {bsc} {bx} %<----- +\DeclareFontSeriesChangeRule {bx}{sl}{slx} {} +\DeclareFontSeriesChangeRule {bx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {bx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {bx}{x}{bx}{} +\DeclareFontSeriesChangeRule {b}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {b}{c} {bc} {b} %<----- +\DeclareFontSeriesChangeRule {b}{ec} {bec} {b} %<----- +\DeclareFontSeriesChangeRule {b}{sb} {sb} {b} %<----- +\DeclareFontSeriesChangeRule {b}{sc} {bsc} {b} %<----- +\DeclareFontSeriesChangeRule {b}{x} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {c}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {c}{b}{bc}{} +\DeclareFontSeriesChangeRule {c}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {c}{el}{elc}{} +\DeclareFontSeriesChangeRule {c}{l}{lc}{} +\DeclareFontSeriesChangeRule {c}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {c}{sl}{slc}{} +\DeclareFontSeriesChangeRule {c}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {c}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {c}{x}{x}{m} %<----- +\DeclareFontSeriesChangeRule {ebc}{b}{bc}{} +\DeclareFontSeriesChangeRule {ebc}{c}{ebc}{} +\DeclareFontSeriesChangeRule {ebc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {ebc}{ec}{ebec}{ebc} +\DeclareFontSeriesChangeRule {ebc}{el}{elc}{} +\DeclareFontSeriesChangeRule {ebc}{l}{lc}{} +\DeclareFontSeriesChangeRule {ebc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {ebc}{sc}{ebsc}{ebc} +\DeclareFontSeriesChangeRule {ebc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {ebc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {ebc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {ebc}{x}{ebx}{} +\DeclareFontSeriesChangeRule {ec}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {ec}{b}{bec}{} +\DeclareFontSeriesChangeRule {ec}{eb}{ebec}{} +\DeclareFontSeriesChangeRule {ec}{el}{elec}{} +\DeclareFontSeriesChangeRule {ec}{l}{lec}{} +\DeclareFontSeriesChangeRule {ec}{sb}{sbec}{} +\DeclareFontSeriesChangeRule {ec}{sl}{slec}{} +\DeclareFontSeriesChangeRule {ec}{ub}{ubec}{} +\DeclareFontSeriesChangeRule {ec}{ul}{ulec}{} +\DeclareFontSeriesChangeRule {ec}{x}{x}{m} %<----- +\DeclareFontSeriesChangeRule {sc}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {sc}{b}{bsc}{} +\DeclareFontSeriesChangeRule {sc}{eb}{ebsc}{} +\DeclareFontSeriesChangeRule {sc}{el}{elsc}{} +\DeclareFontSeriesChangeRule {sc}{l}{lsc}{} +\DeclareFontSeriesChangeRule {sc}{sb}{sbsc}{} +\DeclareFontSeriesChangeRule {sc}{sl}{slsc}{} +\DeclareFontSeriesChangeRule {sc}{ub}{ubsc}{} +\DeclareFontSeriesChangeRule {sc}{ul}{ulsc}{} +\DeclareFontSeriesChangeRule {sc}{x}{x}{m} %<----- +\DeclareFontSeriesChangeRule {ebx}{b}{bx}{} +\DeclareFontSeriesChangeRule {ebx}{c}{ebc}{} +\DeclareFontSeriesChangeRule {ebx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {ebx}{ec}{ebec}{} +\DeclareFontSeriesChangeRule {ebx}{el}{elx}{} +\DeclareFontSeriesChangeRule {ebx}{l}{lx}{} +\DeclareFontSeriesChangeRule {ebx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {ebx}{sc}{ebsc}{} +\DeclareFontSeriesChangeRule {ebx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {ebx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {ebx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {ebx}{x}{ebx}{} +\DeclareFontSeriesChangeRule {eb}{c}{ebc}{} +\DeclareFontSeriesChangeRule {eb}{ec}{ebec}{} +\DeclareFontSeriesChangeRule {eb}{sc}{ebsc}{} +\DeclareFontSeriesChangeRule {eb}{x}{ebx}{} +\DeclareFontSeriesChangeRule {elc}{b}{bc}{} +\DeclareFontSeriesChangeRule {elc}{c}{elc}{} +\DeclareFontSeriesChangeRule {elc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {elc}{ec}{elec}{} +\DeclareFontSeriesChangeRule {elc}{el}{elc}{} +\DeclareFontSeriesChangeRule {elc}{l}{lc}{} +\DeclareFontSeriesChangeRule {elc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {elc}{sc}{elsc}{} +\DeclareFontSeriesChangeRule {elc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {elc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {elc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {elc}{x}{elx}{} +\DeclareFontSeriesChangeRule {elx}{b}{bx}{} +\DeclareFontSeriesChangeRule {elx}{c}{elc}{} +\DeclareFontSeriesChangeRule {elx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {elx}{ec}{elec}{} +\DeclareFontSeriesChangeRule {elx}{el}{elx}{} +\DeclareFontSeriesChangeRule {elx}{l}{lx}{} +\DeclareFontSeriesChangeRule {elx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {elx}{sc}{elsc}{} +\DeclareFontSeriesChangeRule {elx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {elx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {elx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {elx}{x}{elx}{} +\DeclareFontSeriesChangeRule {el}{c}{elc}{} +\DeclareFontSeriesChangeRule {el}{ec}{elec}{} +\DeclareFontSeriesChangeRule {el}{sc}{elsc}{} +\DeclareFontSeriesChangeRule {el}{x}{elx}{} +\DeclareFontSeriesChangeRule {lc}{b}{bc}{} +\DeclareFontSeriesChangeRule {lc}{c}{lc}{} +\DeclareFontSeriesChangeRule {lc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {lc}{ec}{lec}{} +\DeclareFontSeriesChangeRule {lc}{el}{elc}{} +\DeclareFontSeriesChangeRule {lc}{l}{lc}{} +\DeclareFontSeriesChangeRule {lc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {lc}{sc}{lsc}{} +\DeclareFontSeriesChangeRule {lc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {lc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {lc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {lc}{x}{lx}{} +\DeclareFontSeriesChangeRule {lx}{b}{bx}{} +\DeclareFontSeriesChangeRule {lx}{c}{lc}{} +\DeclareFontSeriesChangeRule {lx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {lx}{ec}{lec}{} +\DeclareFontSeriesChangeRule {lx}{el}{elx}{} +\DeclareFontSeriesChangeRule {lx}{l}{lx}{} +\DeclareFontSeriesChangeRule {lx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {lx}{sc}{lsc}{} +\DeclareFontSeriesChangeRule {lx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {lx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {lx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {lx}{x}{lx}{} +\DeclareFontSeriesChangeRule {l}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {l}{b} {b} {bx} %<----- +\DeclareFontSeriesChangeRule {l}{c} {lc} {l} % ? %<----- +\DeclareFontSeriesChangeRule {l}{ec} {lec} {l} % ? %<----- +\DeclareFontSeriesChangeRule {l}{sb} {sb} {b} % ? %<----- +\DeclareFontSeriesChangeRule {l}{sc} {lsc} {l} % ? %<----- +\DeclareFontSeriesChangeRule {l}{x} {lx} {l} % ? %<----- +\DeclareFontSeriesChangeRule {m}{bx} {bx} {b} %<----- +\DeclareFontSeriesChangeRule {m}{b} {b} {bx} %<----- +\DeclareFontSeriesChangeRule {m}{c} {c} {m} %<----- +\DeclareFontSeriesChangeRule {m}{ec} {ec} {m} %<----- +\DeclareFontSeriesChangeRule {m}{l} {l} {m} %<----- +\DeclareFontSeriesChangeRule {m}{sb} {sb} {b} %<----- +\DeclareFontSeriesChangeRule {m}{sc} {sc} {m} %<----- +\DeclareFontSeriesChangeRule {m}{x} {x} {m} %<----- +\DeclareFontSeriesChangeRule {sbc}{b}{bc}{} +\DeclareFontSeriesChangeRule {sbc}{c}{sbc}{} +\DeclareFontSeriesChangeRule {sbc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {sbc}{ec}{sbec}{sbc} +\DeclareFontSeriesChangeRule {sbc}{el}{elc}{} +\DeclareFontSeriesChangeRule {sbc}{l}{lc}{} +\DeclareFontSeriesChangeRule {sbc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {sbc}{sc}{sbsc}{sbc} +\DeclareFontSeriesChangeRule {sbc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {sbc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {sbc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {sbc}{x}{sbx}{} +\DeclareFontSeriesChangeRule {sbx}{b}{bx}{} +\DeclareFontSeriesChangeRule {sbx}{c}{sbc}{} +\DeclareFontSeriesChangeRule {sbx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {sbx}{ec}{sbec}{} +\DeclareFontSeriesChangeRule {sbx}{el}{elx}{} +\DeclareFontSeriesChangeRule {sbx}{l}{lx}{} +\DeclareFontSeriesChangeRule {sbx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {sbx}{sc}{sbsc}{} +\DeclareFontSeriesChangeRule {sbx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {sbx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {sbx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {sbx}{x}{sbx}{} +\DeclareFontSeriesChangeRule {sb}{c} {sbc} {bc} %? %<----- +\DeclareFontSeriesChangeRule {sb}{ec} {sbec} {sbc} %? %<----- +\DeclareFontSeriesChangeRule {sb}{sc} {sbsc} {sbc} %? %<----- +\DeclareFontSeriesChangeRule {sb}{x} {sbx} {bx} %? %<----- +\DeclareFontSeriesChangeRule {slc}{b}{bc}{} +\DeclareFontSeriesChangeRule {slc}{c}{slc}{} +\DeclareFontSeriesChangeRule {slc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {slc}{ec}{slec}{} +\DeclareFontSeriesChangeRule {slc}{el}{elc}{} +\DeclareFontSeriesChangeRule {slc}{l}{lc}{} +\DeclareFontSeriesChangeRule {slc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {slc}{sc}{slsc}{} +\DeclareFontSeriesChangeRule {slc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {slc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {slc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {slc}{x}{slx}{} +\DeclareFontSeriesChangeRule {slx}{b}{bx}{} +\DeclareFontSeriesChangeRule {slx}{c}{slc}{} +\DeclareFontSeriesChangeRule {slx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {slx}{ec}{slec}{} +\DeclareFontSeriesChangeRule {slx}{el}{elx}{} +\DeclareFontSeriesChangeRule {slx}{l}{lx}{} +\DeclareFontSeriesChangeRule {slx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {slx}{sc}{slsc}{} +\DeclareFontSeriesChangeRule {slx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {slx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {slx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {slx}{x}{slx}{} +\DeclareFontSeriesChangeRule {sl}{c}{slc}{} +\DeclareFontSeriesChangeRule {sl}{ec}{slec}{} +\DeclareFontSeriesChangeRule {sl}{sc}{slsc}{} +\DeclareFontSeriesChangeRule {sl}{x}{slx}{} +\DeclareFontSeriesChangeRule {ubc}{b}{bc}{} +\DeclareFontSeriesChangeRule {ubc}{c}{ubc}{} +\DeclareFontSeriesChangeRule {ubc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {ubc}{ec}{ubec}{} +\DeclareFontSeriesChangeRule {ubc}{el}{elc}{} +\DeclareFontSeriesChangeRule {ubc}{l}{lc}{} +\DeclareFontSeriesChangeRule {ubc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {ubc}{sc}{ubsc}{} +\DeclareFontSeriesChangeRule {ubc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {ubc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {ubc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {ubc}{x}{ubx}{} +\DeclareFontSeriesChangeRule {ubx}{b}{bx}{} +\DeclareFontSeriesChangeRule {ubx}{c}{ubc}{} +\DeclareFontSeriesChangeRule {ubx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {ubx}{ec}{ubec}{} +\DeclareFontSeriesChangeRule {ubx}{el}{elx}{} +\DeclareFontSeriesChangeRule {ubx}{l}{lx}{} +\DeclareFontSeriesChangeRule {ubx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {ubx}{sc}{ubsc}{} +\DeclareFontSeriesChangeRule {ubx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {ubx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {ubx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {ubx}{x}{ubx}{} +\DeclareFontSeriesChangeRule {ub}{c}{ubc}{} +\DeclareFontSeriesChangeRule {ub}{ec}{ubec}{} +\DeclareFontSeriesChangeRule {ub}{sc}{ubsc}{} +\DeclareFontSeriesChangeRule {ub}{x}{ubx}{} +\DeclareFontSeriesChangeRule {ulc}{b}{bc}{} +\DeclareFontSeriesChangeRule {ulc}{c}{ulc}{} +\DeclareFontSeriesChangeRule {ulc}{eb}{ebc}{} +\DeclareFontSeriesChangeRule {ulc}{ec}{ulec}{ulc} +\DeclareFontSeriesChangeRule {ulc}{el}{elc}{} +\DeclareFontSeriesChangeRule {ulc}{l}{lc}{} +\DeclareFontSeriesChangeRule {ulc}{sb}{sbc}{} +\DeclareFontSeriesChangeRule {ulc}{sc}{ulsc}{ulc} +\DeclareFontSeriesChangeRule {ulc}{sl}{slc}{} +\DeclareFontSeriesChangeRule {ulc}{ub}{ubc}{} +\DeclareFontSeriesChangeRule {ulc}{ul}{ulc}{} +\DeclareFontSeriesChangeRule {ulc}{x}{ulx}{} +\DeclareFontSeriesChangeRule {ulx}{b}{bx}{} +\DeclareFontSeriesChangeRule {ulx}{c}{ulc}{} +\DeclareFontSeriesChangeRule {ulx}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {ulx}{ec}{ulec}{} +\DeclareFontSeriesChangeRule {ulx}{el}{elx}{} +\DeclareFontSeriesChangeRule {ulx}{l}{lx}{} +\DeclareFontSeriesChangeRule {ulx}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {ulx}{sc}{ulsc}{} +\DeclareFontSeriesChangeRule {ulx}{sl}{slx}{} +\DeclareFontSeriesChangeRule {ulx}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {ulx}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {ulx}{x}{ulx}{} +\DeclareFontSeriesChangeRule {ul}{c}{ulc}{} +\DeclareFontSeriesChangeRule {ul}{ec}{ulec}{} +\DeclareFontSeriesChangeRule {ul}{sc}{ulsc}{} +\DeclareFontSeriesChangeRule {ul}{x}{ulx}{} +\DeclareFontSeriesChangeRule {x}{b}{bx}{} +\DeclareFontSeriesChangeRule {x}{c}{c}{} +\DeclareFontSeriesChangeRule {x}{eb}{ebx}{} +\DeclareFontSeriesChangeRule {x}{ec}{ec}{} +\DeclareFontSeriesChangeRule {x}{el}{elx}{} +\DeclareFontSeriesChangeRule {x}{l}{lx}{} +\DeclareFontSeriesChangeRule {x}{sb}{sbx}{} +\DeclareFontSeriesChangeRule {x}{sc}{sc}{} +\DeclareFontSeriesChangeRule {x}{sl}{slx}{} +\DeclareFontSeriesChangeRule {x}{ub}{ubx}{} +\DeclareFontSeriesChangeRule {x}{ul}{ulx}{} +\DeclareFontSeriesChangeRule {bc}{m?}{c}{} +\DeclareFontSeriesChangeRule {bec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {bsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {bx}{m?}{x}{} +\DeclareFontSeriesChangeRule {b}{m?}{m}{} +\DeclareFontSeriesChangeRule {c}{m?}{c}{} +\DeclareFontSeriesChangeRule {ebc}{m?}{c}{} +\DeclareFontSeriesChangeRule {ebec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {ebsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {ebx}{m?}{x}{} +\DeclareFontSeriesChangeRule {eb}{m?}{m}{} +\DeclareFontSeriesChangeRule {ec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {elc}{m?}{c}{} +\DeclareFontSeriesChangeRule {elec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {elsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {elx}{m?}{x}{} +\DeclareFontSeriesChangeRule {el}{m?}{m}{} +\DeclareFontSeriesChangeRule {lc}{m?}{c}{} +\DeclareFontSeriesChangeRule {lec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {lsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {lx}{m?}{x}{} +\DeclareFontSeriesChangeRule {l}{m?}{m}{} +\DeclareFontSeriesChangeRule {m}{m?}{m}{} +\DeclareFontSeriesChangeRule {sbc}{m?}{c}{} +\DeclareFontSeriesChangeRule {sbec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {sbsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {sbx}{m?}{x}{} +\DeclareFontSeriesChangeRule {sb}{m?}{m}{} +\DeclareFontSeriesChangeRule {sc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {slc}{m?}{c}{} +\DeclareFontSeriesChangeRule {slec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {slsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {slx}{m?}{x}{} +\DeclareFontSeriesChangeRule {sl}{m?}{m}{} +\DeclareFontSeriesChangeRule {ubc}{m?}{c}{} +\DeclareFontSeriesChangeRule {ubec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {ubsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {ubx}{m?}{x}{} +\DeclareFontSeriesChangeRule {ub}{m?}{ub}{} +\DeclareFontSeriesChangeRule {ulc}{m?}{c}{} +\DeclareFontSeriesChangeRule {ulec}{m?}{ec}{} +\DeclareFontSeriesChangeRule {ulsc}{m?}{sc}{} +\DeclareFontSeriesChangeRule {ulx}{m?}{x}{} +\DeclareFontSeriesChangeRule {ul}{m?}{m}{} +\DeclareFontSeriesChangeRule {x}{m?}{x}{} +\DeclareFontSeriesChangeRule {bc}{?m}{b}{} +\DeclareFontSeriesChangeRule {bec}{?m}{b}{} +\DeclareFontSeriesChangeRule {bsc}{?m}{b}{} +\DeclareFontSeriesChangeRule {bsc}{?m}{b}{} +\DeclareFontSeriesChangeRule {bx}{?m}{b}{} +\DeclareFontSeriesChangeRule {b}{?m}{b}{} +\DeclareFontSeriesChangeRule {c}{?m}{m}{} +\DeclareFontSeriesChangeRule {ebc}{?m}{eb}{} +\DeclareFontSeriesChangeRule {ebec}{?m}{eb}{} +\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{} +\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{} +\DeclareFontSeriesChangeRule {ebx}{?m}{eb}{} +\DeclareFontSeriesChangeRule {eb}{?m}{eb}{} +\DeclareFontSeriesChangeRule {ec}{?m}{m}{} +\DeclareFontSeriesChangeRule {elc}{?m}{el}{} +\DeclareFontSeriesChangeRule {elec}{?m}{el}{} +\DeclareFontSeriesChangeRule {elsc}{?m}{el}{} +\DeclareFontSeriesChangeRule {elsc}{?m}{el}{} +\DeclareFontSeriesChangeRule {elx}{?m}{el}{} +\DeclareFontSeriesChangeRule {el}{?m}{el}{} +\DeclareFontSeriesChangeRule {lc}{?m}{l}{} +\DeclareFontSeriesChangeRule {lec}{?m}{l}{} +\DeclareFontSeriesChangeRule {lsc}{?m}{l}{} +\DeclareFontSeriesChangeRule {lsc}{?m}{l}{} +\DeclareFontSeriesChangeRule {lx}{?m}{l}{} +\DeclareFontSeriesChangeRule {l}{?m}{l}{} +\DeclareFontSeriesChangeRule {m}{?m}{m}{} +\DeclareFontSeriesChangeRule {sbc}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sbec}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sbx}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sb}{?m}{sb}{} +\DeclareFontSeriesChangeRule {sc}{?m}{m}{} +\DeclareFontSeriesChangeRule {sc}{?m}{m}{} +\DeclareFontSeriesChangeRule {slc}{?m}{sl}{} +\DeclareFontSeriesChangeRule {slec}{?m}{sl}{} +\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{} +\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{} +\DeclareFontSeriesChangeRule {slx}{?m}{sl}{} +\DeclareFontSeriesChangeRule {sl}{?m}{sl}{} +\DeclareFontSeriesChangeRule {ubc}{?m}{ub}{} +\DeclareFontSeriesChangeRule {ubec}{?m}{ub}{} +\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{} +\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{} +\DeclareFontSeriesChangeRule {ubx}{?m}{ub}{} +\DeclareFontSeriesChangeRule {ub}{?m}{m}{} +\DeclareFontSeriesChangeRule {ulc}{?m}{ul}{} +\DeclareFontSeriesChangeRule {ulec}{?m}{ul}{} +\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{} +\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{} +\DeclareFontSeriesChangeRule {ulx}{?m}{ul}{} +\DeclareFontSeriesChangeRule {ul}{?m}{ul}{} +\DeclareFontSeriesChangeRule {x}{?m}{m}{} -\def\@pr@videpackage[#1]{% - \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}% - \ifx\@currext\@clsextension - \typeout{Document Class: \@gtempa\space#1}% - \else - \wlog{Package: \@gtempa\space#1}% - \fi} -\let\protected@wlog\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}{\@pass@ptions} - {Add file replacement in \@pass@ptions}% -\def\@pass@ptions#1#2#3{% - \@expl@@@filehook@set@curr@file@@nNN - {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% - \reserved@a\reserved@b - \expandafter\xdef\csname opt@\reserved@a\endcsname{% - \@ifundefined{opt@\reserved@a}\@empty - {\csname opt@\reserved@a\endcsname,}% - \zap@space#2 \@empty}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\@pass@ptions} - {\@pass@ptions}% -\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}} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@process@pti@ns}{Unused options issue}% -\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 -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@process@pti@ns}{Unused options issue}% +\newif\if@forced@series +\DeclareRobustCommand\fontseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}} +\DeclareRobustCommand\fontseries[1]{\@forced@seriesfalse\merge@font@series{#1}} -\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}} -\EndIncludeInRelease -\IncludeInRelease{2017/01/01}% - {\ExecuteOptions}{Spaces in \ExecuteOptions}% -\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} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\ExecuteOptions}{Spaces in \ExecuteOptions}% -\def\ExecuteOptions#1{% - \def\reserved@a##1\@nil{% - \@for\CurrentOption:=#1\do - {\csname ds@\CurrentOption\endcsname}% - \edef\CurrentOption{##1}}% - \expandafter\reserved@a\CurrentOption\@nil} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\RequirePackageWithOptions}{Unused options issue}% -\def\RequirePackageWithOptions{% - \AtEndOfPackage{\expandafter\let - \csname unprocessedoptions-\@currname.\@currext\endcsname - \relax}% - \@loadwithoptions\@pkgextension\RequirePackage} -\@onlypreamble\RequirePackageWithOptions -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\RequirePackageWithOptions}{Unused options issue}% +\def\merge@font@series#1{% + \expandafter\expandafter\expandafter + \merge@font@series@ + \csname series@\f@series @#1\endcsname + {#1}% + \@nil +} -\def\RequirePackageWithOptions{% - \AtEndOfPackage{\let\@unprocessedoptions\relax}% - \@loadwithoptions\@pkgextension\RequirePackage} -\EndIncludeInRelease -\IncludeInRelease{2017/01/01}% - {\@fileswith@pti@ns}{ifx tests in \@fileswith@pti@ns}% -\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 +\def\merge@font@series@#1#2#3\@nil{% + \def\reserved@a{#3}% + \ifx\reserved@a\@empty + \set@target@series{#2}% \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} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@fileswith@pti@ns}{ifx tests in \@fileswith@pti@ns}% -\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}% + \maybe@load@fontshape + \edef\reserved@a{\f@encoding /\f@family /#1/\f@shape}% + \ifcsname \reserved@a \endcsname + \set@target@series{#1}% \else - \def\reserved@a{% - \@onefilewithoptions#3[{#2}][{#4}]#1}% + \ifcsname \f@encoding /\f@family /#2/\f@shape \endcsname + \set@target@series{#2}% + \@font@shape@subst@warning + \else + \set@target@series{#3}% + \@font@shape@subst@warning + \fi \fi - \else - \def\reserved@b##1,{% - \ifx\@nil##1\relax\else - \ifx\relax##1\relax\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,\@nil,}% \fi - \reserved@a} -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@onefilewithoptions}{Hooks and unused options issue}% -\def\@onefilewithoptions#1[#2][#3]#4{% - \@pushfilename - \xdef\@currname{#1}% - \global\let\@currext#4% - \@ifl@aded\@currext\@currname - {\@if@ptions\@currext{\@currname}{#2}{}% - {\@latex@error - {Option clash for \@cls@pkg\space \@currname}% - {The package \@currname\space has already been loaded - with options:\MessageBreak - \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak - There has now been an attempt to load it - with options\MessageBreak - \space\space[#2]\MessageBreak - Adding the global options:\MessageBreak - \space\space - \@ptionlist{\@currname.\@currext},#2\MessageBreak - to your \noexpand\documentclass declaration may fix this.% - \MessageBreak - Try typing \space <return> \space to proceed.}}% - \@firstofone}% - {\makeatletter - \@reset@ptions - \IfFileExists{\@currname.\@currext}{}% - {\@missing@onefilewithoptions{#2}}% - \ifx\@currname\@empty - \expandafter\@gobble - \else - \@disable@packageload@do{\@currname.\@currext}% - {\@expl@@@filehook@file@push@@ - \set@curr@file{\@currname.\@currext}% - \@filehook@set@CurrentFile - \expandafter\@swaptwoargs\expandafter - {\expandafter{\@currpkg@reqd}}% - {% < - \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}% - \def\@currpkg@reqd%{\@currpkg@reqd} - }% > - \@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} -\let\@currpkg@reqd\@empty -\@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}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@onefilewithoptions}{Hooks and unused options issue}% - -\def\load@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} - -\let \load@onefile@withoptions \@undefined -\let \@missing@onefilewithoptions \@undefined - -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\AtBeginDocument}{Use hook system}% -\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}} -\DeclareRobustCommand\AtEndDocument {\AddToHook{enddocument}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\AtBeginDocument}{Use hook system}% - -\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook} -\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook} - -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\filec@ntents}{Define \q@curr@file directly (gh/220)}% -\def\filecontents{\@tempswatrue\@fileswtrue - \@ifnextchar[\filec@ntents@opt\filec@ntents -} -\@namedef{filecontents*}{\@tempswafalse\@fileswtrue - \@ifnextchar[\filec@ntents@opt\filec@ntents } -\def\filec@ntents@opt[#1]{% - \edef\@fortmp{\zap@space#1 \@empty}% - \@for\reserved@a:=\@fortmp\do{% - \ifcsname filec@ntents@\reserved@a\endcsname - \csname filec@ntents@\reserved@a\endcsname - \else - \@latex@error{Unknown filecontents option \reserved@a}% - {Valid options are force (or overwrite), nosearch, noheader}% - \fi}% - \filec@ntents +\def\@font@shape@subst@warning{% + \edef\reserved@b{\curr@fontshape}% + \ifx\reserved@a\reserved@b \else + \@font@warning{Font shape `\reserved@a' undefined\MessageBreak + using `\reserved@b' instead}% + \fi } -\let\filec@ntents@force\@fileswfalse -\let\filec@ntents@overwrite\@fileswfalse % alternative name -\let\filec@ntents@noheader\@tempswafalse -\def\filec@ntents@nosearch{% - \let\filec@ntents@checkdir\@currdir - \def\filec@ntents@where{in current directory}} -\let\filec@ntents@checkdir\@empty -\def\filec@ntents@where{exists on the system} -\begingroup% -\@tempcnta=1 -\loop - \catcode\@tempcnta=12 % - \advance\@tempcnta\@ne % -\ifnum\@tempcnta<32 % -\repeat % -\catcode`\*=11 % -\catcode`\^^M\active% -\catcode`\^^L\active\let^^L\relax% -\catcode`\^^I\active% -\gdef\filec@ntents#1{% - \set@curr@file{\filec@ntents@checkdir#1}% - \edef\q@curr@file{"\@curr@file"}% - \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi% - \openin\@inputcheck\q@curr@file \space % - \ifeof\@inputcheck% - \@latex@warning@no@line% - {Writing file `\@currdir\@curr@file'}% - \ch@ck7\reserved@c\write\relax% - \immediate\openout\reserved@c\q@curr@file\relax% - \else% - \if@filesw% - \@latex@warning@no@line% - {File `\@curr@file' already \filec@ntents@where.\MessageBreak% - Not generating it from this source}% - \let\write\@gobbletwo% - \let\closeout\@gobble% - \else% - \edef\reserved@a{#1}% - \edef\reserved@a{\detokenize\expandafter{\reserved@a}}% - \edef\reserved@b{\detokenize\expandafter{\jobname}}% - \ifx\reserved@a\reserved@b% - \@fileswtrue% - \else% - \edef\reserved@b{\reserved@b\detokenize{.tex}}% - \ifx\reserved@a\reserved@b - \@fileswtrue% - \fi% - \fi% - \ch@ck7\reserved@c\write\relax% - \if@filesw% % Foul ... trying to overwrite \jobname! - \@latex@error{Trying to overwrite `\jobname.tex'}{You can't % - write to the file you are reading from!\MessageBreak% - Data is written to screen instead.}% - \else% - \@latex@warning@no@line% - {Writing or overwriting file `\@currdir\@curr@file'}% - \immediate\openout\reserved@c\q@curr@file\relax% - \fi% - \fi% - \fi% - \closein\@inputcheck% - \if@tempswa% - \immediate\write\reserved@c{% - \@percentchar\@percentchar\space% - \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J% - \@percentchar\@percentchar\space generated by the % - `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J% - \@percentchar\@percentchar\space from source `\jobname' on % - \number\year/\two@digits\month/\two@digits\day.^^J% - \@percentchar\@percentchar}% - \fi% - \let\do\@makeother\dospecials% - \count@ 128\relax% - \loop% - \catcode\count@ 11\relax% - \advance\count@ \@ne% - \ifnum\count@<\@cclvi% - \repeat% - \edef\E{\@backslashchar end\string{\@currenvir\string}}% - \edef\reserved@b{% - \def\noexpand\reserved@b% - ####1\E####2\E####3\relax}% - \reserved@b{% - \ifx\relax##3\relax% - \immediate\write\reserved@c{##1}% - \else% - \edef^^M{\noexpand\end{\@currenvir}}% - \ifx\relax##1\relax% - \else% - \@latex@warning{Writing text `##1' before % - \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}% - \immediate\write\reserved@c{##1}% - \fi% - \ifx\relax##2\relax% - \else% - \@latex@warning{% - Ignoring text `##2' after \string\end{\@currenvir}}% - \fi% - \fi% - ^^M}% - \catcode`\^^L\active% - \let\L\@undefined% - \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}% - \catcode`\^^I\active% - \let\I\@undefined% - \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}% - \catcode`\^^M\active% - \edef^^M##1^^M{% - \noexpand\reserved@b##1\E\E\relax}}% -\endgroup% -\EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\filec@ntents}{Spaces in file names + optional arg}% -\def\filecontents{\@tempswatrue\@fileswtrue - \@ifnextchar[\filec@ntents@opt\filec@ntents +\def\maybe@load@fontshape{\begingroup\try@load@fontshape\endgroup} +\def\set@target@series#1{% + \edef\f@series{#1}% + \series@maybe@drop@one@m\f@series\f@series } -\@namedef{filecontents*}{\@tempswafalse\@fileswtrue - \@ifnextchar[\filec@ntents@opt\filec@ntents +\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 + \edef#2{#1}% + \else + \edef#2{\expandafter\series@drop@one@m #1m\series@drop@one@m}% + \fi } -\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 +\newtoks\series@check@toks +\def\series@drop@one@m#1m#2m#3\series@drop@one@m{% + #1#2% } -\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% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\filec@ntents}{Spaces in file names + optional arg}% -\let\filec@ntents@opt \@undefined -\let\filec@ntents@force \@undefined -\let\filec@ntents@overwrite \@undefined -\let\filec@ntents@noheader \@undefined -\let\filec@ntents@nosearch \@undefined -\let\filec@ntents@checkdir \@undefined -\let\filec@ntents@where \@undefined - -\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{% - \openin\@inputcheck#1 % - \ifeof\@inputcheck% - \@latex@warning@no@line% - {Writing file `\@currdir#1'}% - \chardef\reserved@c15 % - \ch@ck7\reserved@c\write% - \immediate\openout\reserved@c#1\relax% - \else% - \closein\@inputcheck% - \@latex@warning@no@line% - {File `#1' already exists on the system.\MessageBreak% - Not generating it from this source}% - \let\write\@gobbletwo% - \let\closeout\@gobble% - \fi% - \if@tempswa% - \immediate\write\reserved@c{% - \@percentchar\@percentchar\space% - \expandafter\@gobble\string\LaTeX2e file `#1'^^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 #1}% - \immediate\write\reserved@c{##1}% - \fi% - \ifx\relax##2\relax% - \else% - \@latex@warning{% - Ignoring text `##2' after \string\end{\@currenvir}}% - \fi% - \fi% - ^^M}% - - \catcode`\^^L\active% - \let\L\@undefined% - \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}% - \catcode`\^^I\active% - \let\I\@undefined% - \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}% - \catcode`\^^M\active% - \edef^^M##1^^M{% - \noexpand\reserved@b##1\E\E\relax}}% -\endgroup% -\EndIncludeInRelease -%%% From File: ltspace.dtx -\IncludeInRelease{2019/10/01}% - {\pagebreak}{Make commands robust}% -\DeclareRobustCommand\pagebreak{\@testopt{\@no@pgbk-}4} -\DeclareRobustCommand\nopagebreak{\@testopt\@no@pgbk4} -\DeclareRobustCommand\linebreak{\@testopt{\@no@lnbk-}4} -\DeclareRobustCommand\nolinebreak{\@testopt\@no@lnbk4} -\DeclareRobustCommand\samepage{\interlinepenalty\@M - \postdisplaypenalty\@M - \interdisplaylinepenalty\@M - \@beginparpenalty\@M - \@endparpenalty\@M - \@itempenalty\@M - \@secpenalty\@M - \interfootnotelinepenalty\@M} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\pagebreak}{Make commands robust}% - -\kernel@make@fragile\pagebreak -\kernel@make@fragile\nopagebreak -\kernel@make@fragile\linebreak -\kernel@make@fragile\nolinebreak -\kernel@make@fragile\samepage - -\EndIncludeInRelease -\IncludeInRelease{2020/02/02}% - {\@normalcr}{Make robust}% -\protected\def\@normalcr{% - \let \reserved@e \relax - \let \reserved@f \relax - \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak - \@xnewline}% - \@xnewline} -\let\\\@normalcr -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@normalcr}{Make robust}% - -\DeclareRobustCommand\\{% - \let \reserved@e \relax - \let \reserved@f \relax - \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak - \@xnewline}% - \@xnewline} -\expandafter\let\expandafter\@normalcr - \csname\expandafter\@gobble\string\\ \endcsname - -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@vspace@calcify}{Add calc support}% -\def\@vspace@calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@vspace@calcify}{Add calc support}% - -\let\@vspace@calcify\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@newline}{\newline calc support}% -\def\@newline[#1]{\let \reserved@e \vadjust - \@gnewline {\@vspace@calcify{#1}}} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@newline}{\newline calc support}% +\def\DeclareFontShapeChangeRule #1#2#3#4{% + \@namedef{shape@#1@#2}{{#3}{#4}}} +\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} +\DeclareFontShapeChangeRule {n}{ulc} {n} {} +\DeclareFontShapeChangeRule {n}{up} {n} {} +\DeclareFontShapeChangeRule {it}{sl} {sl} {it} +\DeclareFontShapeChangeRule {it}{sc} {scit} {scsl} +\DeclareFontShapeChangeRule {it}{ulc} {it} {} +\DeclareFontShapeChangeRule {it}{up} {n} {} +\DeclareFontShapeChangeRule {sl}{it} {it} {sl} +\DeclareFontShapeChangeRule {sl}{sc} {scsl} {scit} +\DeclareFontShapeChangeRule {sl}{ulc} {sl} {} +\DeclareFontShapeChangeRule {sl}{up} {n} {} +\DeclareFontShapeChangeRule {sc}{it} {scit} {scsl} +\DeclareFontShapeChangeRule {sc}{sl} {scsl} {scit} +\DeclareFontShapeChangeRule {sc}{sw} {scsw} {sw} +\DeclareFontShapeChangeRule {sc}{ulc} {n} {} +\DeclareFontShapeChangeRule {sc}{up} {n} {} +\DeclareFontShapeChangeRule {scit}{it} {scit} {} +\DeclareFontShapeChangeRule {scit}{sl} {scsl} {scit} +\DeclareFontShapeChangeRule {scit}{sw} {scsw} {sc} % or scit? +\DeclareFontShapeChangeRule {scit}{sc} {scit} {} +\DeclareFontShapeChangeRule {scit}{ulc} {it} {} +\DeclareFontShapeChangeRule {scit}{up} {sc} {} +\DeclareFontShapeChangeRule {scsl}{it} {scit} {scsl} +\DeclareFontShapeChangeRule {scsl}{sl} {scsl} {} +\DeclareFontShapeChangeRule {scsl}{sw} {scsw} {sc} % or scsl? +\DeclareFontShapeChangeRule {scsl}{sc} {scsl} {} +\DeclareFontShapeChangeRule {scsl}{ulc} {sl} {} +\DeclareFontShapeChangeRule {scsl}{up} {sc} {} +\DeclareFontShapeChangeRule {scsw}{it} {scit} {scsw} +\DeclareFontShapeChangeRule {scsw}{sl} {scsl} {} +\DeclareFontShapeChangeRule {scsw}{sw} {scsw} {} +\DeclareFontShapeChangeRule {scsw}{sc} {scsw} {} +\DeclareFontShapeChangeRule {scsw}{ulc} {sw} {} +\DeclareFontShapeChangeRule {scsw}{up} {sc} {} +\DeclareFontShapeChangeRule {sw}{sc} {scsw} {} +\DeclareFontShapeChangeRule {sw}{ulc} {sw} {} +\DeclareFontShapeChangeRule {sw}{up} {n} {} +\DeclareRobustCommand\fontshape[1]{\merge@font@shape{#1}} +\DeclareRobustCommand\fontshapeforce[1]{\edef\f@shape{#1}} +\def\merge@font@shape#1{% + \expandafter\expandafter\expandafter + \merge@font@shape@ + \csname shape@\f@shape @#1\endcsname + {#1}% + \@nil +} -\def\@newline[#1]{\let \reserved@e \vadjust - \@gnewline {\vskip #1}} -\EndIncludeInRelease -\IncludeInRelease{2018/10/10}% - {\@esphack}{hyphenation and nobreak after space hack}% -\def\@esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \ifdim\lastskip=\z@ - \nobreak \hskip\z@skip - \fi - \ignorespaces - \fi - \else - \ifvmode - \if@nobreak\nobreak\else\if@noskipsec\nobreak\fi\fi - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2015/10/01}% - {\@esphack}{hyphenation and nobreak after space hack}% -\def\@esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \ifdim\lastskip=\z@ - \nobreak \hskip\z@skip - \fi - \ignorespaces - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@esphack}{hyphenation and nobreak after space hack}% -\def\@esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \nobreak \hskip\z@skip - \ignorespaces - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@esphack}{hyphenation and nobreak after space hack}% -\def\@esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \ignorespaces - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@Esphack}{hyphenation after space hack}% -\def\@Esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \nobreak \hskip\z@skip - \@ignoretrue - \ignorespaces - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@Esphack}{hyphenation after space hack}% -\def\@Esphack{% - \relax - \ifhmode - \spacefactor\@savsf - \ifdim\@savsk>\z@ - \@ignoretrue - \ignorespaces - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\addvspace}{\addvspace calc support}% -\def\addvspace#1{% - \ifvmode - \if@minipage\else - \ifdim \lastskip =\z@ - \@vspace@calcify{#1}% - \else - \setlength\@tempskipb{#1}% - \@xaddvskip - \fi - \fi +\def\merge@font@shape@#1#2#3\@nil{% + \def\reserved@a{#3}% + \ifx\reserved@a\@empty + \edef\f@shape{#2}% \else - \@noitemerr - \fi} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\addvspace}{\addvspace calc support}% - -\def\addvspace#1{% - \ifvmode - \if@minipage\else - \ifdim \lastskip =\z@ - \vskip #1\relax + \maybe@load@fontshape + \edef\reserved@a{\f@encoding /\f@family /\f@series/#1}% + \ifcsname \reserved@a\endcsname + \edef\f@shape{#1}% + \else + \ifcsname \f@encoding /\f@family /\f@series/#2\endcsname + \edef\f@shape{#2}% + \@font@shape@subst@warning \else - \@tempskipb#1\relax - \@xaddvskip + \edef\f@shape{#3}% + \@font@shape@subst@warning \fi - \fi - \else - \@noitemerr - \fi} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\addpenalty}{\addpenalty}% -\def\addpenalty#1{% - \ifvmode - \if@minipage - \else - \if@nobreak - \else - \ifdim\lastskip=\z@ - \penalty#1\relax - \else - \@tempskipb\lastskip - \begingroup - \@tempskipa\@tempskipb - \advance \@tempskipb - \ifdim\prevdepth>\maxdepth\maxdepth\else - \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi - \fi - \vskip -\@tempskipb - \penalty#1% - \ifdim\@tempskipa=\@tempskipb - \else - \advance\@tempskipb -\@tempskipa - \vskip \@tempskipb - \fi - \vskip \@tempskipa - \endgroup - \fi - \fi \fi - \else - \@noitemerr - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\addpenalty}{\addpenalty}% -\def\addpenalty#1{% - \ifvmode - \if@minipage - \else - \if@nobreak - \else - \ifdim\lastskip=\z@ - \penalty#1\relax - \else - \@tempskipb\lastskip - \vskip -\lastskip - \penalty#1% - \vskip\@tempskipb - \fi - \fi - \fi - \else - \@noitemerr - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@vspace}{Support calc in \vspace}% -\def\@vspace #1{% - \ifvmode - \@vspace@calcify{#1}% - \vskip\z@skip - \else - \@bsphack - \vadjust{\@restorepar - \@vspace@calcify{#1}% - \vskip\z@skip - }% - \@esphack - \fi} -\def\@vspacer#1{% - \ifvmode - \dimen@\prevdepth - \hrule \@height\z@ - \nobreak - \@vspace@calcify{#1}% - \vskip\z@skip - \prevdepth\dimen@ - \else - \@bsphack - \vadjust{\@restorepar - \hrule \@height\z@ - \nobreak - \@vspace@calcify{#1}% - \vskip\z@skip}% - \@esphack - \fi} + \fi +} +\protected\def\normalshape + {\not@math@alphabet\normalshape\relax + \fontshape\shapedefault\selectfont}% +\def\reinstall@nfss@defs{% + \protected\def\upshape + {\not@math@alphabet\upshape\relax + \fontshape\updefault\selectfont}% + \protected\def\slshape + {\not@math@alphabet\slshape\relax + \fontshape\sldefault\selectfont}% + \protected\def\scshape + {\not@math@alphabet\scshape\relax + \fontshape\scdefault\selectfont}% + \protected\def\itshape + {\not@math@alphabet\itshape\mathit + \fontshape\itdefault\selectfont}% + \protected\def\ulcshape + {\not@math@alphabet\ulcshape\relax + \fontshape{ulc}\selectfont}% + \protected\def\swshape + {\not@math@alphabet\swshape\relax + \fontshape\swdefault\selectfont}% + \protected\def\sscshape + {\not@math@alphabet\sscshape\relax + \fontshape\sscdefault\selectfont}% +} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\@vspace}{Support calc in \vspace}% + {\DeclareFontSeriesChangeRule}{Series change rules}% -\def\@vspace #1{% - \ifvmode - \vskip #1 - \vskip\z@skip - \else - \@bsphack - \vadjust{\@restorepar - \vskip #1 - \vskip\z@skip - }% - \@esphack - \fi} -\def\@vspacer#1{% - \ifvmode - \dimen@\prevdepth - \hrule \@height\z@ - \nobreak - \vskip #1 - \vskip\z@skip - \prevdepth\dimen@ - \else - \@bsphack - \vadjust{\@restorepar - \hrule \@height\z@ - \nobreak - \vskip #1 - \vskip\z@skip}% - \@esphack - \fi} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\@}{Space after \@}% -\def\@{\spacefactor\@m{}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@}{Space after \@}% -\def\@{\spacefactor\@m}% -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\@hspace}{Support calc with \hspace}% -\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@hspace}{Support calc with \hspace}% +\DeclareRobustCommand\fontseries[1]{\edef\f@series{#1}} +\DeclareRobustCommand\fontshape [1]{\edef\f@shape{#1}} +\let\fontseriesforce\@undefined +\let\fontshapeforce\@undefined +\let\DeclareFontSeriesChangeRule\@undefined +\let\merge@font@series\@undefined +\let\merge@font@series@\@undefined +\let\@font@shape@subst@warning\@undefined +\let\maybe@load@fontshape\@undefined +\let\set@target@series\@undefined +\let\series@maybe@drop@one@m\@undefined +\let\series@drop@one@m\@undefined +\let\DeclareFontShapeChangeRule\@undefined +\let\merge@font@shape\@undefined +\let\merge@font@shape@\@undefined +\let\normalshape\@undefined +\let\ulcshape\@undefined +\let\ulcdefault\@undefined +\let\swshape\@undefined +\let\swdefault\@undefined +\let\sscshape\@undefined +\let\sscdefault\@undefined +\let\normalshape\@undefined -\def\@hspace#1{\hskip #1\relax} -\EndIncludeInRelease -\IncludeInRelease{2018/12/01}% - {\thinspace}{Start LR-mode}% -\DeclareRobustCommand\enspace{\leavevmode@ifvmode\kern.5em } -\protected\def\leavevmode@ifvmode{\ifvmode\expandafter\indent\fi} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\thinspace}{Start LR-mode}% -\def\thinspace{\kern .16667em } -\def\negthinspace{\kern-.16667em } -\def\enspace{\kern.5em } -\let\leavevmode@ifvmode\@undefined -\EndIncludeInRelease -%%% From File: ltlogos.dtx -%%% From File: ltplain.dtx -\IncludeInRelease{2015/01/01}% - {\newcount}{Extended Allocation}% -\def\newcount {\e@alloc\count \countdef {\count10}\insc@unt\float@count} -\def\newdimen {\e@alloc\dimen \dimendef {\count11}\insc@unt\float@count} -\def\newskip {\e@alloc\skip \skipdef {\count12}\insc@unt\float@count} -\def\newmuskip - {\e@alloc\muskip\muskipdef{\count13}\m@ne\e@alloc@top} -\def\newbox {\e@alloc\box - {\ifnum\allocationnumber<\@cclvi - \expandafter\chardef - \else - \expandafter\e@alloc@chardef - \fi} - {\count14}\insc@unt\float@count} -\def\newtoks {\e@alloc\toks \toksdef{\count15}\m@ne\e@alloc@top} -\def\newread {\e@alloc\read \chardef{\count16}\m@ne\sixt@@n} -\ifx\directlua\@undefined - \def\newwrite {\e@alloc\write \chardef{\count17}\m@ne\sixt@@n} -\else - \def\newwrite {\e@alloc\write - {\ifnum\allocationnumber=18 - \advance\count17\@ne - \allocationnumber\count17 % - \fi - \global\chardef}% - {\count17}% - \m@ne - {128}} -\fi -\def\new@mathgroup - {\e@alloc\mathgroup\chardef{\count18}\m@ne\e@mathgroup@top} -\let\newfam\new@mathgroup -\ifx\directlua\@undefined - \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne\@cclvi} -\else - \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne{16384}} -\fi -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\newcount}{Extended Allocation}% -\def\newcount{\alloc@0\count\countdef\insc@unt} -\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} -\def\newskip{\alloc@2\skip\skipdef\insc@unt} -\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} -\def\newbox{\alloc@4\box\chardef\insc@unt} -\def\newtoks{\alloc@5\toks\toksdef\@cclvi} -\def\newread{\alloc@6\read\chardef\sixt@@n} -\def\newwrite{\alloc@7\write\chardef\sixt@@n} -\def\new@mathgroup{\alloc@8\fam\chardef\sixt@@n} -\def\newlanguage{\alloc@9\language\chardef\@cclvi} -\let\newfam\new@mathgroup -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\e@alloc@chardef}{Extended Allocation}% -\ifx\directlua\@undefined - \ifx\widowpenalties\@undefined - \mathchardef\e@alloc@top=255 - \let\e@alloc@chardef\chardef - \else - \mathchardef\e@alloc@top=32767 - \let\e@alloc@chardef\mathchardef - \fi -\else - \chardef\e@alloc@top=65535 - \let\e@alloc@chardef\chardef -\fi -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\e@alloc@chardef}{Extended Allocation}% -\let\e@alloc@top\@undefined -\let\e@alloc@chardef\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\e@mathgroup@top}{Extended Allocation}% -\ifx\Umathcode\@undefined - \chardef\e@mathgroup@top=16 -\else - \chardef\e@mathgroup@top=256 -\fi -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\e@mathgroup@top}{Extended Allocation}% -\let\e@mathgroup@top\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\e@alloc}{Extended Allocation}% -\def\e@alloc#1#2#3#4#5#6{% - \global\advance#3\@ne - \e@ch@ck{#3}{#4}{#5}#1% - \allocationnumber#3\relax - \global#2#6\allocationnumber - \wlog{\string#6=\string#1\the\allocationnumber}}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\e@alloc}{Extended Allocation}% -\let\e@alloc\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/10/01} - {\e@ch@ck}{Extended Allocation (checking)}% -\gdef\e@ch@ck#1#2#3#4{% - \ifnum#1<#2\else - \ifnum#1=#2\relax - \global#1\@cclvi - \ifx\count#4\global\advance#1 10 \fi - \fi - \ifnum#1<#3\relax - \else - \errmessage{No room for a new \string#4}% - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\e@ch@ck}{Extended Allocation (checking)}% -\gdef\e@ch@ck#1#2#3#4{% - \ifnum#1<#2\else - \ifnum#1=#2\relax - #1\@cclvi - \ifx\count#4\advance#1 10 \fi - \fi - \ifnum#1<#3\relax - \else - \errmessage{No room for a new #4}% - \fi - \fi}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\e@ch@ck}{Extended Allocation (checking)}% -\let\e@ch@ck\@undefined -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}% - {\extrafloats}{Extra floats}% -\let\float@count\e@alloc@top -\ifx\numexpr\@undefined -\def\extrafloats#1{% -\count@#1\relax -\ifnum\count@>\z@ -\newinsert\reserved@a -\global\expandafter\chardef - \csname bx@\the\allocationnumber\endcsname\allocationnumber -\@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}% -\advance\count@\m@ne -\expandafter\extrafloats -\expandafter\count@ -\fi -}% -\else -\def\extrafloats#1{% -\ifnum#1>\z@ -\count@\numexpr\float@count-1\relax - \ch@ck0\count@\count - \ch@ck1\count@\dimen - \ch@ck2\count@\skip - \ch@ck4\count@\box -\global\e@alloc@chardef\float@count\count@ -\global\expandafter\e@alloc@chardef - \csname bx@\the\float@count\endcsname\float@count -\@cons\@freelist{\csname bx@\the\float@count\endcsname}% -\expandafter -\extrafloats\expandafter{\numexpr#1-1\relax}% -\fi}% -\fi +\let\reinstall@nfss@defs\relax \EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\extrafloats}{Extra floats}% -\let\float@count\@undefined -\let\extrafloats\@undefined +\IncludeInRelease{2020/10/01}% + {\reinstall@nfss@defs}{NFSS series init}% +\g@addto@macro\@kernel@after@begindocument@before + {\reinstall@nfss@defs\init@series@setup} \EndIncludeInRelease -\IncludeInRelease{2020/10/01} - {\alloc@}{emulate alloc@}% -\def\alloc@#1#2#3#4{\e@alloc#2#3{\count1#1}#4\float@count} +\IncludeInRelease{2020/02/02}% + {\reinstall@nfss@defs}{NFSS series init}% +\AtBeginDocument{\reinstall@nfss@defs\init@series@setup} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\alloc@}{emulate alloc@}% -\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne - \ch@ck#1#4#2% - \allocationnumber\count1#1% - \global#3#5\allocationnumber - \wlog{\string#5=\string#2\the\allocationnumber}} + {\reinstall@nfss@defs}{NFSS series init}% \EndIncludeInRelease -\IncludeInRelease{2015/10/01} - {\newinsert}{Extended \newinsert}% -\ifx\numexpr\@undefined -\def\newinsert#1{\global\advance\insc@unt \m@ne - \ch@ck0\insc@unt\count - \ch@ck1\insc@unt\dimen - \ch@ck2\insc@unt\skip - \ch@ck4\insc@unt\box - \allocationnumber\insc@unt - \global\chardef#1\allocationnumber - \wlog{\string#1=\string\insert\the\allocationnumber}} -\else -\ifx\directlua\@undefined - \chardef\e@insert@top255 -\else - \chardef\e@insert@top\e@alloc@top -\fi -\def\newinsert#1{% -\@tempswafalse -\global\advance\insc@unt\m@ne -\ifnum\count10<\insc@unt -\ifnum\count11<\insc@unt -\ifnum\count12<\insc@unt -\ifnum\count14<\insc@unt - \@tempswatrue -\fi\fi\fi\fi -\if@tempswa -\allocationnumber\insc@unt -\else -\global\advance\insc@unt\@ne - \extrafloats\@ne - \@next\@currbox\@freelist - {\ifnum\@currbox<\e@insert@top - \allocationnumber\@currbox - \else - \ch@ck0\m@ne\insert - \fi}% - {\ch@ck0\m@ne\insert}% -\fi -\global\chardef#1\allocationnumber -\wlog{\string#1=\string\insert\the\allocationnumber}% +%%% 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. +\IncludeInRelease{2020/02/02}% + {\@font@aliasinfo}{alias size function}% +\DeclareSizeFunction{alias}{\sub@sfcnt\@font@aliasinfo} +\def\@font@aliasinfo#1{% + \@font@info{Font\space shape\space `\curr@fontshape'\space + aliased\space to\MessageBreak `\mandatory@arg'}% } -\fi \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\newinsert}{Extended \newinsert}% -\let\e@insert@top\@undefined -\def\newinsert#1{\global\advance\insc@unt \m@ne - \ch@ck0\insc@unt\count - \ch@ck1\insc@unt\dimen - \ch@ck2\insc@unt\skip - \ch@ck4\insc@unt\box - \allocationnumber\insc@unt - \global\chardef#1\allocationnumber - \wlog{\string#1=\string\insert\the\allocationnumber}} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}% -\ifx\tracingscantokens\@undefined -\gdef\loggingall{% - \tracingstats\tw@ - \tracingpages\@ne - \tracinglostchars\@ne - \tracingparagraphs\@ne - \errorcontextlines\maxdimen - \loggingoutput - \tracingmacros\tw@ - \tracingcommands\tw@ - \tracingrestores\@ne - }% -\else -\gdef\loggingall{% - \tracingstats\tw@ - \tracingpages\@ne - \tracinglostchars\tw@ - \tracingparagraphs\@ne - \tracinggroups\@ne - \tracingifs\@ne - \tracingscantokens\@ne - \tracingnesting\@ne - \errorcontextlines\maxdimen - \loggingoutput - \tracingmacros\tw@ - \tracingcommands\thr@@ - \tracingrestores\@ne - \tracingassigns\@ne -}% -\fi -\gdef\tracingall{\showoverfull\loggingall} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}% -\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@ - \tracingpages\@ne\tracinglostchars\@ne - \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne - \errorcontextlines\maxdimen\loggingoutput} - \gdef\tracingall{\loggingall\showoverfull} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\tracingnone}% - {turn off etex tracing}% -\ifx\tracingscantokens\@undefined -\def\tracingnone{% - \tracingonline\z@ - \tracingcommands\z@ - \showboxdepth\m@ne - \showboxbreadth\m@ne - \tracingoutput\z@ - \errorcontextlines\m@ne - \tracingrestores\z@ - \tracingparagraphs\z@ - \tracingmacros\z@ - \tracinglostchars\@ne - \tracingpages\z@ - \tracingstats\z@ -}% -\else -\def\tracingnone{% - \tracingassigns\z@ - \tracingrestores\z@ - \tracingonline\z@ - \tracingcommands\z@ - \showboxdepth\m@ne - \showboxbreadth\m@ne - \tracingoutput\z@ - \errorcontextlines\m@ne - \tracingnesting\z@ - \tracingscantokens\z@ - \tracingifs\z@ - \tracinggroups\z@ - \tracingparagraphs\z@ - \tracingmacros\z@ - \tracinglostchars\@ne - \tracingpages\z@ - \tracingstats\z@ -}% -\fi -\def\hideoutput{% - \tracingoutput\z@ - \showboxbreadth\m@ne - \showboxdepth\m@ne - \tracingonline\m@ne -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\tracingnone}% - {turn off etex tracing}% -\let\tracingnone\@undefined -\let\hideoutput\@undefined + {\@font@aliasinfo}{alias size function}% +\let\s@fct@alias\@undefined +\let\@font@aliasinfo\@undefined + \EndIncludeInRelease %%% From File: ltfssdcl.dtx %% Copyright (C) 1989-1998 Frank Mittelbach and Rainer Sch\"opf, @@ -8573,1078 +6224,6 @@ of this package available from CTAN} \EndIncludeInRelease -%%% From File: ltfssbas.dtx -%% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf -\IncludeInRelease{2020/02/02}% - {\DeclareFontShape@}{Maybe drop one m}% -\def\DeclareFontShape@#1#2#3#4#5#6{% - \expandafter\ifx\csname #1+#2\endcsname\relax - \@latex@error{Font family `#1+#2' unknown}\@eha - \else - \edef\reserved@a{#3}% - \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'! - Please correct it.\MessageBreak Found}% - \fi - \expandafter - \xdef\csname#1/#2/\reserved@b/#4\endcsname - {\expandafter\noexpand\csname #5\endcsname}% - \def\reserved@a{#6}% - \global - \expandafter\let\csname#5\expandafter\endcsname - \ifx\reserved@a\@empty - \@empty - \else - \reserved@a - \fi - \fi - } -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\DeclareFontShape@}{Maybe drop one m}% - -\def\DeclareFontShape@#1#2#3#4#5#6{% - \expandafter\ifx\csname #1+#2\endcsname\relax - \@latex@error{Font family `#1+#2' unknown}\@eha - \else - \expandafter - \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand - \csname #5\endcsname}% - \def\reserved@a{#6}% - \global - \expandafter\let\csname#5\expandafter\endcsname - \ifx\reserved@a\@empty - \@empty - \else - \reserved@a - \fi - \fi - } -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\@DeclareMathSizes}% - {Arbitrary units in \DeclareMathSizes}% -\def\@DeclareMathSizes #1#2#3#4#5{% - \@defaultunits\dimen@ #2pt\relax\@nnil - \if $#3$% - \expandafter\let\csname S@\strip@pt\dimen@\endcsname\math@fontsfalse - \else - \@defaultunits\dimen@ii #3pt\relax\@nnil - \@defaultunits\@tempdima #4pt\relax\@nnil - \@defaultunits\@tempdimb #5pt\relax\@nnil - \toks@{#1}% - \expandafter\xdef\csname S@\strip@pt\dimen@\endcsname{% - \gdef\noexpand\tf@size{\strip@pt\dimen@ii}% - \gdef\noexpand\sf@size{\strip@pt\@tempdima}% - \gdef\noexpand\ssf@size{\strip@pt\@tempdimb}% - \the\toks@ - }% - \fi -}% -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\@DeclareMathSizes}% - {Arbitrary units in \DeclareMathSizes}% -\def\@DeclareMathSizes#1#2#3#4#5{% - \@defaultunits\dimen@#2pt\relax\@nnil - \if$#3$% - \expandafter \let - \csname S@\strip@pt\dimen@\endcsname - \math@fontsfalse - \else - \expandafter \gdef - \csname S@\strip@pt\dimen@\endcsname - {\gdef\tf@size{#3}\gdef\sf@size{#4}% - \gdef\ssf@size{#5}% - #1% - }% - \fi}% -\EndIncludeInRelease -\IncludeInRelease{2020/02/02}% - {\LoadFontDefinitionFile}{Loading .fd files}% -\def\LoadFontDefinitionFile#1#2{% - \begingroup - \edef\f@encoding{#1}% - \edef\f@family{#2}% - \try@load@fontshape - \endgroup -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\LoadFontDefinitionFile}{Loading .fd files}% - -\let\LoadFontDefinitionFile\@undefined -\EndIncludeInRelease -\IncludeInRelease{2020/02/02}% - {\DeclareFontFamilySubstitution}{Provide family substituation}% -\begingroup -\nfss@catcodes -\gdef\DeclareFontFamilySubstitution#1#2#3{% - \LoadFontDefinitionFile{#1}{#2}% - \LoadFontDefinitionFile{#1}{#3}% - \DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}% - \DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}% - \DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}% - \DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}% - \DeclareFontShape{#1}{#2}{m}{sw}{<->ssub * #3/m/sw}{}% - \DeclareFontShape{#1}{#2}{m}{scit}{<->ssub * #3/m/scit}{}% - \DeclareFontShape{#1}{#2}{m}{scsl}{<->ssub * #3/m/scsl}{}% - \DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/b/it}{}% - \DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/b/n}{}% - \DeclareFontShape{#1}{#2}{b}{scit}{<->ssub * #3/b/scit}{}% - \DeclareFontShape{#1}{#2}{b}{scsl}{<->ssub * #3/b/scsl}{}% - \DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/b/sc}{}% - \DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/b/sl}{}% - \DeclareFontShape{#1}{#2}{b}{sw}{<->ssub * #3/b/sw}{}% - \DeclareFontShape{#1}{#2}{bx}{it}{<->ssub * #3/bx/it}{}% - \DeclareFontShape{#1}{#2}{bx}{n}{<->ssub * #3/bx/n}{}% - \DeclareFontShape{#1}{#2}{bx}{scit}{<->ssub * #3/bx/scit}{}% - \DeclareFontShape{#1}{#2}{bx}{scsl}{<->ssub * #3/bx/scsl}{}% - \DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub * #3/bx/sc}{}% - \DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub * #3/bx/sl}{}% - \DeclareFontShape{#1}{#2}{bx}{sw}{<->ssub * #3/bx/sw}{}% -} -\endgroup -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\DeclareFontFamilySubstitution}{Provide family substituation}% - -\let\DeclareFontFamilySubstitution\@undefined -\EndIncludeInRelease -\IncludeInRelease{2019/10/01}% - {\DeclareErrorFont}{No side effects please}% -\def\DeclareErrorFont#1#2#3#4#5{% - \xdef\error@fontshape{% - \noexpand\expandafter\noexpand\split@name\noexpand\string - \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname - \noexpand\@nil}% - \gdef\default@family{#2}% - \gdef\default@series{#3}% - \gdef\default@shape{#4}% -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\DeclareErrorFont}{No side effects please}% - -\def\DeclareErrorFont#1#2#3#4#5{% - \xdef\error@fontshape{% - \noexpand\expandafter\noexpand\split@name\noexpand\string - \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname - \noexpand\@nil}% - \gdef\default@family{#2}% - \gdef\default@series{#3}% - \gdef\default@shape{#4}% - \global\let\f@family\default@family - \global\let\f@series\default@series - \global\let\f@shape\default@shape - \gdef\f@size{#5}% - \gdef\f@baselineskip{#5pt}% -} -\EndIncludeInRelease -\IncludeInRelease{2015/01/01}{\wrong@fontshape}% - {Font substituation in preamble}% -\def\wrong@fontshape{% - \csname D@\f@encoding\endcsname % install defaults if in math - \edef\reserved@a{\csname\curr@fontshape\endcsname}% - \ifx\last@fontshape\reserved@a - \errmessage{Corrupted NFSS tables}% - \error@fontshape - \else - \let\f@shape\default@shape - \expandafter\ifx\csname\curr@fontshape\endcsname\relax - \let\f@series\default@series - \expandafter - \ifx\csname\curr@fontshape\endcsname\relax - \let\f@family\default@family - \begingroup - \try@load@fontshape - \endgroup - \fi \fi - \fi - \@font@warning{Font shape `\expandafter\string\reserved@a' - \expandafter\@gobble\string\@undefined\MessageBreak - using `\curr@fontshape' instead\@wrong@font@char}% - \global\let\last@fontshape\reserved@a - \gdef\@defaultsubs{% - \@font@warning{Some font shapes were not available, defaults - substituted.\@gobbletwo}}% - \global\expandafter\expandafter\expandafter\let - \expandafter\reserved@a - \csname\curr@fontshape\endcsname - \xdef\font@name{% - \csname\curr@fontshape/\f@size\endcsname}% - \pickup@font} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\wrong@fontshape}% - {Font substituation in preamble}% -\def\wrong@fontshape{% - \csname D@\f@encoding\endcsname - \edef\reserved@a{\csname\curr@fontshape\endcsname}% - \ifx\last@fontshape\reserved@a - \errmessage{Corrupted NFSS tables}% - \error@fontshape - \else - \let\f@shape\default@shape - \expandafter\ifx\csname\curr@fontshape\endcsname\relax - \let\f@series\default@series - \expandafter - \ifx\csname\curr@fontshape\endcsname\relax - \let\f@family\default@family - \fi \fi - \fi - \@font@warning{Font shape - `\expandafter\string\reserved@a' - \expandafter\@gobble\string\@undefined - \MessageBreak - using `\curr@fontshape' instead\@wrong@font@char}% - \global\let\last@fontshape\reserved@a - \gdef\@defaultsubs{% - \@font@warning{Some font shapes were not available, - defaults substituted.\@gobbletwo}}% - \global\expandafter\expandafter\expandafter\let - \expandafter\reserved@a - \csname\curr@fontshape\endcsname - \xdef\font@name{% - \csname\curr@fontshape/\f@size\endcsname}% - \pickup@font} -\EndIncludeInRelease -\IncludeInRelease{2017/01/01}{\showhyphens}% - {XeTeX support for \showhyphens}% -\ifx\XeTeXcharclass\@undefined -\DeclareRobustCommand\showhyphens[1]{% - \setbox0\vbox{% - \color@begingroup - \everypar{}% - \parfillskip\z@skip\hsize\maxdimen - \normalfont - \pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1% - \color@endgroup}} -\else -\DeclareRobustCommand\showhyphens[1]{% - \setbox0\vbox{% - \usefont{TU}{lmr}{m}{n}% - \hsize 1sp % - \hbadness\@M - \hfuzz\maxdimen - \tracingonline\z@ - \everypar={}% - \leftskip\z@skip - \rightskip\z@skip - \parfillskip\z@skip - \hyphenpenalty=-\@M - \pretolerance\m@ne - \interlinepenalty\z@ - \clubpenalty\z@ - \widowpenalty\z@ - \brokenpenalty1127 % - \setbox\z@\hbox{}% - \noindent - \hskip\z@skip - #1% - \par - \loop - \@tempswafalse - \ifnum\lastnodetype=11\unskip\@tempswatrue\fi - \ifnum\lastnodetype=12\unkern\@tempswatrue\fi - \ifnum\lastnodetype=13 % - \count@\lastpenalty - \unpenalty\@tempswatrue - \fi - \ifnum\lastnodetype=\@ne - \setbox\tw@\lastbox\@tempswatrue - \setbox0\hbox{\unhbox\tw@\unskip\unskip\unpenalty - \ifnum\count@=1127 \else\ \fi - \unhbox0}% - \count@\z@ - \fi - \if@tempswa - \repeat - \hbadness\z@ - \hsize\maxdimen - \showboxdepth\z@ - \tolerance\m@ne - \hyphenpenalty\z@ - \noindent\unhbox\z@ -}} -\fi -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\showhyphens}% - {XeTeX support for \showhyphens}% -\gdef\showhyphens#1{% - \setbox0\vbox{% - \color@begingroup - \everypar{}% - \parfillskip\z@skip\hsize\maxdimen - \normalfont - \pretolerance\m@ne\tolerance\m@ne - \hbadness\z@\showboxdepth\z@\ #1% - \color@endgroup}} -\EndIncludeInRelease -%%% From File: ltfssaxes.dtx -%% Copyright (C) 1999-2020 Frank Mittelbach -\IncludeInRelease{2020/02/02}% - {\DeclareFontSeriesChangeRule}{Series change rules}% -\def\DeclareFontSeriesChangeRule#1#2#3#4{% - \@namedef{series@#1@#2}{{#3}{#4}}} -\DeclareFontSeriesChangeRule {bc}{b}{bc}{} -\DeclareFontSeriesChangeRule {bc}{c}{bc}{} -\DeclareFontSeriesChangeRule {bc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {bc}{ec}{bec} {bc} -\DeclareFontSeriesChangeRule {bc}{el}{elc}{} -\DeclareFontSeriesChangeRule {bc}{l}{lc}{} -\DeclareFontSeriesChangeRule {bc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {bc}{sc}{bsc} {bc} -\DeclareFontSeriesChangeRule {bc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {bc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {bc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {bc}{x}{bx}{} -\DeclareFontSeriesChangeRule {bx}{b}{bx}{} -\DeclareFontSeriesChangeRule {bx}{c} {bc} {bx} %<----- -\DeclareFontSeriesChangeRule {bx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {bx}{ec} {bec} {bx} %<----- -\DeclareFontSeriesChangeRule {bx}{el}{elx}{} -\DeclareFontSeriesChangeRule {bx}{l}{lx}{} -\DeclareFontSeriesChangeRule {bx}{sb} {sbx} {} -\DeclareFontSeriesChangeRule {bx}{sc} {bsc} {bx} %<----- -\DeclareFontSeriesChangeRule {bx}{sl}{slx} {} -\DeclareFontSeriesChangeRule {bx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {bx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {bx}{x}{bx}{} -\DeclareFontSeriesChangeRule {b}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {b}{c} {bc} {b} %<----- -\DeclareFontSeriesChangeRule {b}{ec} {bec} {b} %<----- -\DeclareFontSeriesChangeRule {b}{sb} {sb} {b} %<----- -\DeclareFontSeriesChangeRule {b}{sc} {bsc} {b} %<----- -\DeclareFontSeriesChangeRule {b}{x} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {c}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {c}{b}{bc}{} -\DeclareFontSeriesChangeRule {c}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {c}{el}{elc}{} -\DeclareFontSeriesChangeRule {c}{l}{lc}{} -\DeclareFontSeriesChangeRule {c}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {c}{sl}{slc}{} -\DeclareFontSeriesChangeRule {c}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {c}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {c}{x}{x}{m} %<----- -\DeclareFontSeriesChangeRule {ebc}{b}{bc}{} -\DeclareFontSeriesChangeRule {ebc}{c}{ebc}{} -\DeclareFontSeriesChangeRule {ebc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {ebc}{ec}{ebec}{ebc} -\DeclareFontSeriesChangeRule {ebc}{el}{elc}{} -\DeclareFontSeriesChangeRule {ebc}{l}{lc}{} -\DeclareFontSeriesChangeRule {ebc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {ebc}{sc}{ebsc}{ebc} -\DeclareFontSeriesChangeRule {ebc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {ebc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {ebc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {ebc}{x}{ebx}{} -\DeclareFontSeriesChangeRule {ec}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {ec}{b}{bec}{} -\DeclareFontSeriesChangeRule {ec}{eb}{ebec}{} -\DeclareFontSeriesChangeRule {ec}{el}{elec}{} -\DeclareFontSeriesChangeRule {ec}{l}{lec}{} -\DeclareFontSeriesChangeRule {ec}{sb}{sbec}{} -\DeclareFontSeriesChangeRule {ec}{sl}{slec}{} -\DeclareFontSeriesChangeRule {ec}{ub}{ubec}{} -\DeclareFontSeriesChangeRule {ec}{ul}{ulec}{} -\DeclareFontSeriesChangeRule {ec}{x}{x}{m} %<----- -\DeclareFontSeriesChangeRule {sc}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {sc}{b}{bsc}{} -\DeclareFontSeriesChangeRule {sc}{eb}{ebsc}{} -\DeclareFontSeriesChangeRule {sc}{el}{elsc}{} -\DeclareFontSeriesChangeRule {sc}{l}{lsc}{} -\DeclareFontSeriesChangeRule {sc}{sb}{sbsc}{} -\DeclareFontSeriesChangeRule {sc}{sl}{slsc}{} -\DeclareFontSeriesChangeRule {sc}{ub}{ubsc}{} -\DeclareFontSeriesChangeRule {sc}{ul}{ulsc}{} -\DeclareFontSeriesChangeRule {sc}{x}{x}{m} %<----- -\DeclareFontSeriesChangeRule {ebx}{b}{bx}{} -\DeclareFontSeriesChangeRule {ebx}{c}{ebc}{} -\DeclareFontSeriesChangeRule {ebx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {ebx}{ec}{ebec}{} -\DeclareFontSeriesChangeRule {ebx}{el}{elx}{} -\DeclareFontSeriesChangeRule {ebx}{l}{lx}{} -\DeclareFontSeriesChangeRule {ebx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {ebx}{sc}{ebsc}{} -\DeclareFontSeriesChangeRule {ebx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {ebx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {ebx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {ebx}{x}{ebx}{} -\DeclareFontSeriesChangeRule {eb}{c}{ebc}{} -\DeclareFontSeriesChangeRule {eb}{ec}{ebec}{} -\DeclareFontSeriesChangeRule {eb}{sc}{ebsc}{} -\DeclareFontSeriesChangeRule {eb}{x}{ebx}{} -\DeclareFontSeriesChangeRule {elc}{b}{bc}{} -\DeclareFontSeriesChangeRule {elc}{c}{elc}{} -\DeclareFontSeriesChangeRule {elc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {elc}{ec}{elec}{} -\DeclareFontSeriesChangeRule {elc}{el}{elc}{} -\DeclareFontSeriesChangeRule {elc}{l}{lc}{} -\DeclareFontSeriesChangeRule {elc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {elc}{sc}{elsc}{} -\DeclareFontSeriesChangeRule {elc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {elc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {elc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {elc}{x}{elx}{} -\DeclareFontSeriesChangeRule {elx}{b}{bx}{} -\DeclareFontSeriesChangeRule {elx}{c}{elc}{} -\DeclareFontSeriesChangeRule {elx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {elx}{ec}{elec}{} -\DeclareFontSeriesChangeRule {elx}{el}{elx}{} -\DeclareFontSeriesChangeRule {elx}{l}{lx}{} -\DeclareFontSeriesChangeRule {elx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {elx}{sc}{elsc}{} -\DeclareFontSeriesChangeRule {elx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {elx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {elx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {elx}{x}{elx}{} -\DeclareFontSeriesChangeRule {el}{c}{elc}{} -\DeclareFontSeriesChangeRule {el}{ec}{elec}{} -\DeclareFontSeriesChangeRule {el}{sc}{elsc}{} -\DeclareFontSeriesChangeRule {el}{x}{elx}{} -\DeclareFontSeriesChangeRule {lc}{b}{bc}{} -\DeclareFontSeriesChangeRule {lc}{c}{lc}{} -\DeclareFontSeriesChangeRule {lc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {lc}{ec}{lec}{} -\DeclareFontSeriesChangeRule {lc}{el}{elc}{} -\DeclareFontSeriesChangeRule {lc}{l}{lc}{} -\DeclareFontSeriesChangeRule {lc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {lc}{sc}{lsc}{} -\DeclareFontSeriesChangeRule {lc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {lc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {lc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {lc}{x}{lx}{} -\DeclareFontSeriesChangeRule {lx}{b}{bx}{} -\DeclareFontSeriesChangeRule {lx}{c}{lc}{} -\DeclareFontSeriesChangeRule {lx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {lx}{ec}{lec}{} -\DeclareFontSeriesChangeRule {lx}{el}{elx}{} -\DeclareFontSeriesChangeRule {lx}{l}{lx}{} -\DeclareFontSeriesChangeRule {lx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {lx}{sc}{lsc}{} -\DeclareFontSeriesChangeRule {lx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {lx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {lx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {lx}{x}{lx}{} -\DeclareFontSeriesChangeRule {l}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {l}{b} {b} {bx} %<----- -\DeclareFontSeriesChangeRule {l}{c} {lc} {l} % ? %<----- -\DeclareFontSeriesChangeRule {l}{ec} {lec} {l} % ? %<----- -\DeclareFontSeriesChangeRule {l}{sb} {sb} {b} % ? %<----- -\DeclareFontSeriesChangeRule {l}{sc} {lsc} {l} % ? %<----- -\DeclareFontSeriesChangeRule {l}{x} {lx} {l} % ? %<----- -\DeclareFontSeriesChangeRule {m}{bx} {bx} {b} %<----- -\DeclareFontSeriesChangeRule {m}{b} {b} {bx} %<----- -\DeclareFontSeriesChangeRule {m}{c} {c} {m} %<----- -\DeclareFontSeriesChangeRule {m}{ec} {ec} {m} %<----- -\DeclareFontSeriesChangeRule {m}{l} {l} {m} %<----- -\DeclareFontSeriesChangeRule {m}{sb} {sb} {b} %<----- -\DeclareFontSeriesChangeRule {m}{sc} {sc} {m} %<----- -\DeclareFontSeriesChangeRule {m}{x} {x} {m} %<----- -\DeclareFontSeriesChangeRule {sbc}{b}{bc}{} -\DeclareFontSeriesChangeRule {sbc}{c}{sbc}{} -\DeclareFontSeriesChangeRule {sbc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {sbc}{ec}{sbec}{sbc} -\DeclareFontSeriesChangeRule {sbc}{el}{elc}{} -\DeclareFontSeriesChangeRule {sbc}{l}{lc}{} -\DeclareFontSeriesChangeRule {sbc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {sbc}{sc}{sbsc}{sbc} -\DeclareFontSeriesChangeRule {sbc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {sbc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {sbc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {sbc}{x}{sbx}{} -\DeclareFontSeriesChangeRule {sbx}{b}{bx}{} -\DeclareFontSeriesChangeRule {sbx}{c}{sbc}{} -\DeclareFontSeriesChangeRule {sbx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {sbx}{ec}{sbec}{} -\DeclareFontSeriesChangeRule {sbx}{el}{elx}{} -\DeclareFontSeriesChangeRule {sbx}{l}{lx}{} -\DeclareFontSeriesChangeRule {sbx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {sbx}{sc}{sbsc}{} -\DeclareFontSeriesChangeRule {sbx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {sbx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {sbx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {sbx}{x}{sbx}{} -\DeclareFontSeriesChangeRule {sb}{c} {sbc} {bc} %? %<----- -\DeclareFontSeriesChangeRule {sb}{ec} {sbec} {sbc} %? %<----- -\DeclareFontSeriesChangeRule {sb}{sc} {sbsc} {sbc} %? %<----- -\DeclareFontSeriesChangeRule {sb}{x} {sbx} {bx} %? %<----- -\DeclareFontSeriesChangeRule {slc}{b}{bc}{} -\DeclareFontSeriesChangeRule {slc}{c}{slc}{} -\DeclareFontSeriesChangeRule {slc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {slc}{ec}{slec}{} -\DeclareFontSeriesChangeRule {slc}{el}{elc}{} -\DeclareFontSeriesChangeRule {slc}{l}{lc}{} -\DeclareFontSeriesChangeRule {slc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {slc}{sc}{slsc}{} -\DeclareFontSeriesChangeRule {slc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {slc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {slc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {slc}{x}{slx}{} -\DeclareFontSeriesChangeRule {slx}{b}{bx}{} -\DeclareFontSeriesChangeRule {slx}{c}{slc}{} -\DeclareFontSeriesChangeRule {slx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {slx}{ec}{slec}{} -\DeclareFontSeriesChangeRule {slx}{el}{elx}{} -\DeclareFontSeriesChangeRule {slx}{l}{lx}{} -\DeclareFontSeriesChangeRule {slx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {slx}{sc}{slsc}{} -\DeclareFontSeriesChangeRule {slx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {slx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {slx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {slx}{x}{slx}{} -\DeclareFontSeriesChangeRule {sl}{c}{slc}{} -\DeclareFontSeriesChangeRule {sl}{ec}{slec}{} -\DeclareFontSeriesChangeRule {sl}{sc}{slsc}{} -\DeclareFontSeriesChangeRule {sl}{x}{slx}{} -\DeclareFontSeriesChangeRule {ubc}{b}{bc}{} -\DeclareFontSeriesChangeRule {ubc}{c}{ubc}{} -\DeclareFontSeriesChangeRule {ubc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {ubc}{ec}{ubec}{} -\DeclareFontSeriesChangeRule {ubc}{el}{elc}{} -\DeclareFontSeriesChangeRule {ubc}{l}{lc}{} -\DeclareFontSeriesChangeRule {ubc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {ubc}{sc}{ubsc}{} -\DeclareFontSeriesChangeRule {ubc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {ubc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {ubc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {ubc}{x}{ubx}{} -\DeclareFontSeriesChangeRule {ubx}{b}{bx}{} -\DeclareFontSeriesChangeRule {ubx}{c}{ubc}{} -\DeclareFontSeriesChangeRule {ubx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {ubx}{ec}{ubec}{} -\DeclareFontSeriesChangeRule {ubx}{el}{elx}{} -\DeclareFontSeriesChangeRule {ubx}{l}{lx}{} -\DeclareFontSeriesChangeRule {ubx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {ubx}{sc}{ubsc}{} -\DeclareFontSeriesChangeRule {ubx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {ubx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {ubx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {ubx}{x}{ubx}{} -\DeclareFontSeriesChangeRule {ub}{c}{ubc}{} -\DeclareFontSeriesChangeRule {ub}{ec}{ubec}{} -\DeclareFontSeriesChangeRule {ub}{sc}{ubsc}{} -\DeclareFontSeriesChangeRule {ub}{x}{ubx}{} -\DeclareFontSeriesChangeRule {ulc}{b}{bc}{} -\DeclareFontSeriesChangeRule {ulc}{c}{ulc}{} -\DeclareFontSeriesChangeRule {ulc}{eb}{ebc}{} -\DeclareFontSeriesChangeRule {ulc}{ec}{ulec}{ulc} -\DeclareFontSeriesChangeRule {ulc}{el}{elc}{} -\DeclareFontSeriesChangeRule {ulc}{l}{lc}{} -\DeclareFontSeriesChangeRule {ulc}{sb}{sbc}{} -\DeclareFontSeriesChangeRule {ulc}{sc}{ulsc}{ulc} -\DeclareFontSeriesChangeRule {ulc}{sl}{slc}{} -\DeclareFontSeriesChangeRule {ulc}{ub}{ubc}{} -\DeclareFontSeriesChangeRule {ulc}{ul}{ulc}{} -\DeclareFontSeriesChangeRule {ulc}{x}{ulx}{} -\DeclareFontSeriesChangeRule {ulx}{b}{bx}{} -\DeclareFontSeriesChangeRule {ulx}{c}{ulc}{} -\DeclareFontSeriesChangeRule {ulx}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {ulx}{ec}{ulec}{} -\DeclareFontSeriesChangeRule {ulx}{el}{elx}{} -\DeclareFontSeriesChangeRule {ulx}{l}{lx}{} -\DeclareFontSeriesChangeRule {ulx}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {ulx}{sc}{ulsc}{} -\DeclareFontSeriesChangeRule {ulx}{sl}{slx}{} -\DeclareFontSeriesChangeRule {ulx}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {ulx}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {ulx}{x}{ulx}{} -\DeclareFontSeriesChangeRule {ul}{c}{ulc}{} -\DeclareFontSeriesChangeRule {ul}{ec}{ulec}{} -\DeclareFontSeriesChangeRule {ul}{sc}{ulsc}{} -\DeclareFontSeriesChangeRule {ul}{x}{ulx}{} -\DeclareFontSeriesChangeRule {x}{b}{bx}{} -\DeclareFontSeriesChangeRule {x}{c}{c}{} -\DeclareFontSeriesChangeRule {x}{eb}{ebx}{} -\DeclareFontSeriesChangeRule {x}{ec}{ec}{} -\DeclareFontSeriesChangeRule {x}{el}{elx}{} -\DeclareFontSeriesChangeRule {x}{l}{lx}{} -\DeclareFontSeriesChangeRule {x}{sb}{sbx}{} -\DeclareFontSeriesChangeRule {x}{sc}{sc}{} -\DeclareFontSeriesChangeRule {x}{sl}{slx}{} -\DeclareFontSeriesChangeRule {x}{ub}{ubx}{} -\DeclareFontSeriesChangeRule {x}{ul}{ulx}{} -\DeclareFontSeriesChangeRule {bc}{m?}{c}{} -\DeclareFontSeriesChangeRule {bec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {bsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {bx}{m?}{x}{} -\DeclareFontSeriesChangeRule {b}{m?}{m}{} -\DeclareFontSeriesChangeRule {c}{m?}{c}{} -\DeclareFontSeriesChangeRule {ebc}{m?}{c}{} -\DeclareFontSeriesChangeRule {ebec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {ebsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {ebx}{m?}{x}{} -\DeclareFontSeriesChangeRule {eb}{m?}{m}{} -\DeclareFontSeriesChangeRule {ec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {elc}{m?}{c}{} -\DeclareFontSeriesChangeRule {elec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {elsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {elx}{m?}{x}{} -\DeclareFontSeriesChangeRule {el}{m?}{m}{} -\DeclareFontSeriesChangeRule {lc}{m?}{c}{} -\DeclareFontSeriesChangeRule {lec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {lsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {lx}{m?}{x}{} -\DeclareFontSeriesChangeRule {l}{m?}{m}{} -\DeclareFontSeriesChangeRule {m}{m?}{m}{} -\DeclareFontSeriesChangeRule {sbc}{m?}{c}{} -\DeclareFontSeriesChangeRule {sbec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {sbsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {sbx}{m?}{x}{} -\DeclareFontSeriesChangeRule {sb}{m?}{m}{} -\DeclareFontSeriesChangeRule {sc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {slc}{m?}{c}{} -\DeclareFontSeriesChangeRule {slec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {slsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {slx}{m?}{x}{} -\DeclareFontSeriesChangeRule {sl}{m?}{m}{} -\DeclareFontSeriesChangeRule {ubc}{m?}{c}{} -\DeclareFontSeriesChangeRule {ubec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {ubsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {ubx}{m?}{x}{} -\DeclareFontSeriesChangeRule {ub}{m?}{ub}{} -\DeclareFontSeriesChangeRule {ulc}{m?}{c}{} -\DeclareFontSeriesChangeRule {ulec}{m?}{ec}{} -\DeclareFontSeriesChangeRule {ulsc}{m?}{sc}{} -\DeclareFontSeriesChangeRule {ulx}{m?}{x}{} -\DeclareFontSeriesChangeRule {ul}{m?}{m}{} -\DeclareFontSeriesChangeRule {x}{m?}{x}{} -\DeclareFontSeriesChangeRule {bc}{?m}{b}{} -\DeclareFontSeriesChangeRule {bec}{?m}{b}{} -\DeclareFontSeriesChangeRule {bsc}{?m}{b}{} -\DeclareFontSeriesChangeRule {bsc}{?m}{b}{} -\DeclareFontSeriesChangeRule {bx}{?m}{b}{} -\DeclareFontSeriesChangeRule {b}{?m}{b}{} -\DeclareFontSeriesChangeRule {c}{?m}{m}{} -\DeclareFontSeriesChangeRule {ebc}{?m}{eb}{} -\DeclareFontSeriesChangeRule {ebec}{?m}{eb}{} -\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{} -\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{} -\DeclareFontSeriesChangeRule {ebx}{?m}{eb}{} -\DeclareFontSeriesChangeRule {eb}{?m}{eb}{} -\DeclareFontSeriesChangeRule {ec}{?m}{m}{} -\DeclareFontSeriesChangeRule {elc}{?m}{el}{} -\DeclareFontSeriesChangeRule {elec}{?m}{el}{} -\DeclareFontSeriesChangeRule {elsc}{?m}{el}{} -\DeclareFontSeriesChangeRule {elsc}{?m}{el}{} -\DeclareFontSeriesChangeRule {elx}{?m}{el}{} -\DeclareFontSeriesChangeRule {el}{?m}{el}{} -\DeclareFontSeriesChangeRule {lc}{?m}{l}{} -\DeclareFontSeriesChangeRule {lec}{?m}{l}{} -\DeclareFontSeriesChangeRule {lsc}{?m}{l}{} -\DeclareFontSeriesChangeRule {lsc}{?m}{l}{} -\DeclareFontSeriesChangeRule {lx}{?m}{l}{} -\DeclareFontSeriesChangeRule {l}{?m}{l}{} -\DeclareFontSeriesChangeRule {m}{?m}{m}{} -\DeclareFontSeriesChangeRule {sbc}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sbec}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sbx}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sb}{?m}{sb}{} -\DeclareFontSeriesChangeRule {sc}{?m}{m}{} -\DeclareFontSeriesChangeRule {sc}{?m}{m}{} -\DeclareFontSeriesChangeRule {slc}{?m}{sl}{} -\DeclareFontSeriesChangeRule {slec}{?m}{sl}{} -\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{} -\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{} -\DeclareFontSeriesChangeRule {slx}{?m}{sl}{} -\DeclareFontSeriesChangeRule {sl}{?m}{sl}{} -\DeclareFontSeriesChangeRule {ubc}{?m}{ub}{} -\DeclareFontSeriesChangeRule {ubec}{?m}{ub}{} -\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{} -\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{} -\DeclareFontSeriesChangeRule {ubx}{?m}{ub}{} -\DeclareFontSeriesChangeRule {ub}{?m}{m}{} -\DeclareFontSeriesChangeRule {ulc}{?m}{ul}{} -\DeclareFontSeriesChangeRule {ulec}{?m}{ul}{} -\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{} -\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{} -\DeclareFontSeriesChangeRule {ulx}{?m}{ul}{} -\DeclareFontSeriesChangeRule {ul}{?m}{ul}{} -\DeclareFontSeriesChangeRule {x}{?m}{m}{} - - -\newif\if@forced@series -\DeclareRobustCommand\fontseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}} -\DeclareRobustCommand\fontseries[1]{\@forced@seriesfalse\merge@font@series{#1}} - -\def\merge@font@series#1{% - \expandafter\expandafter\expandafter - \merge@font@series@ - \csname series@\f@series @#1\endcsname - {#1}% - \@nil -} - -\def\merge@font@series@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \set@target@series{#2}% - \else - \maybe@load@fontshape - \edef\reserved@a{\f@encoding /\f@family /#1/\f@shape}% - \ifcsname \reserved@a \endcsname - \set@target@series{#1}% - \else - \ifcsname \f@encoding /\f@family /#2/\f@shape \endcsname - \set@target@series{#2}% - \@font@shape@subst@warning - \else - \set@target@series{#3}% - \@font@shape@subst@warning - \fi - \fi - \fi -} -\def\@font@shape@subst@warning{% - \edef\reserved@b{\curr@fontshape}% - \ifx\reserved@a\reserved@b \else - \@font@warning{Font shape `\reserved@a' undefined\MessageBreak - using `\reserved@b' instead}% - \fi -} -\def\maybe@load@fontshape{\begingroup\try@load@fontshape\endgroup} -\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc} -\def\set@target@series#1{% - \edef\f@series{#1}% - \series@maybe@drop@one@m\f@series\f@series -} -\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 - \edef#2{#1}% - \else - \edef#2{\expandafter\series@drop@one@m #1m\series@drop@one@m}% - \fi -} -\newtoks\series@check@toks -\def\series@drop@one@m#1m#2m#3\series@drop@one@m{% - #1#2% -} - -\def\DeclareFontShapeChangeRule #1#2#3#4{% - \@namedef{shape@#1@#2}{{#3}{#4}}} -\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} -\DeclareFontShapeChangeRule {n}{ulc} {n} {} -\DeclareFontShapeChangeRule {n}{up} {n} {} -\DeclareFontShapeChangeRule {it}{sl} {sl} {it} -\DeclareFontShapeChangeRule {it}{sc} {scit} {scsl} -\DeclareFontShapeChangeRule {it}{ulc} {it} {} -\DeclareFontShapeChangeRule {it}{up} {n} {} -\DeclareFontShapeChangeRule {sl}{it} {it} {sl} -\DeclareFontShapeChangeRule {sl}{sc} {scsl} {scit} -\DeclareFontShapeChangeRule {sl}{ulc} {sl} {} -\DeclareFontShapeChangeRule {sl}{up} {n} {} -\DeclareFontShapeChangeRule {sc}{it} {scit} {scsl} -\DeclareFontShapeChangeRule {sc}{sl} {scsl} {scit} -\DeclareFontShapeChangeRule {sc}{sw} {scsw} {sw} -\DeclareFontShapeChangeRule {sc}{ulc} {n} {} -\DeclareFontShapeChangeRule {sc}{up} {n} {} -\DeclareFontShapeChangeRule {scit}{it} {scit} {} -\DeclareFontShapeChangeRule {scit}{sl} {scsl} {scit} -\DeclareFontShapeChangeRule {scit}{sw} {scsw} {sc} % or scit? -\DeclareFontShapeChangeRule {scit}{sc} {scit} {} -\DeclareFontShapeChangeRule {scit}{ulc} {it} {} -\DeclareFontShapeChangeRule {scit}{up} {sc} {} -\DeclareFontShapeChangeRule {scsl}{it} {scit} {scsl} -\DeclareFontShapeChangeRule {scsl}{sl} {scsl} {} -\DeclareFontShapeChangeRule {scsl}{sw} {scsw} {sc} % or scsl? -\DeclareFontShapeChangeRule {scsl}{sc} {scsl} {} -\DeclareFontShapeChangeRule {scsl}{ulc} {sl} {} -\DeclareFontShapeChangeRule {scsl}{up} {sc} {} -\DeclareFontShapeChangeRule {scsw}{it} {scit} {scsw} -\DeclareFontShapeChangeRule {scsw}{sl} {scsl} {} -\DeclareFontShapeChangeRule {scsw}{sw} {scsw} {} -\DeclareFontShapeChangeRule {scsw}{sc} {scsw} {} -\DeclareFontShapeChangeRule {scsw}{ulc} {sw} {} -\DeclareFontShapeChangeRule {scsw}{up} {sc} {} -\DeclareFontShapeChangeRule {sw}{sc} {scsw} {} -\DeclareFontShapeChangeRule {sw}{ulc} {sw} {} -\DeclareFontShapeChangeRule {sw}{up} {n} {} -\DeclareRobustCommand\fontshape[1]{\merge@font@shape{#1}} -\DeclareRobustCommand\fontshapeforce[1]{\edef\f@shape{#1}} -\def\merge@font@shape#1{% - \expandafter\expandafter\expandafter - \merge@font@shape@ - \csname shape@\f@shape @#1\endcsname - {#1}% - \@nil -} - -\def\merge@font@shape@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \edef\f@shape{#2}% - \else - \maybe@load@fontshape - \edef\reserved@a{\f@encoding /\f@family /\f@series/#1}% - \ifcsname \reserved@a\endcsname - \edef\f@shape{#1}% - \else - \ifcsname \f@encoding /\f@family /\f@series/#2\endcsname - \edef\f@shape{#2}% - \@font@shape@subst@warning - \else - \edef\f@shape{#3}% - \@font@shape@subst@warning - \fi - \fi - \fi -} -\protected\def\normalshape - {\not@math@alphabet\normalshape\relax - \fontshape\shapedefault\selectfont}% -\def\reinstall@nfss@defs{% - \protected\def\upshape - {\not@math@alphabet\upshape\relax - \fontshape\updefault\selectfont}% - \protected\def\slshape - {\not@math@alphabet\slshape\relax - \fontshape\sldefault\selectfont}% - \protected\def\scshape - {\not@math@alphabet\scshape\relax - \fontshape\scdefault\selectfont}% - \protected\def\itshape - {\not@math@alphabet\itshape\mathit - \fontshape\itdefault\selectfont}% - \protected\def\ulcshape - {\not@math@alphabet\ulcshape\relax - \fontshape{ulc}\selectfont}% - \protected\def\swshape - {\not@math@alphabet\swshape\relax - \fontshape\swdefault\selectfont}% - \protected\def\sscshape - {\not@math@alphabet\sscshape\relax - \fontshape\sscdefault\selectfont}% -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\DeclareFontSeriesChangeRule}{Series change rules}% - -\DeclareRobustCommand\fontseries[1]{\edef\f@series{#1}} -\DeclareRobustCommand\fontshape [1]{\edef\f@shape{#1}} -\let\fontseriesforce\@undefined -\let\fontshapeforce\@undefined - -\let\DeclareFontSeriesChangeRule\@undefined -\let\merge@font@series\@undefined -\let\merge@font@series@\@undefined -\let\@font@shape@subst@warning\@undefined -\let\maybe@load@fontshape\@undefined -\let\set@target@series\@undefined -\let\series@maybe@drop@one@m\@undefined -\let\series@drop@one@m\@undefined -\let\DeclareFontShapeChangeRule\@undefined -\let\merge@font@shape\@undefined -\let\merge@font@shape@\@undefined -\let\normalshape\@undefined -\let\ulcshape\@undefined -\let\ulcdefault\@undefined -\let\swshape\@undefined -\let\swdefault\@undefined -\let\sscshape\@undefined -\let\sscdefault\@undefined -\let\normalshape\@undefined - -\let\reinstall@nfss@defs\relax -\EndIncludeInRelease -\IncludeInRelease{2020/10/01}% - {\reinstall@nfss@defs}{NFSS series init}% -\g@addto@macro\@kernel@after@begindocument@before - {\reinstall@nfss@defs\init@series@setup} -\EndIncludeInRelease -\IncludeInRelease{2020/02/02}% - {\reinstall@nfss@defs}{NFSS series init}% -\AtBeginDocument{\reinstall@nfss@defs\init@series@setup} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\reinstall@nfss@defs}{NFSS series init}% -\EndIncludeInRelease -%%% From File: ltfsstrc.dtx -%% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. -%% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved. -\IncludeInRelease{2020/02/02}% - {\@font@aliasinfo}{alias size function}% -\DeclareSizeFunction{alias}{\sub@sfcnt\@font@aliasinfo} -\def\@font@aliasinfo#1{% - \@font@info{Font\space shape\space `\curr@fontshape'\space - aliased\space to\MessageBreak `\mandatory@arg'}% -} -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}% - {\@font@aliasinfo}{alias size function}% -\let\s@fct@alias\@undefined -\let\@font@aliasinfo\@undefined - -\EndIncludeInRelease -%%% From File: ltfsscmp.dtx -%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf, -%% all rights reserved. -\IncludeInRelease{2015/01/01}{\new@fontshape}% - {NFSS version1 commands}% -\let\new@fontshape\@undefined -\let\warn@rel@i\@undefined -\let\scan@fontshape\@undefined -\let\scan@@fontshape\@undefined -\let\subst@fontshape\@undefined -\let\extra@def\@undefined -\let\default@mextra\@undefined -\let\preload@sizes\@undefined -\let\err@rel@i\@undefined -\let\newmathalphabet\@undefined -\let\newmathalphabet@\@undefined -\let\newmathalphabet@@@\@undefined -\let\if@no@font@opt\@undefined -\let\@no@font@optfalse\@undefined -\let\define@mathalphabet\@undefined -\let\define@mathgroup\@undefined -\let\addtoversion\@undefined -\EndIncludeInRelease -\IncludeInRelease{0000/00/00}{\new@fontshape}% - {NFSS version1 commands}% -\gdef\new@fontshape#1#2#3#4{% - \warn@rel@i\new@fontshape\DeclareFontShape - \expandafter\scan@fontshape\@gobble#4<\@nil><<% - \DeclareFontShape U{#1}{#2}{#3}\reserved@f}% -\@onlypreamble\new@fontshape -\gdef\warn@rel@i#1#2{% - \@font@warning{*** NFSS release 1 command - \noexpand#1found\MessageBreak - *** Update by using release 2 command - \string#2.\MessageBreak - *** Recovery is probably possible}% -}% -\@onlypreamble\warn@rel@i -\gdef\scan@fontshape{% - \let\reserved@f\@empty - \let\reserved@e\@empty % holds last info - \scan@@fontshape -}% -\@onlypreamble\scan@fontshape -\gdef\scan@@fontshape#1>#2#3<{% - \ifx\@nil#1% - \edef\reserved@f{\reserved@f\reserved@e}% - \else - \def\reserved@b{#1}% nick names - \def\reserved@c{#3}% - \in@{ at}{#3}% - \ifin@ - \in@{pt}{#3}% not a proof but a good chance - \ifin@ - \def\reserved@a##1 at##2pt##3\@nil{% - \def\reserved@b{##2}% - \def\reserved@c{##1}% - }% - \reserved@a#3\@nil - \fi - \fi - \ifnum 0<0#2 - \edef\reserved@d{subf*\reserved@c}% - \ifcase #2\or - \or - \else - \errmessage{*** What's this? NFSS release 0? ***}% - \fi - \else - \edef\reserved@d{#2\reserved@c}% - \fi - \ifx\reserved@d\reserved@e - \edef\reserved@f{\reserved@f<\reserved@b>}% - \else - \edef\reserved@f{\reserved@f\reserved@e<\reserved@b>}%add old info - \let\reserved@e\reserved@d - \fi - \expandafter\scan@@fontshape - \fi -}% -\@onlypreamble\scan@@fontshape -\gdef\subst@fontshape#1#2#3#4#5#6{% - \warn@rel@i\subst@fontshape\DeclareFontShape - \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}% -\@onlypreamble\subst@fontshape -\gdef\extra@def#1#2#3{% - \warn@rel@i\extra@def\DeclareFontFamily - \DeclareFontFamily{U}{#1}{}% -}% -\@onlypreamble\extra@def -\gdef\default@mextra{% - \warn@rel@i\default@mextra\DeclareFontEncodingDefaults - \DeclareFontEncodingDefaults\relax -}% -\@onlypreamble\default@mextra -\gdef\preload@sizes{% - \warn@rel@i\preload@sizes\DeclarePreloadSizes - \DeclarePreloadSizes U% -}% -\@onlypreamble\preload@sizes -\gdef\err@rel@i#1#2{% - \@latex@error{*** NFSS release 1 command \noexpand#1found% - ^^J*** Recovery not possible. Use \string#2}% - {The new release of NFSS doesn't support the - \noexpand#1command^^Jany longer. - Please upgrade your file to the syntax of NFSS - release 2^^Jusing the \noexpand#2command.}% - \batchmode\input.\relax -}% -\@onlypreamble\err@rel@i -\gdef\newmathalphabet{% - \if@no@font@opt - \@latex@error{*** NFSS release 1 command - \noexpand\newmathalphabet found% - ^^J \space*** Automatic recovery not possible.% - ^^J \space*** TYPE H for Help% - }% - {Please look at the file usrguide.tex for hints on - how to resolve this problem.}% - \else - \warn@rel@i\newmathalphabet\DeclareMathAlphabet - \fi - \@ifstar\newmathalphabet@@@ - \newmathalphabet@@}% -\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}% -\gdef\newmathalphabet@@@#1#2#3#4{% - \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}% -\@onlypreamble\newmathalphabet -\@onlypreamble\newmathalphabet@@ -\@onlypreamble\newmathalphabet@@@ -\global\let\if@no@font@opt\iftrue -\gdef\@no@font@optfalse{\let\if@no@font@opt\iffalse}% -\gdef\define@mathalphabet{% - \err@rel@i\define@mathalphabet\DeclareMathAlphabet -}% -\@onlypreamble\define@mathalphabet -\gdef\define@mathgroup{% - \err@rel@i\define@mathgroup\DeclareSymbolFont -}% -\@onlypreamble\define@mathgroup -\def\addtoversion#1#2{% - \warn@rel@i\addtoversion\SetMathAlphabet - \SetMathAlphabet#2{#1}{U}}% -\@onlypreamble\addtoversion -\EndIncludeInRelease %%% From File: ltpageno.dtx %%% From File: ltxref.dtx \IncludeInRelease{2020/10/01}% @@ -9712,8 +6291,6 @@ of this package available from CTAN} \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 @@ -9773,8 +6350,6 @@ of this package available from CTAN} \endgroup \deadcycles\z@\@@end} -\let\@kernel@after@enddocument\@undefined -\let\@kernel@after@enddocument@afterlastpage\@undefined \let\@enddocument@kernel@warnings\@undefined \EndIncludeInRelease @@ -10132,303 +6707,3983 @@ of this package available from CTAN} \verbatim@font\@noligs \@ifstar\@sverb\@verb} \EndIncludeInRelease -\ifx\directlua\@undefined\else -\IncludeInRelease{2015/10/01} - {\newluafunction}{LuaTeX}% -\ifnum\luatexversion<60 % - \wlog{***************************************************} - \wlog{* LuaTeX version too old for ltluatex support *} - \wlog{***************************************************} - \expandafter\endinput +%%% From File: ltmath.dtx +\IncludeInRelease{2019/10/01}% + {\vphantom}{Make commands robust}% +\DeclareRobustCommand\vphantom{\v@true\h@false\ph@nt} +\DeclareRobustCommand\hphantom{\v@false\h@true\ph@nt} +\DeclareRobustCommand\phantom{\v@true\h@true\ph@nt} +\DeclareRobustCommand\mathstrut{\vphantom(} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\vphantom}{Make commands robust}% + +\kernel@make@fragile\vphantom +\kernel@make@fragile\hphantom +\kernel@make@fragile\phantom +\kernel@make@fragile\mathstrut + +\EndIncludeInRelease +\IncludeInRelease{2018/12/01}% + {\finph@nt}{Start LR-mode}% +\def\finph@nt{% + \setbox\tw@\null + \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi + \ifh@ \wd\tw@\wd\z@\fi + \leavevmode@ifvmode\box\tw@} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\finph@nt}{Start LR-mode}% +\def\finph@nt{% + \setbox\tw@\null + \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi + \ifh@ \wd\tw@\wd\z@\fi \box\tw@} +\EndIncludeInRelease +\IncludeInRelease{2018/12/01}% + {\finsm@sh}{Start LR-mode}% +\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \leavevmode@ifvmode\box\z@} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\finsm@sh}{Start LR-mode}% +\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\cases}{Make commands robust}% +\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m@th + \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.} +\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)} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\cases}{Make commands robust}% + +\kernel@make@fragile\cases +\kernel@make@fragile\matrix +\kernel@make@fragile\pmatrix + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\tmspace}{amsmath spacing commands}% +\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}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\tmspace}{amsmath spacing commands}% + +\let\tmspace\@undefined +\DeclareRobustCommand{\,}{% + \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi} +\DeclareRobustCommand\thinspace{\leavevmode@ifvmode\kern .16667em } +\DeclareRobustCommand\negthinspace{\leavevmode@ifvmode\kern-.16667em } +\def\>{\mskip\medmuskip} +\let\:=\> +\def\;{\mskip\thickmuskip} +\def\!{\mskip-\thinmuskip} + +\let\negmedspace\@undefined +\let\negthickspace\@undefined + +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\(}{Make \( robust}% +\DeclareRobustCommand\({% + \relax\ifmmode\@badmath\else$\fi}% +\DeclareRobustCommand\){% + \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\(}{Make \( robust}% +\def\({% + \relax\ifmmode\@badmath\else$\fi}% +\expandafter\let\csname\string( \endcsname\@undefined +\def\){% + \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}% +\expandafter\let\csname\string) \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\[}{Make \[ robust}% +\DeclareRobustCommand\[{% + \relax\ifmmode + \@badmath + \else + \ifvmode + \nointerlineskip + \makebox[.6\linewidth]{}% + \fi + $$%%$$ BRACE MATCH HACK + \fi +}% +\DeclareRobustCommand\]{% + \relax\ifmmode + \ifinner + \@badmath + \else + $$%%$$ BRACE MATCH HACK + \fi + \else + \@badmath + \fi + \ignorespaces +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\[}{Make \[ robust}% +\def\[{% + \relax\ifmmode + \@badmath + \else + \ifvmode + \nointerlineskip + \makebox[.6\linewidth]{}% + \fi + $$%%$$ BRACE MATCH HACK + \fi +}% +\expandafter\let\csname\string[ \endcsname\@undefined +\def\]{% + \relax\ifmmode + \ifinner + \@badmath + \else + $$%%$$ BRACE MATCH HACK + \fi + \else + \@badmath + \fi + \ignorespaces +}% +\expandafter\let\csname\string] \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@xeqncr}{eqnarray support calc syntax}% +\def\@xeqncr[#1]{% + \ifnum0=`{\fi}% + \@@eqncr + \noalign{\penalty\@eqpen\vskip\jot\@vspace@calcify{#1}}% +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@xeqncr}{eqnarray support calc syntax}% + +\def\@xeqncr[#1]{% + \ifnum0=`{\fi}% + \@@eqncr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}% +} +\EndIncludeInRelease +%%% From File: ltlists.dtx +%%% From File: ltboxes.dtx +\IncludeInRelease{2015/01/01}% + {\makebox}{Make \makebox robust}% +\DeclareRobustCommand\makebox{% + \leavevmode + \@ifnextchar(%) + \@makepicbox + {\@ifnextchar[\@makebox\mbox}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\makebox}{Make \makebox robust}% +\def\makebox{% + \leavevmode + \@ifnextchar(%) + \@makepicbox + {\@ifnextchar[\@makebox\mbox}}% +\expandafter\let\csname makebox \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@imakepicbox}{default units}% +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \@defaultunitsset\@tempdimc{#2}\unitlength + \vbox to\@tempdimc + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \@defaultunitsset\@tempdimc{#1}\unitlength + \hb@xt@\@tempdimc{\mb@l #4\mb@r}% + \mb@b + \kern\z@}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@imakepicbox}{default units}% +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \vbox to#2\unitlength + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \hb@xt@ #1\unitlength{\mb@l #4\mb@r}% + \mb@b + \kern\z@}} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\savebox}{Make \savebox robust}% +\DeclareRobustCommand\savebox[1]{% + \@ifnextchar(%) + {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\savebox}{Make \savebox robust}% +\def\savebox#1{% + \@ifnextchar(%) + {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}% +\expandafter\let\csname savebox \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\framebox}{Make \framebox robust}% +\DeclareRobustCommand\framebox{% + \@ifnextchar(%) + \@framepicbox{\@ifnextchar[\@framebox\fbox}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\framebox}{Make \framebox robust}% +\def\framebox{% + \@ifnextchar(%) + \@framepicbox{\@ifnextchar[\@framebox\fbox}}% +\expandafter\let\csname framebox \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\parbox}{Make \parbox robust}% +\DeclareRobustCommand\parbox{% + \@ifnextchar[%] + \@iparbox + {\@iiiparbox c\relax[s]}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\parbox}{Make \parbox robust}% +\def\parbox{% + \@ifnextchar[%] + \@iparbox + {\@iiiparbox c\relax[s]}}% +\expandafter\let\csname parbox \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2017-04-15}% + {\normallineskiplimit} + {reset \lineskiplimit}% +\def\@arrayparboxrestore{% + \let\if@nobreak\iffalse + \let\if@noskipsec\iffalse + \let\par\@@par + \let\-\@dischyph + \let\'\@acci\let\`\@accii\let\=\@acciii + \parindent\z@ \parskip\z@skip + \everypar{}% + \linewidth\hsize + \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \parfillskip\@flushglue + \lineskip\normallineskip + \lineskiplimit\normallineskiplimit + \baselineskip\normalbaselineskip + \sloppy} +\EndIncludeInRelease +\IncludeInRelease{0000-00-00}% + {\normallineskiplimit} + {reset \lineskiplimit}% +\def\@arrayparboxrestore{% + \let\if@nobreak\iffalse + \let\if@noskipsec\iffalse + \let\par\@@par + \let\-\@dischyph + \let\'\@acci\let\`\@accii\let\=\@acciii + \parindent\z@ \parskip\z@skip + \everypar{}% + \linewidth\hsize + \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \parfillskip\@flushglue \lineskip\normallineskip + \baselineskip\normalbaselineskip + \sloppy} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\rule}{Make \rule robust}% +\DeclareRobustCommand\rule{\@ifnextchar[\@rule{\@rule[\z@]}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\rule}{Make \rule robust}% +\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}}% +\expandafter\let\csname rule \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\raisebox}{Make \raisebox robust}% +\DeclareRobustCommand\raisebox[1]{% + \leavevmode + \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\raisebox}{Make \raisebox robust}% +\def\raisebox#1{% + \leavevmode + \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}} +\expandafter\let\csname raisebox \endcsname\@undefined +\EndIncludeInRelease +%%% From File: lttab.dtx +\IncludeInRelease{2020/10/01}% + {\@itabcr}{Tabbing calc syntax}% +\def\@itabcr[#1]{\@vspace@calcify{#1}\@startline\ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@itabcr}{Tabbing calc syntax}% + +\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\pushtabs}{Make commands robust}% +\DeclareRobustCommand\pushtabs{% + \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup + \@contfield} +\DeclareRobustCommand\poptabs{\@stopfield\@addfield + \ifnum \@tabpush >\z@ + \endgroup + \global\advance\@tabpush \m@ne + \ifnum \@curtab >\@hightab + \global \@curtab \@hightab + \@badtab + \fi + \else + \@badpoptabs + \fi + \@contfield} +\DeclareRobustCommand\kill{\@stopfield\@startline\ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\pushtabs}{Make commands robust}% + +\kernel@make@fragile\pushtabs +\kernel@make@fragile\poptabs +\kernel@make@fragile\kill + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@yargarraycr}{tabular support calc syntax}% +\def\@yargarraycr#1{\cr\noalign{\@vspace@calcify{#1}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@yargarraycr}{tabular support calc syntax}% + +\def\@yargarraycr#1{\cr\noalign{\vskip #1}} +\EndIncludeInRelease +%%% From File: ltpictur.dtx +\IncludeInRelease{2020/10/01}% + {\@defaultunitsset}{default units}% +\def\@defaultunitsset#1#2#3{% + \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@defaultunitsset}{default units}% +\let\@defaultunitsset\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@picture}{default units}% +\def\@picture(#1,#2)(#3,#4){% + \@defaultunitsset\@picht{#2}\unitlength + \@defaultunitsset\@tempdimc{#1}\unitlength + \setbox\@picbox\hb@xt@\@tempdimc\bgroup + \@defaultunitsset\@tempdimc{#3}\unitlength + \hskip -\@tempdimc + \@defaultunitsset\@tempdimc{#4}\unitlength + \lower\@tempdimc\hbox\bgroup + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@picture}{default units}% +\def\@picture(#1,#2)(#3,#4){% + \@picht#2\unitlength + \setbox\@picbox\hb@xt@#1\unitlength\bgroup + \hskip -#3\unitlength + \lower #4\unitlength\hbox\bgroup + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\put}{default units}% +\expandafter\let\csname put \endcsname\@undefind +\long\def\put(#1,#2)#3{% + \@killglue + \@defaultunitsset\@tempdimc{#2}\unitlength + \raise\@tempdimc + \hb@xt@\z@{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \kern\@tempdimc + #3\hss}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\put}{default units}% +\expandafter\let\csname put \endcsname\@undefind +\long\def\put(#1,#2)#3{% + \@killglue\raise#2\unitlength + \hb@xt@\z@{\kern#1\unitlength #3\hss}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\multiput}{default units}% +\expandafter\let\csname multiput \endcsname\@undefind +\def\multiput(#1,#2)#3{% + \@defaultunitsset\@xdim{#1}\unitlength + \@defaultunitsset\@ydim{#2}\unitlength + \@multiput(} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\multiput}{default units}% +\expandafter\let\csname multiput \endcsname\@undefind +\def\multiput(#1,#2)#3{% + \@xdim #1\unitlength + \@ydim #2\unitlength + \@multiput(} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@multiput}{default units}% +\long\def\@multiput(#1,#2)#3#4{% + \@killglue\@multicnt #3\relax + \@whilenum \@multicnt >\z@\do + {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% + \advance\@multicnt\m@ne + \@defaultunitsset{\advance\@xdim}{#1}\unitlength + \@defaultunitsset{\advance\@ydim}{#2}\unitlength}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@multiput}{default units}% +\long\def\@multiput(#1,#2)#3#4{% + \@killglue\@multicnt #3\relax + \@whilenum \@multicnt >\z@\do + {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% + \advance\@multicnt\m@ne + \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}% + \ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@istackcr}{\shortstack calc support}% +\def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@istackcr}{\shortstack calc support}% + +\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\line}{default units}% +\expandafter\let\csname line \endcsname\@undefind +\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@defaultunitsset\@linelen{#3}\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + \fi + \fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\line}{default units}% +\expandafter\let\csname line \endcsname\@undefind +\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + \fi + \fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\vector}{default units}% +\expandafter\let\csname vector \endcsname\@undefind +\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi + \ifnum\@tempcnta<5\relax + \@defaultunitsset\@linelen{#3}\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + \fi + \fi + \else\@badlinearg\fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\vector}{default units}% +\expandafter\let\csname vector \endcsname\@undefind +\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi + \ifnum\@tempcnta<5\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + \fi + \fi + \else\@badlinearg\fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\dashbox}{default units}% +\expandafter\let\csname dashbox \endcsname\@undefind +\def\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip +\lineskip \z@skip +\@defaultunitsset\@dashdim{#2}\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@defaultunitsset\@dashdim{#1}\unitlength +\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ \fi -\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@ +\setbox\@dashbox \hbox{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc + \hskip\@tempdimc}% +\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@defaultunitsset\@dashdim{#3}\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@defaultunitsset\@dashdim{#1}\unitlength +\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ \fi -\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@ +\@defaultunitsset\@tempdimb{#1}\unitlength +\setbox\@dashbox\hbox{% + \vrule \@width \@wholewidth \@height\@tempdimb}% +\@tempcnta\z@ +\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt +\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt +\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}}\@makepicbox(#2,#3)} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\dashbox}{default units}% +\expandafter\let\csname dashbox \endcsname\@undefind +\def\dashbox#1(#2,#3){% +\leavevmode\hb@xt@\z@{\baselineskip \z@skip +\lineskip \z@skip +\@dashdim #2\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{% + \vrule \@height \@halfwidth \@depth \@halfwidth + \@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ \fi -\def\newcatcodetable#1{% - \e@alloc\catcodetable\chardef - \e@alloc@ccodetable@count\m@ne{"8000}#1% - \initcatcodetable\allocationnumber +\setbox\@dashbox \hbox{% + \vrule \@height \@halfwidth \@depth \@halfwidth + \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@dashdim #3\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox\hbox{\vrule \@width \@wholewidth +\@height #1\unitlength}\@tempcnta\z@ +\put(0,0){% + \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt + \do{\vskip #1\unitlength\copy\@dashbox + \advance\@tempcnta\@ne }% + \vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){% + \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt + \do{\vskip #1\unitlength\copy\@dashbox + \advance\@tempcnta \@ne }% + \vskip\@dashdim}}}\@makepicbox(#2,#3)} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@ovhlinetrue}% + {Avoid almost zero length leaders}% +\newif\if@ovvline \@ovvlinetrue +\newif\if@ovhline \@ovhlinetrue +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovhlinetrue}% + {Avoid almost zero length leaders}% +\let\if@ovvline\@undefined +\let\if@ovhline\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@oval}{default units}% +\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@ovvlinefalse \@ovhlinefalse + \@tfor\reserved@a :=#3\do{% + \csname @ov\reserved@a false\endcsname}% + \@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@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \ifdim \@ovdx >\z@ \@ovhlinetrue \fi + \ifdim \@ovdy >\z@ \@ovvlinetrue \fi + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@oval}{default units}% +\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@ovvlinefalse \@ovhlinefalse + \@tfor\reserved@a :=#3\do{% + \csname @ov\reserved@a false\endcsname}% + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue + \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue + \fi\fi + \advance \@tempdimb -2\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \ifdim \@ovdx >\z@ \@ovhlinetrue \fi + \ifdim \@ovdy >\z@ \@ovvlinetrue \fi + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl + \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx + \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@oval}{default units}% +\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@tfor\reserved@a :=#3\do + {\csname @ov\reserved@a false\endcsname}% + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi + \advance \@tempdimb -2\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl + \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx + \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@ovvert}{Avoid almost zero length leaders}% +\def\@ovvert#1#2{\vbox to\@ovyy{% + \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax + \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip + \else \kern \@ovri \kern \@ovdy \fi + \if@ovvline \leaders\vrule \@width \@wholewidth \fi + \vfil \nointerlineskip + \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax + \hbox{\char \@tempcntb}% + \else \kern \@ovdy \kern \@ovro \fi}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovvert}{Avoid almost zero length leaders}% +\def\@ovvert#1#2{\vbox to\@ovyy{% + \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax + \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip + \else \kern \@ovri \kern \@ovdy \fi + \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip + \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax + \hbox{\char \@tempcntb}% + \else \kern \@ovdy \kern \@ovro \fi}} +\EndIncludeInRelease +\IncludeInRelease{2016/03/31}% + {\@ovhorz}{Avoid almost zero length leaders}% +\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro + \if@ovr \else \kern \@ovdx \fi + \if@ovhline \leaders \hrule \@height \@wholewidth \fi + \hfil + \if@ovl \else \kern \@ovdx \fi + \kern \@ovri}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ovhorz}{Avoid almost zero length leaders}% +\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro + \if@ovr \else \kern \@ovdx \fi + \leaders \hrule \@height \@wholewidth \hfil + \if@ovl \else \kern \@ovdx \fi + \kern \@ovri}} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@circle}{default units}% +\def\@circle#1{% + \begingroup \boxmaxdepth \maxdimen + \@defaultunitsset\@tempdimb{#1}\unitlength + \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@circle}{default units}% +\def\@circle#1{% + \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength + \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta + \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}% + \raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@dot}{default units}% +\def\@dot#1{% + \@defaultunitsset\@tempdimb{#1}\unitlength + \@circ\@tempdimb{112}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@dot}{default units}% +\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@bezier}{default units}% +\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% + \ifnum #1=\z@ + \@defaultunitsset\@ovxx{#4}\unitlength + \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength + \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi + \@defaultunitsset\@ovdx{#6}\unitlength + \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength + \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi + \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi + \@defaultunitsset\@ovyy{#5}\unitlength + \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength + \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi + \@defaultunitsset\@ovdy{#7}\unitlength + \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength + \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi + \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi + \@multicnt + \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi + \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx + \ifnum \qbeziermax<\@multicnt + \@multicnt\qbeziermax\relax + \fi + \else \@multicnt#1\relax \fi + \@tempcnta\@multicnt \advance\@tempcnta\@ne + \@defaultunitsset\@ovdx{#4}\unitlength + \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength + \multiply\@ovdx \tw@ + \@defaultunitsset\@ovxx{#6}\unitlength + \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength + \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt + \@defaultunitsset\@ovdy{#5}\unitlength + \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength + \multiply\@ovdy \tw@ + \@defaultunitsset\@ovyy{#7}\unitlength + \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength + \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt + \setbox\@tempboxa\hbox{% + \hskip -\@halfwidth + \vrule \@height\@halfwidth + \@depth \@halfwidth + \@width \@wholewidth}% + \put(#2,#3){% + \count@\z@ + \@whilenum{\count@<\@tempcnta}\do + {\@xdim\count@\@ovxx + \advance\@xdim\@ovdx + \divide\@xdim\@multicnt + \multiply\@xdim\count@ + \@ydim\count@\@ovyy + \advance\@ydim\@ovdy + \divide\@ydim\@multicnt + \multiply\@ydim\count@ + \raise \@ydim + \hb@xt@\z@{\kern\@xdim + \unhcopy\@tempboxa\hss}% + \advance\count@\@ne}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@bezier}{default units}% +\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% + \ifnum #1=\z@ + \@ovxx #4\unitlength + \advance\@ovxx -#2\unitlength + \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi + \@ovdx #6\unitlength + \advance\@ovdx -#4\unitlength + \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi + \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi + \@ovyy #5\unitlength + \advance\@ovyy -#3\unitlength + \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi + \@ovdy #7\unitlength + \advance\@ovdy -#5\unitlength + \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi + \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi + \@multicnt + \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi + \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx + \ifnum + \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax + \fi + \else \@multicnt#1\relax \fi + \@tempcnta\@multicnt \advance\@tempcnta\@ne + \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength + \multiply\@ovdx \tw@ + \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength + \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt + \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength + \multiply\@ovdy \tw@ + \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength + \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt + \setbox\@tempboxa\hbox{% + \hskip -\@halfwidth + \vrule \@height\@halfwidth + \@depth \@halfwidth + \@width \@wholewidth}% + \put(#2,#3){% + \count@\z@ + \@whilenum{\count@<\@tempcnta}\do + {\@xdim\count@\@ovxx + \advance\@xdim\@ovdx + \divide\@xdim\@multicnt + \multiply\@xdim\count@ + \@ydim\count@\@ovyy + \advance\@ydim\@ovdy + \divide\@ydim\@multicnt + \multiply\@ydim\count@ + \raise \@ydim + \hb@xt@\z@{\kern\@xdim + \unhcopy\@tempboxa\hss}% + \advance\count@\@ne}}} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\bezier}{Make commands robust}% +\MakeRobust\bezier +\MakeRobust\circle +\MakeRobust\dashbox +\MakeRobust\line +\MakeRobust\linethickness +\MakeRobust\multiput +\MakeRobust\oval +\MakeRobust\put +\MakeRobust\qbezier +\MakeRobust\shortstack +\MakeRobust\thinlines +\MakeRobust\vector +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\bezier}{Make commands robust}% + +\kernel@make@fragile\bezier +\kernel@make@fragile\circle +\kernel@make@fragile\dashbox +\kernel@make@fragile\line +\kernel@make@fragile\linethickness +\kernel@make@fragile\multiput +\kernel@make@fragile\oval +\kernel@make@fragile\put +\kernel@make@fragile\qbezier +\kernel@make@fragile\shortstack +\kernel@make@fragile\thinlines +\kernel@make@fragile\vector + +\EndIncludeInRelease +%%% From File: ltthm.dtx +%%% From File: ltsect.dtx +\IncludeInRelease{2019/10/01}% + {\title}{Make commands robust}% +\DeclareRobustCommand\title[1]{\gdef\@title{#1}} +\DeclareRobustCommand*\author[1]{\gdef\@author{#1}} +\DeclareRobustCommand*\date[1]{\gdef\@date{#1}} +\DeclareRobustCommand\thanks[1]{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{#1}}% } -\newcatcodetable\catcodetable@initex -\newcatcodetable\catcodetable@string -\begingroup - \def\setrangecatcode#1#2#3{% - \ifnum#1>#2 % - \expandafter\@gobble +\DeclareRobustCommand\and{% % \begin{tabular} + \end{tabular}% + \hskip 1em \@plus.17fil% + \begin{tabular}[t]{c}}% % \end{tabular} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\title}{Make commands robust}% + +\kernel@make@fragile\title +\kernel@make@fragile\author +\kernel@make@fragile\date +\kernel@make@fragile\thanks +\kernel@make@fragile\and + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\addcontentsline}{fourth argument}% +\def\addcontentsline#1#2#3{% + \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}% + \protected@file@percent}} +\EndIncludeInRelease +\IncludeInRelease{2018/12/01}% + {\addcontentsline}{Mask line endings}% + \def\addcontentsline#1#2#3{% + \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}% + \protected@file@percent}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\addcontentsline}{Mask line endings}% +\def\addcontentsline#1#2#3{% + \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}} +\EndIncludeInRelease +\IncludeInRelease{2018/12/01}% + {\@dottedtocline}{Prevent protrusion}% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5% + \kern-\p@\kern\p@}% + \par}% + \fi} + +\DeclareRobustCommand\noprotrusion{\leavevmode\kern-\p@\kern\p@} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@dottedtocline}{Prevent protrusion}% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} + +\let\noprotrusion\@undefined +\EndIncludeInRelease +%%% From File: ltfloat.dtx +\IncludeInRelease{2015/01/01}% + {\@xfloat}{Check float options}% +\def\@xfloat #1[#2]{% + \@nodocument + \def \@captype {#1}% + \def \@fps {#2}% + \@onelevel@sanitize \@fps + \def \reserved@b {!}% + \ifx \reserved@b \@fps + \@fpsadddefault + \else + \ifx \@fps \@empty + \@fpsadddefault + \fi + \fi + \ifhmode + \@bsphack + \@floatpenalty -\@Mii + \else + \@floatpenalty-\@Miii + \fi + \ifinner + \@parmoderr\@floatpenalty\z@ + \else + \@next\@currbox\@freelist + {% + \@tempcnta \sixt@@n + \expandafter \@tfor \expandafter \reserved@a + \expandafter :\expandafter =\@fps + \do + {% + \if \reserved@a h% + \ifodd \@tempcnta + \else + \advance \@tempcnta \@ne + \fi + \else\if \reserved@a t% + \@setfpsbit \tw@ + \else\if \reserved@a b% + \@setfpsbit 4% + \else\if \reserved@a p% + \@setfpsbit 8% + \else\if \reserved@a !% + \ifnum \@tempcnta>15 + \advance\@tempcnta -\sixt@@n\relax + \fi + \else + \@latex@error{Unknown float option `\reserved@a'}% + {Option `\reserved@a' ignored and `p' used.}% + \@setfpsbit 8% + \fi\fi\fi\fi\fi + }% + \@tempcntb \csname ftype@\@captype \endcsname + \multiply \@tempcntb \@xxxii + \advance \@tempcnta \@tempcntb + \global \count\@currbox \@tempcnta + }% + \@fltovf + \fi + \global \setbox\@currbox + \color@vbox + \normalcolor + \vbox \bgroup + \hsize\columnwidth + \@parboxrestore + \@floatboxreset +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@xfloat}{Check float options}% +\def\@xfloat #1[#2]{% + \@nodocument + \def \@captype {#1}% + \def \@fps {#2}% + \@onelevel@sanitize \@fps + \def \reserved@b {!}% + \ifx \reserved@b \@fps + \@fpsadddefault + \else + \ifx \@fps \@empty + \@fpsadddefault + \fi + \fi + \ifhmode + \@bsphack + \@floatpenalty -\@Mii + \else + \@floatpenalty-\@Miii + \fi + \ifinner + \@parmoderr\@floatpenalty\z@ + \else + \@next\@currbox\@freelist + {% + \@tempcnta \sixt@@n + \expandafter \@tfor \expandafter \reserved@a + \expandafter :\expandafter =\@fps + \do + {% + \if \reserved@a h% + \ifodd \@tempcnta + \else + \advance \@tempcnta \@ne + \fi + \fi + \if \reserved@a t% + \@setfpsbit \tw@ + \fi + \if \reserved@a b% + \@setfpsbit 4% + \fi + \if \reserved@a p% + \@setfpsbit 8% + \fi + \if \reserved@a !% + \ifnum \@tempcnta>15 + \advance\@tempcnta -\sixt@@n\relax + \fi + \fi + }% + \@tempcntb \csname ftype@\@captype \endcsname + \multiply \@tempcntb \@xxxii + \advance \@tempcnta \@tempcntb + \global \count\@currbox \@tempcnta + }% + \@fltovf + \fi + \global \setbox\@currbox + \color@vbox + \normalcolor + \vbox \bgroup + \hsize\columnwidth + \@parboxrestore + \@floatboxreset +}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\end@dblfloat}{float order in 2-column}% +\def\end@dblfloat{% + \if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty <\z@ + \@largefloatcheck + \global\dp\@currbox1sp % + \@cons\@currlist\@currbox + \ifnum\@floatpenalty <-\@Mii + \penalty -\@Miv + \@tempdima\prevdepth + \vbox{}% + \prevdepth\@tempdima + \penalty\@floatpenalty + \else + \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack + \fi + \fi + \else + \end@float + \fi +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\end@dblfloat}{float order in 2-column}% +\def\end@dblfloat{% +\if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty <\z@ + \@largefloatcheck + \@cons\@dbldeferlist\@currbox + \fi + \ifnum \@floatpenalty =-\@Mii \@Esphack\fi +\else + \end@float +\fi +}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@dblfloatplacement}{float order in 2-column}% +\def\@dblfloatplacement{\global\@dbltopnum\c@dbltopnumber + \global\@dbltoproom \dbltopfraction\@colht + \@textmin \@colht + \advance \@textmin -\@dbltoproom + \@fpmin \dblfloatpagefraction\textheight + \@fptop \@dblfptop + \@fpsep \@dblfpsep + \@fpbot \@dblfpbot + \def\f@depth{1sp}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@dblfloatplacement}{float order in 2-column}% +\def \@dblfloatplacement {% + \global \@dbltopnum \c@dbltopnumber + \global \@dbltoproom \dbltopfraction\@colht + \@textmin \@colht + \advance \@textmin -\@dbltoproom + \@fpmin \dblfloatpagefraction\textheight + \@fptop \@dblfptop + \@fpsep \@dblfpsep + \@fpbot \@dblfpbot +}% +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@textsuperscript}{superscript baseline}% +\def\@textsuperscript#1{% + {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\sf@size#1}}}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@textsuperscript}{superscript baseline}% + +\def\@textsuperscript#1{% + {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\textsubscript}{\textsubscript}% +\DeclareRobustCommand*\textsubscript[1]{% + \@textsubscript{\selectfont#1}}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\textsubscript}{\textsubscript}% +\let\textsubscript\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@textsubscript}{subscript baseline}% +\def\@textsubscript#1{% + {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\sf@size#1}}}}} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@textsubscript}{subscript baseline}% + +\def\@textsubscript#1{% + {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@textsubscript}{subscript baseline}% +\let\@textsubscript\@undefined +\EndIncludeInRelease +%%% From File: ltidxglo.dtx +%%% From File: ltbibl.dtx +%%% From File: ltpage.dtx +\IncludeInRelease{2019/10/01}% + {\markboth}{Make commands robust}% +\DeclareRobustCommand*\markboth[2]{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \unrestored@protected@xdef\@themark {{#1}{#2}}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +\DeclareRobustCommand*\markright[1]{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \expandafter\@markright\@themark {#1}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\markboth}{Make commands robust}% + +\kernel@make@fragile\markboth +\kernel@make@fragile\markright + +\EndIncludeInRelease +%%% From File: ltclass.dtx + +\IncludeInRelease{2020/10/01}{\@currpath}% + {Add \@currpath}% +\let\@currpath\@empty +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@currpath}% + {Add \@currpath}% +\let\@currpath\@undefined +\EndIncludeInRelease + +\IncludeInRelease{2020/10/01}{\@pushfilename}% + {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% +\def\@pushfilename{% + \@expl@push@filename@@ + \xdef\@currnamestack{% + {\@currname}% + {\@currext}% + {\the\catcode`\@}% + \@currnamestack}% + \xdef\@kernel@currpathstack{% + {\@currpath}% + \@kernel@currpathstack}% + \@expl@push@filename@aux@@} +\EndIncludeInRelease + +\IncludeInRelease{2020/02/02}{\@pushfilename}% + {Add \@expl@push@filename@@}% +\def\@pushfilename{% + \@expl@push@filename@@ + \xdef\@currnamestack{% + {\@currname}% + {\@currext}% + {\the\catcode`\@}% + \@currnamestack}% + \@expl@push@filename@aux@@} +\EndIncludeInRelease + +\IncludeInRelease{0000/00/00}{\@pushfilename}% + {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% +\def\@pushfilename{% + \xdef\@currnamestack{% + {\@currname}% + {\@currext}% + {\the\catcode`\@}% + \@currnamestack}} +\EndIncludeInRelease +\@onlypreamble\@pushfilename + +\IncludeInRelease{2020/10/01}{\@popfilename}% + {Add \@expl@pop@filename@@}% +\def\@popfilename{\@expl@@@hook@curr@name@pop@@ + \expandafter\@p@pfilename\@currnamestack\@nil + \expandafter\@p@pfilepath\@kernel@currpathstack\@nil + \@expl@pop@filename@@} +\EndIncludeInRelease + +\IncludeInRelease{2020/02/02}{\@popfilename}% + {Add \@expl@push@filename@@}% +\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil + \@expl@pop@filename@@} +\EndIncludeInRelease + +\IncludeInRelease{0000/00/00}{\@popfilename}% + {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}% +\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} +\EndIncludeInRelease +\@onlypreamble\@popfilename + +\IncludeInRelease{2020/10/01}{\@kernel@currpathstack}% + {Add \@kernel@currpathstack}% +\gdef\@kernel@currpathstack{} +\def\@p@pfilepath#1{% + \gdef\@currpath{#1}\@p@pfilepath@aux\@empty} +\def\@p@pfilepath@aux#1\@nil{% + \xdef\@kernel@currpathstack{#1}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@kernel@currpathstack}% + {Add \@kernel@currpathstack}% +\let\@kernel@currpathstack\@undefined +\let\@p@pfilepath\@undefined +\let\@p@pfilepath@aux\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\IfFormatAtLeastTF}{Test format date}% +\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} +\let\IfPackageAtLeastTF\@ifpackagelater +\let\IfClassAtLeastTF\@ifclasslater +\@onlypreamble\IfFormatAtLeastTF +\@onlypreamble\IfPackageAtLeastTF +\@onlypreamble\IfClassAtLeastTF +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\IfFormatAtLeastTF}{Test format date}% +\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} +\let\IfPackageAtLeastTF\@ifpackagelater +\let\IfClassAtLeastTF\@ifclasslater +\EndIncludeInRelease +\IncludeInRelease{2018/04/01}% + {\@ifl@t@r}{Guard against bad input}% +\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} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@ifl@t@r}{Guard against bad input}% +\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} +\let\@parse@version@\@undefined +\EndIncludeInRelease +\IncludeInRelease{2017/01/01}% + {\@if@pti@ns}{Spaces in option clash check}% +\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} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@if@pti@ns}{Spaces in option clash check}% +\def\@if@pti@ns#1#2{% + \let\reserved@a\@firstoftwo + \@for\reserved@b:=#2\do{% + \ifx\reserved@b\@empty + \else + \expandafter\in@\expandafter + {\expandafter,\reserved@b,}{,#1,}% + \ifin@ \else - \expandafter\@firstofone + \let\reserved@a\@secondoftwo \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 + \fi + }% + \reserved@a} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\ProvidesPackage}{Check name with \strcmp}% +\def\ProvidesPackage#1{% + \xdef\@gtempa{#1}% + \@expandtwoargs\@expl@str@if@eq@@nnTF + {\@gtempa}{\@currpath\@currname}{}{% + \@latex@warning@no@line{You have requested + \@cls@pkg\space`\@currpath\@currname',\MessageBreak + but the \@cls@pkg\space provides `#1'}% + }% + \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] +\@onlypreamble\ProvidesPackage +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\ProvidesPackage}{Undo: check name with \strcmp}% +\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[]}}%] +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@pr@videpackage}{Allow for package subsitution}% +\def\@pr@videpackage[#1]{% + \expandafter\protected@xdef % <-- protected... + \csname ver@\@currname.\@currext\endcsname{#1}% Loaded package + \expandafter\let + \csname ver@\@currpkg@reqd\expandafter\endcsname % Requested package + \csname ver@\@currname.\@currext\endcsname + \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 } +\EndIncludeInRelease +\IncludeInRelease{2020/02/02}% + {\@pr@videpackage}{Protection for package info}% + +\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} + +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@pr@videpackage}{Protection for package info}% + +\def\@pr@videpackage[#1]{% + \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}% + \ifx\@currext\@clsextension + \typeout{Document Class: \@gtempa\space#1}% + \else + \wlog{Package: \@gtempa\space#1}% + \fi} +\let\protected@wlog\@undefined + +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\ProvidesClass}{Track \ProvidesPackage}% +\let\ProvidesClass\ProvidesPackage +\@onlypreamble\ProvidesClass +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}{\@pass@ptions} + {Add file replacement in \@pass@ptions}% +\def\@pass@ptions#1#2#3{% + \@expl@@@filehook@set@curr@file@@nNN + {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% + \reserved@a\reserved@b + \@expl@@@filehook@clear@replacement@flag@@ + \expandafter\xdef\csname opt@\reserved@a\endcsname{% + \@ifundefined{opt@\reserved@a}\@empty + {\csname opt@\reserved@a\endcsname,}% + \zap@space#2 \@empty}% + \expandafter\let + \csname opt@#3.#1\expandafter\endcsname + \csname opt@\reserved@a\endcsname} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@pass@ptions} + {\@pass@ptions}% +\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}} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@process@pti@ns}{Unused options issue}% +\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 +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@process@pti@ns}{Unused options issue}% + +\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}} +\EndIncludeInRelease +\IncludeInRelease{2017/01/01}% + {\ExecuteOptions}{Spaces in \ExecuteOptions}% +\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} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\ExecuteOptions}{Spaces in \ExecuteOptions}% +\def\ExecuteOptions#1{% + \def\reserved@a##1\@nil{% + \@for\CurrentOption:=#1\do + {\csname ds@\CurrentOption\endcsname}% + \edef\CurrentOption{##1}}% + \expandafter\reserved@a\CurrentOption\@nil} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\RequirePackageWithOptions}{Unused options issue}% +\def\RequirePackageWithOptions{% + \AtEndOfPackage{\expandafter\let + \csname unprocessedoptions-\@currname.\@currext\endcsname + \relax}% + \@loadwithoptions\@pkgextension\RequirePackage} +\@onlypreamble\RequirePackageWithOptions +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\RequirePackageWithOptions}{Unused options issue}% + +\def\RequirePackageWithOptions{% + \AtEndOfPackage{\let\@unprocessedoptions\relax}% + \@loadwithoptions\@pkgextension\RequirePackage} +\EndIncludeInRelease +\IncludeInRelease{2017/01/01}% + {\@fileswith@pti@ns}{ifx tests in \@fileswith@pti@ns}% +\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 - \expandafter\parseunicodedataIV + \def\reserved@a{% + \@onefilewithoptions#3[{#2}][{#4}]#1}% \fi - {#1}#2\relax% - }% - \def\parseunicodedataIII#1#2#3\relax{% - \ifnum 0% - \if L#21\fi - \if M#21\fi - >0 % - \catcode"#1=11 % + \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} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@fileswith@pti@ns}{ifx tests in \@fileswith@pti@ns}% +\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 - }% - \def\parseunicodedataIV#1#2#3\relax{% - \read\unicoderead to \unicodedataline - \if L#2% - \count0="#1 % - \expandafter\parseunicodedataV\unicodedataline\relax + \else + \def\reserved@b##1,{% + \ifx\@nil##1\relax\else + \ifx\relax##1\relax\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,\@nil,}% + \fi + \reserved@a} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@onefilewithoptions}{Hooks and unused options issue}% +\def\@onefilewithoptions#1[#2][#3]#4{% + \@expl@@@filehook@set@curr@file@@nNN{#1.#4}\reserved@a\reserved@b + \edef\reserved@c{\def\noexpand\reserved@c####1% + \detokenize\expandafter{\expanded{.#4}}% + \noexpand\@nil{\def\noexpand\reserved@a{####1}}}\reserved@c + \expandafter\reserved@c\reserved@a\@nil + \@pushfilename + \xdef\@currname{\string@makeletter\reserved@a}% + \xdef\@currpath{\ifx\reserved@b\@empty\else\reserved@b/\fi}% + \global\let\@currext#4% + \@ifl@aded\@currext\@currname + {\@if@ptions\@currext{\@currname}{#2}{}% + {\@latex@error + {Option clash for \@cls@pkg\space \@currname}% + {The package \@currname\space has already been loaded + with options:\MessageBreak + \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak + There has now been an attempt to load it + with options\MessageBreak + \space\space[#2]\MessageBreak + Adding the global options:\MessageBreak + \space\space + \@ptionlist{\@currname.\@currext},#2\MessageBreak + to your \noexpand\documentclass declaration may fix this.% + \MessageBreak + Try typing \space <return> \space to proceed.}}% + \@firstofone}% + {\makeatletter + \@reset@ptions + \IfFileExists{\@currpath\@currname.\@currext}{}% + {\@missing@onefilewithoptions{#2}}% + \ifx\@currname\@empty + \expandafter\@gobble + \else + \@disable@packageload@do{\@currname.\@currext}% + {\@expl@@@filehook@file@push@@ + \set@curr@file{\@currpath\@currname.\@currext}% + \@filehook@set@CurrentFile + \expandafter\@swaptwoargs\expandafter + {\expandafter{\@currpkg@reqd}}% + {% < + \edef\@currpkg@reqd{\@currname.\@currext}% + \ifx\CurrentFile\CurrentFileUsed + \else + \filename@parse\@curr@file + \edef\@currpath{\string@makeletter\filename@area}% + \edef\@currname{\string@makeletter\filename@base}% + \edef\@currext{\string@makeletter\filename@ext}% + \fi + \load@onefile@withoptions{#2}% + \def\@currpkg@reqd%{\@currpkg@reqd} + }% > + \@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} +\let\@currpkg@reqd\@empty +\@onlypreamble\@onefilewithoptions +\let\@unprocessedoptions\@undefined +\def\@missing@onefilewithoptions#1{% + \@missingfileerror{\@currpath\@currname}\@currext + \global\let\@currpath\@missingfile@area + \global\let\@currname\@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}% + \expandafter\let + \csname opt@\@currpkg@reqd\expandafter\endcsname + \csname opt@\@currname.\@currext\endcsname + \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 - }% - \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 + \InputIfFileExists{\@currpath\@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 - \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 + \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}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@onefilewithoptions}{Hooks and unused options issue}% + +\def\load@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} + +\let \load@onefile@withoptions \@undefined +\let \@missing@onefilewithoptions \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\AtBeginDocument}{Use hook system}% +\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}} +\DeclareRobustCommand\AtEndDocument {\AddToHook{enddocument}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\AtBeginDocument}{Use hook system}% + +\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook} +\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook} + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\filec@ntents}{Define \q@curr@file directly (gh/220)}% +\def\filecontents{\@tempswatrue\@fileswtrue + \@ifnextchar[\filec@ntents@opt\filec@ntents } -\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% +\@namedef{filecontents*}{\@tempswafalse\@fileswtrue + \@ifnextchar[\filec@ntents@opt\filec@ntents } -\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% +\def\filec@ntents@opt[#1]{% + \edef\@fortmp{\zap@space#1 \@empty}% + \@for\reserved@a:=\@fortmp\do{% + \ifcsname filec@ntents@\reserved@a\endcsname + \csname filec@ntents@\reserved@a\endcsname + \else + \@latex@error{Unknown filecontents option \reserved@a}% + {Valid options are force (or overwrite), nosearch, noheader}% + \fi}% + \filec@ntents +} +\let\filec@ntents@force\@fileswfalse +\let\filec@ntents@overwrite\@fileswfalse % alternative name +\let\filec@ntents@noheader\@tempswafalse +\def\filec@ntents@nosearch{% + \let\filec@ntents@checkdir\@currdir + \def\filec@ntents@where{in current directory}} +\let\filec@ntents@checkdir\@empty +\def\filec@ntents@where{exists on the system} +\begingroup% +\@tempcnta=1 +\loop + \catcode\@tempcnta=12 % + \advance\@tempcnta\@ne % +\ifnum\@tempcnta<32 % +\repeat % +\catcode`\*=11 % +\catcode`\^^M\active% +\catcode`\^^L\active\let^^L\relax% +\catcode`\^^I\active% +\gdef\filec@ntents#1{% + \set@curr@file{\filec@ntents@checkdir#1}% + \edef\q@curr@file{"\@curr@file"}% + \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi% + \openin\@inputcheck\q@curr@file \space % + \ifeof\@inputcheck% + \@latex@warning@no@line% + {Writing file `\@currdir\@curr@file'}% + \ch@ck7\reserved@c\write\relax% + \immediate\openout\reserved@c\q@curr@file\relax% + \else% + \if@filesw% + \@latex@warning@no@line% + {File `\@curr@file' already \filec@ntents@where.\MessageBreak% + Not generating it from this source}% + \let\write\@gobbletwo% + \let\closeout\@gobble% + \else% + \edef\reserved@a{#1}% + \edef\reserved@a{\detokenize\expandafter{\reserved@a}}% + \edef\reserved@b{\detokenize\expandafter{\jobname}}% + \ifx\reserved@a\reserved@b% + \@fileswtrue% + \else% + \edef\reserved@b{\reserved@b\detokenize{.tex}}% + \ifx\reserved@a\reserved@b + \@fileswtrue% + \fi% + \fi% + \ch@ck7\reserved@c\write\relax% + \if@filesw% % Foul ... trying to overwrite \jobname! + \@latex@error{Trying to overwrite `\jobname.tex'}{You can't % + write to the file you are reading from!\MessageBreak% + Data is written to screen instead.}% + \else% + \@latex@warning@no@line% + {Writing or overwriting file `\@currdir\@curr@file'}% + \immediate\openout\reserved@c\q@curr@file\relax% + \fi% + \fi% + \fi% + \closein\@inputcheck% + \if@tempswa% + \immediate\write\reserved@c{% + \@percentchar\@percentchar\space% + \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J% + \@percentchar\@percentchar\space generated by the % + `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J% + \@percentchar\@percentchar\space from source `\jobname' on % + \number\year/\two@digits\month/\two@digits\day.^^J% + \@percentchar\@percentchar}% + \fi% + \let\do\@makeother\dospecials% + \count@ 128\relax% + \loop% + \catcode\count@ 11\relax% + \advance\count@ \@ne% + \ifnum\count@<\@cclvi% + \repeat% + \edef\E{\@backslashchar end\string{\@currenvir\string}}% + \edef\reserved@b{% + \def\noexpand\reserved@b% + ####1\E####2\E####3\relax}% + \reserved@b{% + \ifx\relax##3\relax% + \immediate\write\reserved@c{##1}% + \else% + \edef^^M{\noexpand\end{\@currenvir}}% + \ifx\relax##1\relax% + \else% + \@latex@warning{Writing text `##1' before % + \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}% + \immediate\write\reserved@c{##1}% + \fi% + \ifx\relax##2\relax% + \else% + \@latex@warning{% + Ignoring text `##2' after \string\end{\@currenvir}}% + \fi% + \fi% + ^^M}% + \catcode`\^^L\active% + \let\L\@undefined% + \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}% + \catcode`\^^I\active% + \let\I\@undefined% + \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}% + \catcode`\^^M\active% + \edef^^M##1^^M{% + \noexpand\reserved@b##1\E\E\relax}}% +\endgroup% +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\filec@ntents}{Spaces in file names + optional arg}% +\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% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\filec@ntents}{Spaces in file names + optional arg}% -\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"}}% +\let\filec@ntents@opt \@undefined +\let\filec@ntents@force \@undefined +\let\filec@ntents@overwrite \@undefined +\let\filec@ntents@noheader \@undefined +\let\filec@ntents@nosearch \@undefined +\let\filec@ntents@checkdir \@undefined +\let\filec@ntents@where \@undefined + +\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{% + \openin\@inputcheck#1 % + \ifeof\@inputcheck% + \@latex@warning@no@line% + {Writing file `\@currdir#1'}% + \chardef\reserved@c15 % + \ch@ck7\reserved@c\write% + \immediate\openout\reserved@c#1\relax% + \else% + \closein\@inputcheck% + \@latex@warning@no@line% + {File `#1' already exists on the system.\MessageBreak% + Not generating it from this source}% + \let\write\@gobbletwo% + \let\closeout\@gobble% + \fi% + \if@tempswa% + \immediate\write\reserved@c{% + \@percentchar\@percentchar\space% + \expandafter\@gobble\string\LaTeX2e file `#1'^^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 #1}% + \immediate\write\reserved@c{##1}% + \fi% + \ifx\relax##2\relax% + \else% + \@latex@warning{% + Ignoring text `##2' after \string\end{\@currenvir}}% + \fi% + \fi% + ^^M}% + + \catcode`\^^L\active% + \let\L\@undefined% + \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}% + \catcode`\^^I\active% + \let\I\@undefined% + \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}% + \catcode`\^^M\active% + \edef^^M##1^^M{% + \noexpand\reserved@b##1\E\E\relax}}% +\endgroup% +\EndIncludeInRelease +%% +%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, +%% Phelype Oleinik & LaTeX Team +%%% From File: ltfilehook.dtx +\providecommand\ltfilehookversion{v1.0d} +\providecommand\ltfilehookdate{2020/11/24} +\IncludeInRelease{2020/10/01}% + {\CurrentFile}{Hook management file}% +\ExplSyntaxOn +\tl_new:N \CurrentFile +\tl_new:N \CurrentFilePath +\tl_new:N \CurrentFileUsed +\tl_new:N \CurrentFilePathUsed +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\CurrentFile}{Hook management file}% + +\let \CurrentFile \@undefined +\let \CurrentFilePath \@undefined +\let \CurrentFileUsed \@undefined +\let \CurrentFilePathUsed \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_file_parse_full_name:nN}{File helpers}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_file_parse_full_name:nN #1 + { + \exp_args:Nf \file_parse_full_name_apply:nN + { + \exp_args:Nf \__filehook_full_name:nn + { \file_full_name:n {#1} } {#1} + } + } +\cs_new:Npn \__filehook_full_name:nn #1 #2 + { + \tl_if_empty:nTF {#1} + { \tl_trim_spaces:n {#2} } + { \tl_trim_spaces:n {#1} } + } +\cs_new:Npn \__filehook_if_no_extension:nTF #1 + { + \exp_args:Ne \tl_if_empty:nTF + { \file_parse_full_name_apply:nN {#1} \use_iii:nnn } + } +\cs_new_protected:Npn \__filehook_drop_extension:N #1 + { + \tl_gset:Nx #1 + { + \exp_args:NV \__filehook_file_parse_full_name:nN #1 + \__filehook_drop_extension_aux:nnn + } + } +\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3 + { \tl_if_empty:nF {#1} { #1 / } #2 } +\tl_new:N \l__filehook_internal_tl +\seq_new:N \g__filehook_input_file_seq +\cs_new_protected:Npn \__filehook_file_push: + { + \seq_gpush:Nx \g__filehook_input_file_seq + { + { \CurrentFilePathUsed } { \CurrentFileUsed } + { \CurrentFilePath } { \CurrentFile } + } + } +\cs_new_protected:Npn \__filehook_file_pop: + { + \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl + { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl } + { + \msg_error:nnn { hooks } { should-not-happen } + { Tried~to~pop~from~an~empty~file~name~stack. } + } + } +\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4 + { + \tl_set:Nn \CurrentFilePathUsed {#1} + \tl_set:Nn \CurrentFileUsed {#2} + \tl_set:Nn \CurrentFilePath {#3} + \tl_set:Nn \CurrentFile {#4} + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\file_parse_full_name_apply:nN}{Roll forward help}% + +\ExplSyntaxOn +\cs_if_exist:NF\file_parse_full_name_apply:nN +{ +\cs_new:Npn \file_parse_full_name_apply:nN #1 + { + \exp_args:Ne \__file_parse_full_name_auxi:nN + { \__kernel_file_name_sanitize:n {#1} } + } +\cs_new:Npn \__file_parse_full_name_auxi:nN #1 + { + \__file_parse_full_name_area:nw { } #1 + / \s__file_stop + } +\cs_new:Npn \__file_parse_full_name_area:nw #1 #2 / #3 \s__file_stop + { + \tl_if_empty:nTF {#3} + { \__file_parse_full_name_base:nw { } #2 . \s__file_stop {#1} } + { \__file_parse_full_name_area:nw { #1 / #2 } #3 \s__file_stop } + } +\cs_new:Npn \__file_parse_full_name_base:nw #1 #2 . #3 \s__file_stop + { + \tl_if_empty:nTF {#3} + { + \tl_if_empty:nTF {#1} + { + \tl_if_empty:nTF {#2} + { \__file_parse_full_name_tidy:nnnN { } { } } + { \__file_parse_full_name_tidy:nnnN { .#2 } { } } + } + { \__file_parse_full_name_tidy:nnnN {#1} { .#2 } } + } + { \__file_parse_full_name_base:nw { #1 . #2 } #3 \s__file_stop } + } +\cs_new:Npn \__file_parse_full_name_tidy:nnnN #1 #2 #3 #4 + { + \exp_args:Nee #4 + { + \str_if_eq:nnF {#3} { / } { \use_none:n } + #3 \prg_do_nothing: + } + { \use_none:n #1 \prg_do_nothing: } + {#2} + } } -\def\now@and@everyjob#1{% - \everyjob\expandafter{\the\everyjob - #1% - }% - #1% +\ExplSyntaxOff + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\InputIfFileExists}{Hook management (files)}% +\let\InputIfFileExists\@undefined +\DeclareRobustCommand \InputIfFileExists[2]{% + \IfFileExists{#1}% + {% + \@expl@@@filehook@file@push@@ + \@filehook@set@CurrentFile + \edef\reserved@a{% + \@expl@@@filehook@file@pop@assign@@nnnn + {\CurrentFilePathUsed}% + {\CurrentFileUsed}% + {\CurrentFilePath}% + {\CurrentFile}% + \noexpand\@input@file@exists@with@hooks{\@filef@und}}% + \expandafter\@swaptwoargs\expandafter + {\reserved@a}% + {#2}% + \@expl@@@filehook@file@pop@@ + }% } +\def\@input@file@exists@with@hooks#1{% + \edef\reserved@a{\unqu@tefilef@und#1\@nil}% + \@addtofilelist{\string@makeletter\reserved@a}% + \UseHook{file/before}% + \UseHook{file/before/\CurrentFile}% + \@@input #1% <- trailing space comes from \@filef@und + \UseHook{file/after/\CurrentFile}% + \UseHook{file/after}} +\def\unqu@tefilef@und"#1" \@nil{#1} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\InputIfFileExists}{Hook management (files)}% + +\DeclareRobustCommand \InputIfFileExists[2]{% + \IfFileExists{#1}% + {% + \expandafter\@swaptwoargs\expandafter + {\@filef@und}{#2\@addtofilelist{#1}\@@input}}} +\let\@input@file@exists@with@hooks\@undefined +\let\unqu@tefilef@und\@undefined +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\InputIfFileExists}{Hook management (files)}% +\long\def \InputIfFileExists#1#2{% + \IfFileExists{#1}% + {#2\@addtofilelist{#1}\@@input \@filef@und}} +\let\@input@file@exists@with@hooks\@undefined +\let\unqu@tefilef@und\@undefined +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_subst_add:nn}{Declaring file substitution}% +\ExplSyntaxOn +\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2 + { + \group_begin: + \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } } + \int_set:Nn \tex_escapechar:D { -1 } + \cs_gset:cpx + { + @file-subst@ + \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1} + } + { \__filehook_subst_file_normalize:Nn \__filehook_file_name_compose:nnn {#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:Nn \use_ii_iii:nnn {#1} + } + \group_end: + } +\cs_new:Npn \__filehook_subst_file_normalize:Nn #1 #2 + { + \exp_after:wN \__filehook_subst_empty_name_chk:NN + \cs:w \exp_after:wN \cs_end: + \cs:w \__filehook_file_parse_full_name:nN {#2} #1 \cs_end: + } +\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2 + { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: } +\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3} +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\declare@file@substitution}{File substitution}% +\ExplSyntaxOn +\cs_new_eq:NN \declare@file@substitution \__filehook_subst_add:nn +\cs_new_eq:NN \undeclare@file@substitution \__filehook_subst_remove:n +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\declare@file@substitution}{File substitution}% + +\let \declare@file@substitution \@undefined +\let \undeclare@file@substitution \@undefined + +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\set@curr@file}{Setting current file name}% +\def\set@curr@file#1{% \begingroup - \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")} + \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}% + \@expl@@@filehook@clear@replacement@flag@@ + \endgroup} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\set@curr@file}{Setting current file name}% +\def\set@curr@file#1{% + \begingroup + \escapechar\m@ne + \xdef\@curr@file{% + \expandafter\expandafter\expandafter\unquote@name + \expandafter\expandafter\expandafter{% + \expandafter\string + \csname\@firstofone#1\@empty\endcsname}}% \endgroup +} \EndIncludeInRelease -\IncludeInRelease{0000/00/00} - {\newluafunction}{LuaTeX}% -\let\e@alloc@attribute@count\@undefined -\let\newattribute\@undefined -\let\setattribute\@undefined -\let\unsetattribute\@undefined -\let\e@alloc@ccodetable@count\@undefined -\let\newcatcodetable\@undefined -\let\catcodetable@initex\@undefined -\let\catcodetable@string\@undefined -\let\catcodetable@latex\@undefined -\let\catcodetable@atletter\@undefined -\let\e@alloc@luafunction@count\@undefined -\let\newluafunction\@undefined -\let\e@alloc@luafunction@count\@undefined -\let\newwhatsit\@undefined -\let\e@alloc@whatsit@count\@undefined -\let\newluabytecode\@undefined -\let\e@alloc@bytecode@count\@undefined -\let\newluachunkname\@undefined -\let\e@alloc@luachunk@count\@undefined -\directlua{luatexbase.uninstall()} +\IncludeInRelease{0000/00/00}% + {\set@curr@file}{Setting current file name}% +\let\set@curr@file\@undefined \EndIncludeInRelease -\IncludeInRelease{2017/01/01}% - {\fontencoding}{TU in everyjob}% -\fontencoding{TU}\let\encodingdefault\f@encoding -\ifx\directlua\@undefined\else - \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 +\IncludeInRelease{2020/10/01}% + {\@kernel@make@file@csname}{Make file csname}% +\def\@kernel@make@file@csname#1#2#3{% + \xdef#1{\expandafter\@set@curr@file@aux + \csname\expandafter#2\@firstofone#3\@nil\endcsname}} +\def\@set@curr@file@aux#1{% + \expandafter\ifx\csname\endcsname#1% + .tex\else\string#1\fi} +\def\@filehook@set@CurrentFile{% + \@expl@@@filehook@set@curr@file@@nNN{\@curr@file}% + \CurrentFileUsed\CurrentFilePathUsed + \ifx\@curr@file@reqd\@curr@file + \let\CurrentFile\CurrentFileUsed + \let\CurrentFilePath\CurrentFilePathUsed + \else + \@expl@@@filehook@set@curr@file@@nNN{\@curr@file@reqd}% + \CurrentFile\CurrentFilePath + \fi} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {@@_set_curr_file:nNN}{Set curr file}% +\ExplSyntaxOn +\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1 + { + \exp_args:Nf \__filehook_file_parse_full_name:nN {#1} + \__filehook_set_curr_file_assign:nnnNN + } +\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5 + { + \str_set:Nn #5 {#1} + \str_set:Nn #4 {#2#3} + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_resolve_file_subst:w}{Replace files detect loops}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil + { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn } +\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil + { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn } +\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3 + { \tl_if_empty:nF {#1} { #1 / } #2#3 } +\flag_new:n { __filehook_file_replaced } +\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2 + { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} } +\cs_new_protected:Npn \__filehook_clear_replacement_flag: + { \flag_clear:n { __filehook_file_replaced } } +\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3 + { + \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 } + { \__filehook_file_name_compose:nnn {#1} {#2} {#3} } + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\__filehook_file_subst_tortoise_hare:nn}{Tortoise and Hare}% +\ExplSyntaxOn +\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3 + { + \cs_if_exist:cTF { @file-subst@ #2 } + { + \flag_if_raised:nF { __filehook_file_replaced } + { \flag_raise:n { __filehook_file_replaced } } + \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } } + { + \__filehook_file_subst_loop:cc + { @file-subst@ #1 } + { @file-subst@ \use:c { @file-subst@ #2 } } + } + { \use:c { @file-subst@ #2 } } + } + { #3 } + } +\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2 + { + \token_if_eq_meaning:NNTF #1 #2 + { + .tex + \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1 + } + { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} } + } +\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc } +\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2 + { + \__kernel_msg_expandable_error:nnff { kernel } { file-cycle } + {#1} { \use:c { @file-subst@ #1 } } + \token_if_eq_meaning:NNF #1 #2 + { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 } + } +\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c } +\__kernel_msg_new:nnn { kernel } { file-cycle } + { File~loop!~#1~replaced~by~#2... } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\disable@package@load}{Disable packages}% +\def\disable@package@load#1#2{% + \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}} +\def\@disable@packageload@do#1#2{% + \@ifundefined{@pkg-disable@#1}{#2}% + {\@nameuse{@pkg-disable@#1}}} +\def\reenable@package@load#1{% + \global\expandafter\let + \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\fontencoding}{TU in everyjob}% -\fontencoding{OT1}\let\encodingdefault\f@encoding + {\disable@package@load}{Disable packages}% + +\let\disable@package@load \@undefined +\let\@disable@packageload@do\@undefined +\let\reenable@package@load \@undefined \EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\@expl@@@filehook@if@no@extension@@nTF}{2e tmp interfaces}% +\ExplSyntaxOn +\cs_new_eq:NN \@expl@@@filehook@if@no@extension@@nTF + \__filehook_if_no_extension:nTF +\cs_new_eq:NN \@expl@@@filehook@set@curr@file@@nNN + \__filehook_set_curr_file:nNN +\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@clear@replacement@flag@@ + \__filehook_clear_replacement_flag: +\cs_new_eq:NN \@expl@@@filehook@drop@extension@@N + \__filehook_drop_extension:N +\cs_new_eq:NN \@expl@@@filehook@file@push@@ + \__filehook_file_push: +\cs_new_eq:NN \@expl@@@filehook@file@pop@@ + \__filehook_file_pop: +\cs_new_eq:NN \@expl@@@filehook@file@pop@assign@@nnnn + \__filehook_file_pop_assign:nnnn +\ExplSyntaxOff +\EndIncludeInRelease +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team +%% +%%% From File: ltshipout.dtx +\providecommand\ltshipoutversion{v1.0d} +\providecommand\ltshipoutdate{2020/11/24} +\IncludeInRelease{2020/10/01}% + {\shipout}{Hook mangement (shipout)}% +\ExplSyntaxOn +\bool_new:N \g__shipout_debug_bool +\cs_new_eq:NN \__shipout_debug:n \use_none:n +\cs_new_protected:Npn \shipout_debug_on: + { + \bool_gset_true:N \g__shipout_debug_bool + \__shipout_debug_gset: + } +\cs_new_protected:Npn \shipout_debug_off: + { + \bool_gset_false:N \g__shipout_debug_bool + \__shipout_debug_gset: + } +\cs_new_protected:Npn \__shipout_debug_gset: + { + \cs_gset_protected:Npx \__shipout_debug:n ##1 + { \bool_if:NT \g__shipout_debug_bool {##1} } + } +\box_new:N \l_shipout_box +\cs_set_eq:NN \ShipoutBox \l_shipout_box +\cs_set_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_set_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 +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\shipout}{The hook management (shipout)}% + +\ifcsname tex_shipout:D\endcsname +\expandafter\let\expandafter\shipout + \csname tex_shipout:D\endcsname \fi -%%% From File: ltexpl.dtx + +\let \ShipoutBox\@undefined +\let \ReadonlyShipoutCounter \@undefined +\let \c@totalpages \@undefined +\let \thetotalpages \@undefined + +\let \DiscardShipoutBox \@undefined +\let \DebugShipoutsOn \@undefined +\let \DebugShipoutsOff \@undefined + +\DeclareRobustCommand \AtBeginDvi [1]{% + \global \setbox \@begindvibox + \vbox{\unvbox \@begindvibox #1}% +} + +\let \AtBeginShipout \@undefined +\let \AtBeginShipoutNext \@undefined + +\let \AtBeginShipoutFirst \@undefined + +\let \ShipoutBoxHeight \@undefined +\let \ShipoutBoxDepth \@undefined +\let \ShipoutBoxWidth \@undefined + +\let \AtBeginShipoutDiscard \@undefined + +\let \AtBeginShipoutAddToBox \@undefined +\let \AtBeginShipoutAddToBoxForeground \@undefined +\let \AtBeginShipoutUpperLeft \@undefined +\let \AtBeginShipoutUpperLeftForeground \@undefined + + +\let \AtEndDvi \@undefined + +\EndIncludeInRelease \IncludeInRelease{2020/10/01}% - {expl3}{Pre-load expl3}% -\expandafter\ifx\csname tex\string _let:D\endcsname\relax - \expandafter\@firstofone -\else - \GenericInfo{}{Skipping: expl3 code already part of the format}% - \expandafter\@gobble + {\AtEndDvi}{atenddvi emulation}% +\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}} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\AtEndDvi}{atenddvi emulation}% +\let \AtEndDvi \@undefined +\EndIncludeInRelease +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% From File: ltoutput.dtx +\IncludeInRelease{2015/10/01}% + {\bx@ZZ}{Extended float list}% +\let\@elt\newinsert +\ifx\numexpr\@undefined\else +\def\reserved@a{% + \@elt\bx@S\@elt\bx@T\@elt\bx@U\@elt\bx@V + \@elt\bx@W\@elt\bx@X\@elt\bx@Y\@elt\bx@Z + \@elt\bx@AA\@elt\bx@BB\@elt\bx@CC\@elt\bx@DD\@elt\bx@EE + \@elt\bx@FF\@elt\bx@GG\@elt\bx@HH\@elt\bx@II\@elt\bx@JJ + \@elt\bx@KK\@elt\bx@LL\@elt\bx@MM\@elt\bx@NN + \@elt\bx@OO\@elt\bx@PP\@elt\bx@QQ\@elt\bx@RR + \@elt\bx@SS\@elt\bx@TT\@elt\bx@UU\@elt\bx@VV + \@elt\bx@WW\@elt\bx@XX\@elt\bx@YY\@elt\bx@ZZ} +\reserved@a +\def\@elt{\noexpand\@elt\noexpand} +\edef\@freelist{\@freelist\reserved@a} \fi - {% - \IfFileExists{expl3.ltx} - {% - \ifnum0% - \ifdefined\pdffilesize 1\fi - \ifdefined\filesize 1\fi - \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi - \ifdefined\kanjiskip 1\fi - >0 % - \expandafter\@firstofone - \else - \@latex@error{% - LaTeX requires the e-TeX primitives and additional\MessageBreak - functionality available in the engines:\MessageBreak - - pdfTeX v1.40\MessageBreak - - XeTeX v0.99992\MessageBreak - - LuaTeX v0.95\MessageBreak - - e-(u)pTeX mid-2012\MessageBreak - or later% - }\@ehd \expandafter\@gobble - \fi - } - {% - \@latex@error{LaTeX requires expl3}\@ehd - \@gobble - }% - {% - \input expl3.ltx - \ifdefined\NewDocumentCommand - \else - \IfFileExists{xparse.ltx} - {\input xparse.ltx } - {}% +\let\reserved@a\relax +\let\@elt\relax +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\bx@ZZ}{Extended float list}% +\def\@freelist{% + \@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E + \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J + \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N + \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R} + \insc@unt=234 +\EndIncludeInRelease +\IncludeInRelease{2017/04/15}% + {\newpage}{Check depth of page}% +\def \newpage {% + \if@noskipsec + \ifx \@nodocument\relax + \leavevmode + \global \@noskipsecfalse + \fi + \fi + \if@inlabel + \leavevmode + \global \@inlabelfalse + \fi + \if@nobreak \@nobreakfalse \everypar{}\fi + \par + \ifdim\prevdepth>\z@ + \vskip -% + \ifdim\prevdepth>\maxdepth + \maxdepth + \else + \prevdepth + \fi + \fi + \vfil + \penalty -\@M} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\newpage}{Check depth of page}% +\def \newpage {% + \if@noskipsec + \ifx \@nodocument\relax + \leavevmode + \global \@noskipsecfalse + \fi + \fi + \if@inlabel + \leavevmode + \global \@inlabelfalse + \fi + \if@nobreak \@nobreakfalse \everypar{}\fi + \par + \vfil + \penalty -\@M} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@testwrongwidth}{float order in 2-column}% +\def\@testwrongwidth #1{% + \ifdim\dp#1=\f@depth + \else + \global\@testtrue + \fi}% +\let\f@depth\z@ +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@testwrongwidth}{float order in 2-column}% +\let\@testwrongwidth\@undefined +\let\f@depth\@undefined +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\@doclearpage}% + {float order in 2-column}% +\def \@doclearpage {% + \ifvoid\footins + \ifvbox\@kludgeins + {\setbox \@tempboxa \box \@kludgeins}% + \fi + \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + \setbox\@tempboxa\box\@cclv + \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht + \ifx \@currlist\@empty + \else + \@latexerr{Float(s) lost}\@ehb + \global \let \@currlist \@empty + \fi + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% + \if@twocolumn + \if@firstcolumn + \xdef\@deferlist{\@dbltoplist\@deferlist}% + \global \let \@dbltoplist \@empty + \global \@colht \textheight + \begingroup + \@dblfloatplacement + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@outputpage + \@makefcolumn\@deferlist}% + \endgroup + \else + \vbox{}\clearpage \fi + \fi + \ifx\@deferlist\@empty \else\clearpage \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@doclearpage}% + {float order in 2-column}% +\def \@doclearpage {% + \ifvoid\footins + \ifvbox\@kludgeins + {\setbox \@tempboxa \box \@kludgeins}% + \fi + \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + \setbox\@tempboxa\box\@cclv + \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht + \ifx \@currlist\@empty + \else + \@latexerr{Float(s) lost}\@ehb + \global \let \@currlist \@empty + \fi + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi + {\@opcol\@makefcolumn\@deferlist}% + \if@twocolumn + \if@firstcolumn + \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% + \global \let \@dbltoplist \@empty + \global \@colht \textheight + \begingroup + \@dblfloatplacement + \@makefcolumn\@dbldeferlist + \@whilesw\if@fcolmade \fi + {\@outputpage\@makefcolumn\@dbldeferlist}% + \endgroup + \else + \vbox{}\clearpage + \fi + \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi + }% +\EndIncludeInRelease +\IncludeInRelease{2017/04/15}% + {\@outputpage}{Reset language for hyphenation}% +\def\@outputpage{% +\begingroup + \let \protect \noexpand + \language\document@default@language + \@resetactivechars + \global\let\@@if@newlist\if@newlist + \global\@newlistfalse + \@parboxrestore + \shipout \vbox{% + \set@typeset@protect + \aftergroup \endgroup + \aftergroup \set@typeset@protect + \if@specialpage + \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% + \fi + \if@twoside + \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot + \let\@themargin\oddsidemargin + \else \let\@thehead\@evenhead + \let\@thefoot\@evenfoot \let\@themargin\evensidemargin + \fi + \fi + \reset@font + \normalsize + \normalsfcodes + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble + \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ + \@begindvi + \vskip \topmargin + \moveright\@themargin \vbox {% + \setbox\@tempboxa \vbox to\headheight{% + \vfil + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thehead}% + \color@endbox + }% + \dp\@tempboxa \z@ + \box\@tempboxa + \vskip \headsep + \box\@outputbox + \baselineskip \footskip + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thefoot}% + \color@endbox }% - } + }% + \global\let\if@newlist\@@if@newlist + \global \@colht \textheight + \stepcounter{page}% + \let\firstmark\botmark +} \EndIncludeInRelease - -\IncludeInRelease{2020/02/02}% - {expl3}{Pre-load expl3}% -\IfFileExists{expl3.ltx} - {% - \ifnum0% - \ifdefined\pdffilesize 1\fi - \ifdefined\filesize 1\fi - \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi - >0 % - \else - \message{Skipping expl3-dependent extensions} - \expandafter\@gobbletwo +\IncludeInRelease{0000/00/00}% + {\@outputpage}{Reset language for hyphenation}% +\def\@outputpage{% +\begingroup + \let \protect \noexpand + \@resetactivechars + \global\let\@@if@newlist\if@newlist + \global\@newlistfalse + \@parboxrestore + \shipout \vbox{% + \set@typeset@protect + \aftergroup \endgroup + \aftergroup \set@typeset@protect + \if@specialpage + \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% + \fi + \if@twoside + \ifodd\count\z@ + \let\@thehead\@oddhead \let\@thefoot\@oddfoot + \let\@themargin\oddsidemargin + \else \let\@thehead\@evenhead + \let\@thefoot\@evenfoot \let\@themargin\evensidemargin \fi - } - {% - \message{Skipping expl3-dependent extensions}% - \@gobbletwo + \fi + \reset@font + \normalsize + \normalsfcodes + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble + \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ + \@begindvi + \vskip \topmargin + \moveright\@themargin \vbox {% + \setbox\@tempboxa \vbox to\headheight{% + \vfil + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thehead}% + \color@endbox + }% + \dp\@tempboxa \z@ + \box\@tempboxa + \vskip \headsep + \box\@outputbox + \baselineskip \footskip + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thefoot}% + \color@endbox + }% + }% + \global\let\if@newlist\@@if@newlist + \global \@colht \textheight + \stepcounter{page}% + \let\firstmark\botmark +} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@startdblcolumn}{float order in 2-column}% +\def \@startdblcolumn {% + \@tryfcolumn \@deferlist + \if@fcolmade + \else + \begingroup + \let \reserved@b \@deferlist + \global \let \@deferlist \@empty + \let \@elt \@sdblcolelt + \reserved@b + \endgroup + \fi +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@startdblcolumn}{float order in 2-column}% +\def \@startdblcolumn {% +% \global \@colht \textheight + \@tryfcolumn \@dbldeferlist + \if@fcolmade + \else + \begingroup + \let \reserved@b \@dbldeferlist + \global \let \@dbldeferlist \@empty + \let \@elt \@sdblcolelt + \reserved@b + \endgroup + \fi +}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{\@xtryfc}% + {float order in 2-column}% +\def\@xtryfc #1{% + \@next\reserved@a\@trylist{}{}% + \@currtype \count #1% + \divide\@currtype\@xxxii + \multiply\@currtype\@xxxii + \@bitor \@currtype \@failedlist + \@testfp #1% + \@testwrongwidth #1% + \ifdim \ht #1>\@colht + \@testtrue + \fi + \if@test + \@cons\@failedlist #1% + \else + \@ytryfc #1% + \fi}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@xtryfc}% + {float order in 2-column}% +\def\@xtryfc #1{% + \@next\reserved@a\@trylist{}{}% + \@currtype \count #1% + \divide\@currtype\@xxxii + \multiply\@currtype\@xxxii + \@bitor \@currtype \@failedlist + \@testfp #1% + \ifdim \ht #1>\@colht + \@testtrue + \fi + \if@test + \@cons\@failedlist #1% + \else + \@ytryfc #1% + \fi}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}{@ztryfc}% + {float order in 2-column}% +\def\@ztryfc #1{% + \@tempcnta\count #1% + \divide\@tempcnta\@xxxii + \multiply\@tempcnta\@xxxii + \@bitor \@tempcnta {\@failedlist \@flfail}% + \@testfp #1% + \@testwrongwidth #1% + \@tempdimb\@tempdima + \advance\@tempdimb\ht #1% + \advance\@tempdimb\@fpsep + \ifdim \@tempdimb >\@colht + \@testtrue + \fi + \if@test + \@cons\@flfail #1% + \else + \@cons\@flsucceed #1% + \@tempdima\@tempdimb + \fi}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{@ztryfc}% + {float order in 2-column}% +\def\@ztryfc #1{% + \@tempcnta \count#1% + \divide\@tempcnta\@xxxii + \multiply\@tempcnta\@xxxii + \@bitor \@tempcnta {\@failedlist \@flfail}% + \@testfp #1% + \@tempdimb\@tempdima + \advance\@tempdimb \ht#1% + \advance\@tempdimb\@fpsep + \ifdim \@tempdimb >\@colht + \@testtrue + \fi + \if@test + \@cons\@flfail #1% + \else + \@cons\@flsucceed #1% + \@tempdima\@tempdimb + \fi}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@addtocurcol}{float order in 2-column}% +\def \@addtocurcol {% + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \advance \@textmin \@textfloatsheight + \@reqcolroom \@pageht + \ifdim \@textmin>\@reqcolroom + \@reqcolroom \@textmin + \fi + \advance \@reqcolroom \ht\@currbox + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum \@colnum>\z@ + \@bitor\@currtype\@deferlist + \@testwrongwidth\@currbox + \if@test + \else + \@bitor\@currtype\@botlist + \if@test + \@addtobot + \else + \ifodd \count\@currbox + \advance \@reqcolroom \intextsep + \ifdim \@colroom>\@reqcolroom + \global \advance \@colnum \m@ne + \global \advance \@textfloatsheight \ht\@currbox + \global \advance \@textfloatsheight 2\intextsep + \@cons \@midlist \@currbox + \if@nobreak + \nobreak + \@nobreakfalse + \everypar{}% + \else + \addpenalty \interlinepenalty + \fi + \vskip \intextsep + \box\@currbox + \penalty\interlinepenalty + \vskip\intextsep + \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi + \outputpenalty \z@ + \@inserttrue + \fi + \fi + \if@insert + \else + \@addtotoporbot + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@resethfps + \@cons\@deferlist\@currbox + \fi +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@addtocurcol}{float order in 2-column}% +\def \@addtocurcol {% + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \advance \@textmin \@textfloatsheight + \@reqcolroom \@pageht + \ifdim \@textmin>\@reqcolroom + \@reqcolroom \@textmin + \fi + \advance \@reqcolroom \ht\@currbox + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum \@colnum>\z@ + \@bitor\@currtype\@deferlist + \if@test + \else + \@bitor\@currtype\@botlist + \if@test + \@addtobot + \else + \ifodd \count\@currbox + \advance \@reqcolroom \intextsep + \ifdim \@colroom>\@reqcolroom + \global \advance \@colnum \m@ne + \global \advance + \@textfloatsheight\ht\@currbox + \global \advance + \@textfloatsheight 2\intextsep + \@cons \@midlist \@currbox + \if@nobreak + \nobreak + \@nobreakfalse + \everypar{}% + \else + \addpenalty\interlinepenalty + \fi + \vskip \intextsep + \box\@currbox + \penalty\interlinepenalty + \vskip\intextsep + \ifnum\outputpenalty + <-\@Mii \vskip + -\parskip\fi + \outputpenalty \z@ + \@inserttrue + \fi + \fi + \if@insert + \else + \@addtobot + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@resethfps + \@cons\@deferlist\@currbox + \fi }% -\input{expl3.ltx} \EndIncludeInRelease -\ExplSyntaxOn -\IncludeInRelease{2020/10/01}{expl3~2020-10-01}% - {expl3~macros~added~for~the~2020-10-01~release}% -\cs_gset_eq:NN \@expl@cs@to@str@@N \cs_to_str:N -\cs_gset_eq:NN \@expl@str@if@eq@@nnTF \str_if_eq:nnTF -\cs_gset_eq:NN \@expl@cs@prefix@spec@@N \cs_prefix_spec:N -\cs_gset_eq:NN \@expl@cs@argument@spec@@N \cs_argument_spec:N -\cs_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N -\cs_gset_eq:NN \@expl@str@map@function@@NN \str_map_function:NN -\cs_gset_eq:NN \@expl@char@generate@@nn \char_generate:nn +\IncludeInRelease{2015/01/01} + {\@addtonextcol}{float order in 2-column}% +\def\@addtonextcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \@reqcolroom \ht\@currbox + \advance \@reqcolroom \@textmin + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum\@colnum>\z@ + \@bitor\@currtype\@deferlist + \@testwrongwidth\@currbox + \if@test + \else + \@addtotoporbot + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@deferlist\@currbox + \fi + \endgroup +}% \EndIncludeInRelease -\IncludeInRelease{0000/00/00}{expl3~2020-10-01}% - {expl3~macros~added~for~the~2020-10-01~release}% -\cs_undefine:N \@expl@cs@to@str@@N -\cs_undefine:N \@expl@str@if@eq@@nnTF -\cs_undefine:N \@expl@cs@prefix@spec@@N -\cs_undefine:N \@expl@cs@argument@spec@@N -\cs_undefine:N \@expl@cs@replacement@spec@@N -\cs_undefine:N \@expl@str@map@function@@NN +\IncludeInRelease{0000/00/00}% + {\@addtonextcol}{float order in 2-column}% +\def\@addtonextcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \@reqcolroom \ht\@currbox + \advance \@reqcolroom \@textmin + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum\@colnum>\z@ + \@bitor\@currtype\@deferlist + \if@test + \else + \@addtotoporbot + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@deferlist\@currbox + \fi + \endgroup +}% +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@addtodblcol}{float order in 2-column}% +\def\@addtodblcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \@getfpsbit \tw@ + \ifodd\@tempcnta + \@flsetnum \@dbltopnum + \ifnum \@dbltopnum>\z@ + \@tempswafalse + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \else + \ifnum \@fpstype<\sixt@@n + \advance \@dbltoproom \@textmin + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \fi + \advance \@dbltoproom -\@textmin + \fi + \fi + \if@tempswa + \@bitor \@currtype \@deferlist + \@testwrongwidth\@currbox + \if@test + \else + \@tempdima -\ht\@currbox + \advance\@tempdima + -\ifx \@dbltoplist\@empty \dbltextfloatsep \else + \dblfloatsep \fi + \global \advance \@dbltoproom \@tempdima + \global \advance \@colht \@tempdima + \global \advance \@dbltopnum \m@ne + \@cons \@dbltoplist \@currbox + \@inserttrue + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@deferlist\@currbox + \fi + \endgroup +}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@addtodblcol}{float order in 2-column}% +\def\@addtodblcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \@getfpsbit \tw@ + \ifodd\@tempcnta + \@flsetnum \@dbltopnum + \ifnum \@dbltopnum>\z@ + \@tempswafalse + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \else + \ifnum \@fpstype<\sixt@@n + \advance \@dbltoproom \@textmin + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \fi + \advance \@dbltoproom -\@textmin + \fi + \fi + \if@tempswa + \@bitor \@currtype \@dbldeferlist + \if@test + \else + \@tempdima -\ht\@currbox + \advance\@tempdima + -\ifx \@dbltoplist\@empty + \dbltextfloatsep + \else \dblfloatsep \fi + \global \advance \@dbltoproom \@tempdima + \global \advance \@colht \@tempdima + \global \advance \@dbltopnum \m@ne + \@cons \@dbltoplist \@currbox + \@inserttrue + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@dbldeferlist\@currbox + \fi + \endgroup +}% +\EndIncludeInRelease +\IncludeInRelease{2017/01/01}% + {\@makefcolumn}{negative height floats}% +\def\@makefcolumn #1{% + \begingroup + \@fpmin -\maxdimen + \let \@testfp \@gobble + \@tryfcolumn #1% + \endgroup +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@makefcolumn}{negative height floats}% +\def\@makefcolumn #1{% + \begingroup + \@fpmin \z@ + \let \@testfp \@gobble + \@tryfcolumn #1% + \endgroup +} +\EndIncludeInRelease +\IncludeInRelease{2015/01/01}% + {\@outputdblcol}{2 column marks}% +\def\@outputdblcol{% + \if@firstcolumn + \global\@firstcolumnfalse + \global\setbox\@leftcolumn\copy\@outputbox + \splitmaxdepth\maxdimen + \vbadness\maxdimen + \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}% + \setbox\@outputbox\vsplit\@outputbox to\maxdimen + \toks@\expandafter{\topmark}% + \xdef\@firstcoltopmark{\the\toks@}% + \toks@\expandafter{\splitfirstmark}% + \xdef\@firstcolfirstmark{\the\toks@}% + \ifx\@firstcolfirstmark\@empty + \global\let\@setmarks\relax + \else + \gdef\@setmarks{% + \let\firstmark\@firstcolfirstmark + \let\topmark\@firstcoltopmark}% + \fi + \else + \global\@firstcolumntrue + \setbox\@outputbox\vbox{% + \hb@xt@\textwidth{% + \hb@xt@\columnwidth{\box\@leftcolumn \hss}% + \hfil + {\normalcolor\vrule \@width\columnseprule}% + \hfil + \hb@xt@\columnwidth{\box\@outputbox \hss}}}% + \@combinedblfloats + \@setmarks + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage + \@startdblcolumn}% + \endgroup + \fi}% +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@outputdblcol}{2 column marks}% +\def\@outputdblcol{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox + \else + \global \@firstcolumntrue + \setbox\@outputbox \vbox {% + \hb@xt@\textwidth {% + \hb@xt@\columnwidth {% + \box\@leftcolumn \hss}% + \hfil + {\normalcolor\vrule + \@width\columnseprule}% + \hfil + \hb@xt@\columnwidth {% + \box\@outputbox \hss}% + }% + }% + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi + {\@outputpage + \@startdblcolumn}% + \endgroup + \fi +}% +\EndIncludeInRelease +%%% From File: ltfsscmp.dtx +%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +\IncludeInRelease{2015/01/01}{\new@fontshape}% + {NFSS version1 commands}% +\let\new@fontshape\@undefined +\let\warn@rel@i\@undefined +\let\scan@fontshape\@undefined +\let\scan@@fontshape\@undefined +\let\subst@fontshape\@undefined +\let\extra@def\@undefined +\let\default@mextra\@undefined +\let\preload@sizes\@undefined +\let\err@rel@i\@undefined +\let\newmathalphabet\@undefined +\let\newmathalphabet@\@undefined +\let\newmathalphabet@@@\@undefined +\let\if@no@font@opt\@undefined +\let\@no@font@optfalse\@undefined +\let\define@mathalphabet\@undefined +\let\define@mathgroup\@undefined +\let\addtoversion\@undefined +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\new@fontshape}% + {NFSS version1 commands}% +\gdef\new@fontshape#1#2#3#4{% + \warn@rel@i\new@fontshape\DeclareFontShape + \expandafter\scan@fontshape\@gobble#4<\@nil><<% + \DeclareFontShape U{#1}{#2}{#3}\reserved@f}% +\@onlypreamble\new@fontshape +\gdef\warn@rel@i#1#2{% + \@font@warning{*** NFSS release 1 command + \noexpand#1found\MessageBreak + *** Update by using release 2 command + \string#2.\MessageBreak + *** Recovery is probably possible}% +}% +\@onlypreamble\warn@rel@i +\gdef\scan@fontshape{% + \let\reserved@f\@empty + \let\reserved@e\@empty % holds last info + \scan@@fontshape +}% +\@onlypreamble\scan@fontshape +\gdef\scan@@fontshape#1>#2#3<{% + \ifx\@nil#1% + \edef\reserved@f{\reserved@f\reserved@e}% + \else + \def\reserved@b{#1}% nick names + \def\reserved@c{#3}% + \in@{ at}{#3}% + \ifin@ + \in@{pt}{#3}% not a proof but a good chance + \ifin@ + \def\reserved@a##1 at##2pt##3\@nil{% + \def\reserved@b{##2}% + \def\reserved@c{##1}% + }% + \reserved@a#3\@nil + \fi + \fi + \ifnum 0<0#2 + \edef\reserved@d{subf*\reserved@c}% + \ifcase #2\or + \or + \else + \errmessage{*** What's this? NFSS release 0? ***}% + \fi + \else + \edef\reserved@d{#2\reserved@c}% + \fi + \ifx\reserved@d\reserved@e + \edef\reserved@f{\reserved@f<\reserved@b>}% + \else + \edef\reserved@f{\reserved@f\reserved@e<\reserved@b>}%add old info + \let\reserved@e\reserved@d + \fi + \expandafter\scan@@fontshape + \fi +}% +\@onlypreamble\scan@@fontshape +\gdef\subst@fontshape#1#2#3#4#5#6{% + \warn@rel@i\subst@fontshape\DeclareFontShape + \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}% +\@onlypreamble\subst@fontshape +\gdef\extra@def#1#2#3{% + \warn@rel@i\extra@def\DeclareFontFamily + \DeclareFontFamily{U}{#1}{}% +}% +\@onlypreamble\extra@def +\gdef\default@mextra{% + \warn@rel@i\default@mextra\DeclareFontEncodingDefaults + \DeclareFontEncodingDefaults\relax +}% +\@onlypreamble\default@mextra +\gdef\preload@sizes{% + \warn@rel@i\preload@sizes\DeclarePreloadSizes + \DeclarePreloadSizes U% +}% +\@onlypreamble\preload@sizes +\gdef\err@rel@i#1#2{% + \@latex@error{*** NFSS release 1 command \noexpand#1found% + ^^J*** Recovery not possible. Use \string#2}% + {The new release of NFSS doesn't support the + \noexpand#1command^^Jany longer. + Please upgrade your file to the syntax of NFSS + release 2^^Jusing the \noexpand#2command.}% + \batchmode\input.\relax +}% +\@onlypreamble\err@rel@i +\gdef\newmathalphabet{% + \if@no@font@opt + \@latex@error{*** NFSS release 1 command + \noexpand\newmathalphabet found% + ^^J \space*** Automatic recovery not possible.% + ^^J \space*** TYPE H for Help% + }% + {Please look at the file usrguide.tex for hints on + how to resolve this problem.}% + \else + \warn@rel@i\newmathalphabet\DeclareMathAlphabet + \fi + \@ifstar\newmathalphabet@@@ + \newmathalphabet@@}% +\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}% +\gdef\newmathalphabet@@@#1#2#3#4{% + \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}% +\@onlypreamble\newmathalphabet +\@onlypreamble\newmathalphabet@@ +\@onlypreamble\newmathalphabet@@@ +\global\let\if@no@font@opt\iftrue +\gdef\@no@font@optfalse{\let\if@no@font@opt\iffalse}% +\gdef\define@mathalphabet{% + \err@rel@i\define@mathalphabet\DeclareMathAlphabet +}% +\@onlypreamble\define@mathalphabet +\gdef\define@mathgroup{% + \err@rel@i\define@mathgroup\DeclareSymbolFont +}% +\@onlypreamble\define@mathgroup +\def\addtoversion#1#2{% + \warn@rel@i\addtoversion\SetMathAlphabet + \SetMathAlphabet#2{#1}{U}}% +\@onlypreamble\addtoversion \EndIncludeInRelease -\ExplSyntaxOff %%% From File: ltfinal.dtx \IncludeInRelease{2015/01/01}% {\newmarks}{Extended Allocation}% diff --git a/Master/texmf-dist/tex/latex/base/source2edoc.cls b/Master/texmf-dist/tex/latex/base/source2edoc.cls index 5b6700039c3..e06108230da 100644 --- a/Master/texmf-dist/tex/latex/base/source2edoc.cls +++ b/Master/texmf-dist/tex/latex/base/source2edoc.cls @@ -2,7 +2,7 @@ % This class is buggy and needs fixing \ProvidesClass{source2edoc} - [2020/08/16 v0.1 Quick hack to typeset source2.tex + [2020/12/02 v0.2 Quick hack to typeset source2.tex (not usable for anything else and buggy -- will vanish again)!] \LoadClass{l3doc} @@ -14,8 +14,43 @@ -% l3doc's def are buggy (already fixed there but not distributed yet) + \ExplSyntaxOn + +% in 2e we have a lot of functions that have no ``user-level'' documentation so we disable +% a bogus backref in that case. Over time the sources should be clean up to have such documentation. + +\cs_set_protected:Npn \__codedoc_print_documented: + { + \seq_gset_filter:NNn \g__codedoc_nested_names_seq + \g__codedoc_nested_names_seq + { ! \__codedoc_if_macro_internal_p:n {##1} } + \seq_if_empty:NF \g__codedoc_nested_names_seq + { +% This is a crude change: we grab the first name + \__codedoc_get_hyper_target:xN + { \seq_item:Nn \g__codedoc_nested_names_seq { 1 } } + \l__codedoc_tmpa_tl +% ... and check if it has a reference + \cs_if_exist:cT{ r@\l__codedoc_tmpa_tl } +% If it does we show it, if not we don't. + { + \int_set:Nn \l__codedoc_tmpa_int + { \seq_count:N \g__codedoc_nested_names_seq } + \int_compare:nNnTF \l__codedoc_tmpa_int = 1 {~This~} {~These~} + \bool_if:NTF \l__codedoc_macro_var_bool {variable} {function} + \int_compare:nNnTF \l__codedoc_tmpa_int = 1 {~is~} {s~are~} + documented~on~page~ + \exp_args:Nx \pageref { \l__codedoc_tmpa_tl } . + } + } + \seq_gclear:N \g__codedoc_nested_names_seq + } + + + +% some l3doc's def are buggy (already fixed there but not distributed yet) + \RenewDocumentCommand \DocInclude { m } { \relax\clearpage diff --git a/Master/texmf-dist/tex/latex/base/structuredlog.sty b/Master/texmf-dist/tex/latex/base/structuredlog.sty index ea2faf6fb0f..c008c2786df 100644 --- a/Master/texmf-dist/tex/latex/base/structuredlog.sty +++ b/Master/texmf-dist/tex/latex/base/structuredlog.sty @@ -45,8 +45,8 @@ %% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach, %% Phelype Oleinik & LaTeX Team %%% From File: ltfilehook.dtx -\providecommand\ltfilehookversion{v1.0c} -\providecommand\ltfilehookdate{2020/10/18} +\providecommand\ltfilehookversion{v1.0d} +\providecommand\ltfilehookdate{2020/11/24} \ProvidesExplPackage {structuredlog}{\ltfilehookdate}{\ltfilehookversion} {Structuring the TeX transcript file} |