summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins78
-rw-r--r--Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx521
2 files changed, 599 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins b/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins
new file mode 100644
index 00000000000..6a1dbaa853f
--- /dev/null
+++ b/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins
@@ -0,0 +1,78 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright (C) 2020,2021
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file is part of the Standard LaTeX `First Aid Bundle'.
+%% -------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% As this file contains legal notices, it is NOT PERMITTED to modify
+%% this file in any way that the legal information placed into
+%% generated files is changed (i.e., the files generated when the
+%% original file is executed). This restriction does not apply if
+%% (parts of) the content is reused in a different WORK producing its
+%% own generated files.
+%%
+%% The list of all files belonging to the `First Aid Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip
+
+\keepsilent
+
+\usedir{tex/latex/firstaid}
+
+\preamble
+
+The source is maintained by the LaTeX Project team and bug
+reports for it can be opened at https://latex-project.org/bugs/
+(but please observe conditions on bug reports sent to that address!)
+
+
+Copyright (C) 2020-2021
+The LaTeX Project and any individual authors listed elsewhere
+in this file.
+
+This file was generated from file(s) of the Standard LaTeX `First Aid Bundle'.
+------------------------------------------------------------------------------
+
+It may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This file may only be distributed together with a copy of the LaTeX
+`First Aid Bundle'. You may however distribute the LaTeX `First Aid Bundle'
+without such generated files.
+
+\endpreamble
+
+
+\generate{\file{latex2e-first-aid-for-external-files.ltx}
+ {\from{latex2e-first-aid-for-external-files.dtx}{kernel}}}
+
+\generate{\file{filehook-ltx.sty}
+ {\from{latex2e-first-aid-for-external-files.dtx}{filehook-ltx}}}
+
+\generate{\file{everysel-ltx.sty}
+ {\from{latex2e-first-aid-for-external-files.dtx}{everysel-ltx}}}
+
+\endbatchfile
diff --git a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
new file mode 100644
index 00000000000..a74cb79a78f
--- /dev/null
+++ b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx
@@ -0,0 +1,521 @@
+% \iffalse meta-comment
+%
+%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020,2021
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex2e-first-aid-for-external-files.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \providecommand\pkg[1]{\texttt{#1}}
+%
+% \title{First aid for external files and packages that need updating}
+% \author{Frank Mittelbach, \LaTeX{} Project}
+%
+% \maketitle
+%
+%
+% \begin{abstract}
+% This file contains some first aid for packages or classes that
+% require updates because of internal changes to \LaTeX{} but that
+% aren't yet reflected in the package/class code.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% Over the years package writers have hooked into
+% various parts of internal \LaTeX{} commands (largely because
+% proper interfaces were missing in important places) and if
+% we are now gradually adding such interfaces these internal
+% commands do change and as a result patching into them stops
+% working.
+%
+% As part of making such internal changes the \LaTeX{} Project team
+% attempts to check for such usage in packages, alert the package
+% maintainers and ensures that the packages get updated alongside
+% the core \LaTeX{} system. However it is not always possible to
+% get packages that will fail with a new kernel updated in time and
+% if that is the case we try to provide a temporary fix in this
+% file for them.
+% Once the package gets updated the fix will then be removed again.
+%
+% For that reason, it is put into a separate bundle so that we can
+% update it easily without requiring the CTAN maintainers to
+% install a new full LaTeX system just because we take out (or add)
+% a fix for a package here.
+%
+% In the best case scenario the file documented here should be
+% empty. In practice it will probably always contain one or the
+% other fix while we are waiting for the package to get updated.
+%
+% \begin{quote} \textbf{Important notice:} The fixes provided here
+% are not meant to be a permanent solution, but are only provided
+% to support the transition period. They are (usually) neither
+% complete nor necessarily the best solution! Furthermore, as they
+% are done from the ``outside'', they usually add some burden and
+% slow down \LaTeX{} processing, even if the package/class is not
+% used in the document.
+%
+% We will therefore remove such code as soon as possible
+% again. In practice this means that if some package never gets
+% updated/corrected, then it will eventually fail to work, because
+% after one or at most two \LaTeX{} releases we will take out the
+% transition code to ensure that this ``first aid patching''
+% doesn't get out of bounds.
+% \end{quote}
+%
+% \subsection{Minor kernel fixes}
+%
+% If we encounter issues with the kernel code that should get fixed
+% before the next main release we normally generate a patch release
+% for \LaTeX{}. However, depending on the complexity of the fix we
+% might first add the fix here and generate a full patch release
+% only when a number of such issues have accumulated. This way we
+% lessen the impact on CTAN maintainers because for each tach
+% release we have to make and distribute also a matching
+% development release.
+%
+% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
+%
+%
+% \section{The Implementation}
+%
+% This file is meant to be loaded during format generation which is
+% why we give it the extension \texttt{.ltx}.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\LaTeXFirstAidDate{2021/02/24}
+\def\LaTeXFirstAidVersion{v1.0k}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{latex2e-first-aid-for-external-files.ltx}
+ [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space
+ LaTeX kernel fixes to external files and packages]
+% \end{macrocode}
+ %
+
+% \begin{macro}{\FirstAidNeededT}
+% This is a very simple help to ensure that we only apply first aid
+% to an unmodified package or class. It only works in the case the
+% file has already been loaded and the csname \cs{ver@\#1.\#2} got
+% defined (holding the current date, version, and short description
+% info). We then compare its content to a frozen string and make
+% the modification \verb=#3= only if both agree. If they differ we
+% assume that the package/class in question got updated by its
+% maintainer.
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_new:Npn\FirstAidNeededT#1#2#3{
+ \exp_args:Nc\str_if_eq:onT{ver@#1.#2}{#3}
+}
+\ExplSyntaxOff
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+%
+% \subsection{The \pkg{filehook} package first aid}
+%
+% The \pkg{filehook} package implements hooks into file loading
+% commands. These days this is already provided by the kernel
+% albeit not with the same user interface. Until that package gets
+% updated (to use the kernel interfaces) we provide a
+% substitution. This does not offer all hooks from \pkg{filehook}
+% but all that have been used in packages available in \TeX{} Live.
+%
+% Note that this doesn't fix \pkg{currfile} because that package
+% uses \pkg{filehook} but relies on the internals of the old
+% implementation.
+%
+% The package has now got an update so we aren't activating the
+% first aid. However, at the moment it basically bypasses the new
+% hook mechanism and puts the old hooks in thereby disabling, for
+% example, the possibility to re-order code through rules.
+%
+% We therefore keep \texttt{filehook-ltx.sty} around as a guideline
+% for further updates.
+%
+% Replacing \pkg{filehook} with a leaner version would then work
+% like this:
+% \begin{macrocode}
+%<*kernel>
+%\declare@file@substitution{filehook.sty}{filehook-ltx.sty}
+%</kernel>
+% \end{macrocode}
+%
+% What follows is a simplified (partial) implementation of the \pkg{filehook}
+% interfaces.
+% Not implemented are:
+%\begin{verbatim}
+% \AtBeginOfFiles \AtEndOfFiles
+% \AtBeginOfInputs \AtEndOfInputs
+% \AtBeginOfInputFile \AtEndOfInputFile
+%\end{verbatim}
+%
+% \begin{macrocode}
+%<*filehook-ltx>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfEveryFile [1]
+ {\AddToHook{file/before}{#1}}
+\newcommand\AtEndOfEveryFile [1]
+ {\AddToHook{file/after}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfIncludes [1]
+ {\AddToHook{include/before}{#1}}
+\newcommand\AtEndOfIncludes [1]
+ {\AddToHook{include/end}{#1}}
+\newcommand\AfterIncludes [1]
+ {\AddToHook{include/after}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfPackages [1]
+ {\AddToHook{package/before}{#1}}
+\newcommand\AtEndOfPackages [1]
+ {\AddToHook{package/after}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfClasses [1]
+ {\AddToHook{class/before}{#1}}
+\newcommand\AtEndOfClasses [1]
+ {\AddToHook{class/after}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfFile [2]
+ {\AddToHook{file/before/#1}{#2}}
+\newcommand\AtEndOfFile [2]
+ {\AddToHook{file/after/#1}{#2}}
+% \end{macrocode}
+%
+% Some commands offered a starred form
+% \begin{macrocode}
+\DeclareDocumentCommand \AtBeginOfPackageFile {smm}
+ {\IfBooleanTF{#1}%
+ {\@ifpackageloaded{#2}%
+ {#3}%
+ {\AddToHook{package/before/#2}{#3}}}%
+ {\AddToHook{package/before/#2}{#3}}%
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand \AtEndOfPackageFile {smm}
+ {\IfBooleanTF{#1}%
+ {\@ifpackageloaded{#2}%
+ {#3}%
+ {\AddToHook{package/after/#2}{#3}}}%
+ {\AddToHook{package/after/#2}{#3}}%
+ }
+% \end{macrocode}
+%
+% Are the * forms here of any use? I know they are use 3--4 times
+% on CTAN but I wonder if those are real or mistaken usages.
+% \begin{macrocode}
+\DeclareDocumentCommand \AtBeginOfClassFile {smm}
+ {\IfBooleanTF{#1}%
+ {\@ifclassloaded{#2}%
+ {#3}%
+ {\AddToHook{class/before/#2}{#3}}}%
+ {\AddToHook{class/before/#2}{#3}}%
+ }
+\DeclareDocumentCommand \AtEndOfClassFile {smm}
+ {\IfBooleanTF{#1}%
+ {\@ifclassloaded{#2}%
+ {#3}%
+ {\AddToHook{class/after/#2}{#3}}}%
+ {\AddToHook{class/after/#2}{#3}}%
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\AtBeginOfIncludeFile [2]
+ {\AddToHook{include/before/#1}{#2}}
+\newcommand\AtEndOfIncludeFile [2]
+ {\AddToHook{include/end/#1}{#2}}
+\newcommand\AfterIncludeFile [2]
+ {\AddToHook{include/after/#1}{#2}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</filehook-ltx>
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{The \pkg{bidi} package first aid}
+%
+% The \pkg{bidi} package adds a lot of hooks in various places and
+% those added to \cs{document} and \cs{enddocument} are now no
+% longer necessary as the kernel already provides the right hooks
+% there.
+%
+% However, we aren't trying to change that but instead only make
+% sure that the existing patches still work by adding some first
+% aid after \pkg{biditools} has been loaded.
+%
+% If the package gets updated one can easily take that out simply
+% through
+%\begin{verbatim}
+% \RemoveFromHook{file/after/biditools.sty}[firstaid]
+%\end{verbatim}
+% This makes it easy to test new bidi code while the first aid code
+% is still in the kernel.
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{file/after/biditools.sty}[firstaid]{%
+ \FirstAidNeededT{biditools}{sty}%
+ {2020/05/13 v2 Programming tools for bidi package}%
+ {%
+% \end{macrocode}
+% \pkg{bidi} adds some code to the beginning of \cs{document} which
+% contains \cs{endgroup} and \cs{begingroup} which is no longer
+% correct.
+%
+% Patching \cs{document} using \cs{bidi@patchcmd} doesn't work so
+% we take the extra groups out by hand:
+% \begin{macrocode}
+ \def\firstaid@bidi@document@patch
+ \endgroup#1\begingroup#2\firstaid@bidi@document@patch
+ {\unexpanded{#1#2}}%
+ \edef\document{\expandafter\firstaid@bidi@document@patch\document
+ \firstaid@bidi@document@patch}%
+% \end{macrocode}
+% There are also some patches into \cs{enddocument}, some continue
+% to go in but one fails, so we add that now into the right place.
+% \begin{macrocode}
+ \AddToHook{enddocument/info}%
+ {\let\bidi@AfterEndDocumentCheckLabelsRerun\@firstofone
+ \bidi@afterenddocumentchecklabelsrerunhook}%
+ }%
+}
+% \end{macrocode}
+%
+%
+%
+% \subsection{The \pkg{dinbrief} class first aid}
+%
+% Again a case of a no longer correct \cs{endgroup} in document.
+% Here the fix is simply though.
+% \begin{macrocode}
+\AddToHook{file/after/dinbrief.cls}[firstaid]{%
+ \FirstAidNeededT{dinbrief}{cls}{2000/03/02 LaTeX2e class}%
+ {\AddToHook{env/document/begin}{\begingroup}}%
+}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{The \pkg{pgfpages} and \pkg{pgfmorepages} first aid}
+%
+% \pkg{pgfpages} alters the \cs{shipout} primitive to support
+% multiple page up scenarios. If used together with \pkg{atbegshi}
+% that worked because the alterations done by \pkg{atbegshi} came
+% later and so used the new definition provide by
+% \pkg{pgfpages}. Now that the code from \pkg{atbegshi} is already
+% in the kernel this further redefinition doesn't happen with the
+% result that the change to \cs{shipout} comes to late and
+% breaks the kernel processes.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\AddToHook{file/after/pgfpages.sty}[firstaid]{%
+% \end{macrocode}
+% Undo overwriting \cs{shipout}:
+% \begin{macrocode}
+ \cs_gset_eq:NN \shipout \pgfpages@originalshipout
+% \end{macrocode}
+% Instead overwrite the L3 programming layer name of the
+% primitive. This is really an absolute no-go, but for now the
+% simplest solution to keep the original code running.
+%
+% It will be replaced when the ``configuration points'' interface
+% for \LaTeX{} becomes available. At that point the package will be
+% able to set up a different strategy for doing shipouts and
+% without the need to overrite a primitive (which it did in the
+% past and which we do below) and then this code here can be taken
+% out again.
+% \begin{macrocode}
+ \cs_set_eq:NN \pgfpages@originalshipout \tex_shipout:D
+ \cs_set_eq:NN \tex_shipout:D \pgfpages@interceptshipout
+}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% Same issue with \pkg{pgfmorepages} but slightly different implementation (sigh).
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\AddToHook{file/after/pgfmorepages.sty}[firstaid]{
+ \cs_set_nopar:Npn \pgfhookintoshipout {
+ \cs_set_eq:NN \pgfpages@originalshipout \tex_shipout:D
+ \cs_set_eq:NN \tex_shipout:D \pgfpages@interceptshipout
+ }
+}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{The \pkg{everysel} package first aid}
+%
+%
+% The \cs{selectfont} command got a hook (with the 2021/05 release) which
+% was originally provided by the \pkg{everysel}
+% package. Now that it is in the kernel this package is no longer
+% needed (or only in a simplified manner).
+%
+% If it is requested we replace it with a simplified package
+% (until) it gets updated at which point this line can be removed.
+% \changes{v2.2k}{2020/12/04}{Emulate everysel package}
+% \begin{macrocode}
+%<*kernel>
+% this has been updated
+%\declare@file@substitution{everysel.sty}{everysel-ltx.sty}
+%</kernel>
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+%<*everysel-ltx>
+\ProvidesPackage{everysel-ltx}
+ [2020/12/04 v1.0a
+ Emulation of the original everysel^^Jpackage with kernel methods]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\EverySelectfont}[1]
+ {\AddToHook{selectfont}{#1}}
+\newcommand*{\AtNextSelectfont}[1]
+ {\AddToHookNext{selectfont}{#1}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</everysel-ltx>
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{The \pkg{CJK} package first aid}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% The package redefines \cs{selectfont} to add some code but
+% otherwise uses the old definition. So we make a copy of the
+% newer kernel definition and restore it after the package got
+% loaded. The extra code that the package needs can go into the
+% newly provided hook instead.
+%
+% \begin{macrocode}
+\DeclareCommandCopy\CJK@selectfont\selectfont
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{file/after/CJK.sty}[firstaid]{%
+ \FirstAidNeededT{CJK}{sty}%
+ {2015/04/18 4.8.4}%
+ {%
+ \DeclareCommandCopy\selectfont\CJK@selectfont
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \AddToHook{selectfont}[CJK]{%
+ \expandafter\ifx\csname CJK@\curr@fontshape\endcsname \relax
+ \else
+ \CJK@bold@false
+ \csname CJK@\curr@fontshape\endcsname
+ \fi
+ }%
+ }%
+}
+% \end{macrocode}
+%
+%
+%
+% \subsection{\cs{footref} first aid}
+%
+% A few classes unconditionally define \cs{footref}. Until that has
+% changed we provide some first aid to let them do this.
+%
+% \begin{macrocode}
+\AddToHook{file/after/scrkbase.sty}[firstaid]{%
+ \FirstAidNeededT{scrkbase}{sty}%
+ {2020/09/21 v3.32 KOMA-Script package (KOMA-Script-dependent basics and keyval usage)}%
+ {\let\footref\@undefined}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{class/before/memoir}[firstaid]{%
+ % for version {2020/10/04 v3.7n configurable book, report, article document class}%
+ \let\footref\@undefined
+}
+% \end{macrocode}
+%
+%
+% \subsection[Temporary fixes for the kernel (until the next
+% patch-level release)]
+% {Temporary fixes for the kernel \\
+% (until the next patch-level release)}
+%
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+%