diff options
Diffstat (limited to 'macros/latex/base/ltfilehook.dtx')
-rw-r--r-- | macros/latex/base/ltfilehook.dtx | 129 |
1 files changed, 86 insertions, 43 deletions
diff --git a/macros/latex/base/ltfilehook.dtx b/macros/latex/base/ltfilehook.dtx index 000f4d8c2a..8b5e982591 100644 --- a/macros/latex/base/ltfilehook.dtx +++ b/macros/latex/base/ltfilehook.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2020-2021 +% Copyright (C) 2020-2022 % Frank Mittelbach, Phelype Oleinik & LaTeX Team % % This file is part of the LaTeX base system. @@ -31,29 +31,14 @@ %%% From File: ltfilehook.dtx % % \begin{macrocode} -\providecommand\ltfilehookversion{v1.0l} -\providecommand\ltfilehookdate{2021/08/27} +\providecommand\ltfilehookversion{v1.0m} +\providecommand\ltfilehookdate{2022/04/01} % \end{macrocode} % %<*driver> \documentclass{l3doc} -% bug fix fo l3doc.cls -\ExplSyntaxOn -\cs_set_protected:Npn \__codedoc_macro_typeset_one:nN #1#2 - { - \vbox_set:Nn \l__codedoc_macro_box - { - \vbox_unpack_drop:N \l__codedoc_macro_box - \hbox { \llap { \__codedoc_print_macroname:nN {#1} #2 - \MacroFont % <----- without it the \ is in lmr10 if a link is made - \ - } } - } - \int_incr:N \l__codedoc_macro_int - } -\ExplSyntaxOff \providecommand\InternalDetectionOff{} \providecommand\InternalDetectionOn{} @@ -73,9 +58,10 @@ % % \long\def\fmi#1{\begin{quote}\itshape Todo: #1\end{quote}} % -% \let\hook\texttt +% \providecommand\hook[1]{\texttt{#1}} +% % -% \title{The \texttt{ltfilehook} package\thanks{This package has version +% \title{The \texttt{ltfilehook} documentation\thanks{This code has version % \ltfilehookversion\ dated \ltfilehookdate, \copyright\ \LaTeX\ % Project.}} % @@ -120,7 +106,7 @@ % } % These are: % \begin{description} -% \item[\texttt{file/before}, \texttt{file/\meta{file-name}/before}] +% \item[\hook{file/before}, \hook{file/\meta{file-name}/before}] % % These hooks are executed in that order just before the file is % loaded for reading. The code of the first hook is used @@ -128,16 +114,16 @@ % file with matching \meta{file-name} allowing you to specify % code that only applies to one file. % -% \item[\texttt{file/\meta{file-name}/after}, \texttt{file/after}] +% \item[\hook{file/\meta{file-name}/after}, \hook{file/after}] % % These hooks are after the file with name \meta{file-name} has % been fully consumed. The order is swapped (the specific one -% comes first) so that the \texttt{before} and \texttt{after} +% comes first) so that the \hook{/before} and \hook{/after} % hooks nest properly, which is important if any of them involve % grouping (e.g., contain environments, for example). % Furthermore both hooks are reversed hooks to support correct % nesting of different packages adding code to both -% \texttt{/before} and \texttt{/after} hooks. +% \hook{/before} and \hook{/after} hooks. % % \end{description} % \end{variable} @@ -216,7 +202,7 @@ % \cs{RequirePackage}, \cs{LoadPackageWithOptions}, etc.) offer the % hooks from section~\ref{sec:general-file-hooks} when they are % used to load a package or class file, e.g., -% \texttt{file/array.sty/after} would be called after the +% \hook{file/array.sty/after} would be called after the % \pkg{array} package got loaded. But as packages and classes form as special group % of files, there are some additional hooks available that only % apply when a package or class is loaded. @@ -230,21 +216,21 @@ % } % These are: % \begin{description} -% \item[\texttt{package/before}, \texttt{package/after}] +% \item[\hook{package/before}, \hook{package/after}] % % These hooks are called for each package being loaded. % -% \item[\texttt{package/\meta{name}/before}, -% \texttt{package/\meta{name}/after}] +% \item[\hook{package/\meta{name}/before}, +% \hook{package/\meta{name}/after}] % % These hooks are additionally called if the package name is % \meta{name} (without extension). % -% \item[\texttt{class/before}, \texttt{class/after}] +% \item[\hook{class/before}, \hook{class/after}] % % These hooks are called for each class being loaded. % -% \item[\texttt{class/\meta{name}/before}, \texttt{class/\meta{name}/after}] +% \item[\hook{class/\meta{name}/before}, \hook{class/\meta{name}/after}] % % These hooks are additionally called if the class name is % \meta{name} (without extension). @@ -269,8 +255,8 @@ % \>\cs{UseHook}\marg{\hook{package/\meta{package name}/after}} \\ % \>\cs{UseHook}\marg{\hook{package/after}} % \end{tabbing} -% and similar for class file loading, except that \texttt{package/} -% is replaced by \texttt{class/} and \cs{AtEndOfPackage} by +% and similar for class file loading, except that \hook{package/} +% is replaced by \hook{class/} and \cs{AtEndOfPackage} by % \cs{AtEndOfClass}. % % If a package or class is not loaded (or it was loaded before the @@ -321,7 +307,7 @@ % These are: % \begin{description} % -% \item[\texttt{include/before}, \texttt{include/\meta{name}/before}] +% \item[\hook{include/before}, \hook{include/\meta{name}/before}] % % These hooks are executed (in that order) after the initial % \cs{clearpage} and after \texttt{.aux} file is changed to use @@ -331,14 +317,14 @@ % file. % % -% \item[\texttt{include/\meta{name}/end}, \texttt{include/end}] +% \item[\hook{include/\meta{name}/end}, \hook{include/end}] % % These hooks are executed (in that order) after \LaTeX{} has % stopped reading from the \cs{include} file, but before it has % issued a \cs{clearpage} to output any deferred floats. % % -% \item[\texttt{include/\meta{name}/after}, \texttt{include/after}] +% \item[\hook{include/\meta{name}/after}, \hook{include/after}] % % These hooks are executed (in that order) after \LaTeX{} has % issued the \cs{clearpage} but before is has switched back @@ -349,6 +335,19 @@ % included material and bypassed if it is not loaded because of % some \cs{includeonly} statement.\footnotemark % +% \item[\hook{include/excluded}, \hook{include/\meta{name}/excluded}] +% +% The above hooks for \cs{include} files are only executed when +% the file is loaded (or more exactly the load is attempted). If, +% however, the \cs{include} file is explicitly excluded (through +% an \cs{includeonly} statement) the above +% hooks are bypassed and instead the \hook{include/excluded} +% hook followed by the \hook{include/\meta{name}/excluded} hook +% are executed. This happens after +% \LaTeX{} has loaded the \texttt{.aux} file for this include file, +% i.e., after \LaTeX{} has updated its counters to pretend that the file +% was seen. +% % \end{description} % \end{variable}\footnotetext{For that reason % another \cs{clearpage} is executed after these hooks which @@ -359,6 +358,9 @@ % All \hook{include} hooks involving the name of the included file are implemented as % one-time hooks (whereas all other such hooks are normal hooks). % +% If you want to execute code that is run for every \cs{include} +% regardless of whether or not it is excluded, use the +% \hook{cmd/include/before} or \hook{cmd/include/after} hooks. % % % @@ -471,7 +473,7 @@ % the level value and search further for \texttt{LEVEL} with that value % which should then be the \texttt{START} level of the file you are in. % -% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex } +% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex } % % % \section{The Implementation} @@ -728,7 +730,7 @@ % this declaration is done for you automatically and, indeed, they should % not be declared explicitly. % -% Those named \hook{.../after} and \texttt{include/.../end} +% Those named \hook{.../after} and \hook{include/.../end} % are, when code is added, declared as reversed hooks. % % @@ -742,8 +744,8 @@ % \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 +% have to add the hooks \hook{file/before} and +% \hook{file/after} in the right places. If the file doesn't % exist no hooks should be executed. % \begin{macrocode} %</2ekernel> @@ -783,7 +785,7 @@ % 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 restore it for the -% \texttt{file/.../after} hook. +% \hook{file/.../after} hook. % % The hook always refers to the file requested by the user. The hook % is \emph{always} loaded for \cs{CurrentFile} which usually is the @@ -1046,7 +1048,8 @@ % % \subsection{Selecting a file (\cs{set@curr@file})} % -% \begin{macro}{\set@curr@file,\@curr@file,\@curr@file@reqd} +% \begin{macro}{\set@curr@file,\set@curr@file@nosearch} +% \begin{macro}{\@curr@file,\@curr@file@reqd} % \changes{v1.0f}{2021/01/31}{set \cs{protect} to \cs{string} gh/481} % Now we hook into \cs{set@curr@file} to resolve a possible file % substitution, and add \cs{@expl@@@filehook@set@curr@file@@nNN} @@ -1070,13 +1073,23 @@ % control sequence. % \changes{v1.0i}{2021/04/20} % {Make \string~ expand to a string (tracks change in l3kernel)} +% \changes{v1.0m}{2022/03/10} +% {Add \cs{set@curr@file@nosearch} for \pkg{graphicx}} % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2021/06/01}% +%<latexrelease>\IncludeInRelease{2022/06/01}% %<latexrelease> {\set@curr@file}{Setting current file name}% -\def\set@curr@file#1{% +\def\set@curr@file{% + \begingroup + \set@curr@file@aux} +\edef\set@curr@file@nosearch{% \begingroup + \let\noexpand\input@path\noexpand\@empty + \csname seq_clear:N\endcsname + \expandafter\noexpand\csname l_file_search_path_seq\endcsname + \noexpand\set@curr@file@aux} +\def\set@curr@file@aux#1{% \escapechar\m@ne \let\protect\string \edef~{\string~}% @@ -1117,6 +1130,32 @@ % \end{macrocode} % % \begin{macrocode} +%<latexrelease>\IncludeInRelease{2021/06/01}% +%<latexrelease> {\set@curr@file}{Setting current file name}% +%<latexrelease>\def\set@curr@file#1{% +%<latexrelease> \begingroup +%<latexrelease> \escapechar\m@ne +%<latexrelease> \let\protect\string +%<latexrelease> \edef~{\string~}% +%<latexrelease> \expandafter\def\csname\expandafter\endcsname +%<latexrelease> \expandafter{\csname\endcsname}% +%<latexrelease> \@expl@@@filehook@if@no@extension@@nTF{#1}% +%<latexrelease> {\@tempswatrue}{\@tempswafalse}% +%<latexrelease> \@kernel@make@file@csname\@curr@file +%<latexrelease> \@expl@@@filehook@resolve@file@subst@@w {#1}% +%<latexrelease> \@expl@@@filehook@if@file@replaced@@TF +%<latexrelease> {\@kernel@make@file@csname\@curr@file@reqd +%<latexrelease> \@expl@@@filehook@normalize@file@name@@w{#1}% +%<latexrelease> \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}% +%<latexrelease> {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi +%<latexrelease> \global\let\@curr@file@reqd\@curr@file}% +%<latexrelease> \@expl@@@filehook@clear@replacement@flag@@ +%<latexrelease> \endgroup} +%<latexrelease>\let\set@curr@file@nosearch\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% \begin{macrocode} %<latexrelease>\IncludeInRelease{2020/10/01}% %<latexrelease> {\set@curr@file}{Setting current file name}% %<latexrelease>\def\set@curr@file#1{% @@ -1136,6 +1175,7 @@ %<latexrelease> \global\let\@curr@file@reqd\@curr@file}% %<latexrelease> \@expl@@@filehook@clear@replacement@flag@@ %<latexrelease> \endgroup} +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease % \end{macrocode} % @@ -1152,6 +1192,7 @@ %<latexrelease> \csname\@firstofone#1\@empty\endcsname}}% %<latexrelease> \endgroup %<latexrelease>} +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease % \end{macrocode} % @@ -1159,10 +1200,12 @@ %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\set@curr@file}{Setting current file name}% %<latexrelease>\let\set@curr@file\@undefined +%<latexrelease>\let\set@curr@file@nosearch\@undefined %<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} +% \end{macro} % % % |