diff options
Diffstat (limited to 'macros/latex-dev/base/ltmiscen.dtx')
-rw-r--r-- | macros/latex-dev/base/ltmiscen.dtx | 252 |
1 files changed, 168 insertions, 84 deletions
diff --git a/macros/latex-dev/base/ltmiscen.dtx b/macros/latex-dev/base/ltmiscen.dtx index accdac24b2..423f51624c 100644 --- a/macros/latex-dev/base/ltmiscen.dtx +++ b/macros/latex-dev/base/ltmiscen.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltmiscen.dtx} - [2024/02/08 v1.2c LaTeX Kernel (Misc. Environments)] + [2024/07/10 v1.2e LaTeX Kernel (Misc. Environments)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltmiscen.dtx} @@ -276,6 +276,21 @@ % \changes{v1.0w}{1994/11/30}{(DPC) Use \cs{@dofilelist}} % \changes{v1.2a}{2022/11/06}{Repeat release info at the end (gh/944)} % \begin{macrocode} +% \end{macrocode} +% If we roll back we have to drop stuff before adding chunks, +% otherwise the code will just be appended, and thus doubled. +% This would result in a harmless warning during the format +% generation, because in that case the code chunk label doesn't +% exist, and therefore can't be dropped. +% \changes{v1.2e}{2024/07/10}{Drop code chunks before adding them to +% avoid duplication in rollback (gh/1407)} +% \begin{macrocode} +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/filelist] +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/warnings] +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/release] +% \end{macrocode} +% +% \begin{macrocode} \AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} \AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} \AddToHook{enddocument/info}[kernel/release]{% @@ -389,6 +404,18 @@ %<latexrelease>\NewHook{enddocument/afteraux} %<latexrelease>\NewHook{enddocument/info} %<latexrelease>\NewHook{enddocument/end} +% \end{macrocode} +% If we roll back we have to drop stuff before adding chunks, +% otherwise the code will just be appended, and thus doubled. +% \changes{v1.2e}{2024/07/10}{Drop code chunks before adding them to +% avoid duplication in rollback (gh/1407)} +% \begin{macrocode} +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/filelist] +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/warnings] +%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/release] +% \end{macrocode} +% +% \begin{macrocode} %<latexrelease>\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} %<latexrelease>\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} %<latexrelease>\AddToHook{enddocument/info}[kernel/release]{% @@ -719,6 +746,8 @@ % position of non-matching \cs{begin}.} % \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}} % \changes{v1.1p}{2019/08/27}{Make command robust} +% \changes{v1.2d}{2024/06/23}{Separate \cs{begin} and \cs{end} definitions +% for individual rollback} % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> @@ -758,54 +787,6 @@ } % \end{macrocode} % -% The top level definition for \cs{end}. for an explanation see -% below (this is the same as the 2019 version where it was -% introduced, but for rollback we have to repeat it). -% \begin{macrocode} -\edef\end - {\unexpanded{% - \romannumeral - \ifx\protect\@typeset@protect - \expandafter %1 - \expandafter %2 - \expandafter %1 - \expandafter %3 expands the \csname inside \end<space> - \expandafter %1 - \expandafter %2 expands \end<space> - \expandafter %1 expands the \else - \z@ - \else - \expandafter\z@\expandafter\protect - \fi - }% - \expandafter\noexpand\csname end \endcsname - } -% \end{macrocode} -% Version that adds hooks (so different from the 2019 version). It -% fixes tlb3722 but the change should perhaps be made in -% \texttt{tabularx} instead. -% \begin{macrocode} -\@namedef{end }#1{% - \romannumeral - \IfHookEmptyTF{env/#1/end}% - {\expandafter\z@}% - {\z@\UseHook{env/#1/end}}% - \csname end#1\endcsname\@checkend{#1}% - \expandafter\endgroup\if@endpe\@doendpe\fi - \UseHook{env/#1/after}% - \if@ignore\@ignorefalse\ignorespaces\fi -} -% \end{macrocode} -% Version without the fix for tlb3722 for the record: -% \begin{macrocode} -%\@namedef{end }#1{% -% \UseHook{env/#1/end}% -% \csname end#1\endcsname\@checkend{#1}% -% \expandafter\endgroup\if@endpe\@doendpe\fi -% \UseHook{env/#1/after}% -% \if@ignore\@ignorefalse\ignorespaces\fi}% -% \end{macrocode} -% % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease @@ -822,6 +803,7 @@ %<latexrelease> \csname #1\endcsname}}% %<latexrelease> \@ignorefalse %<latexrelease> \begingroup\@endpefalse\reserved@a} +%<latexrelease>\EndIncludeInRelease % \end{macrocode} % A version that doesn't start out with \cs{relax} when in % typesetting mode would be the following, but since \cs{begin} @@ -847,7 +829,45 @@ % \begingroup\@endpefalse\reserved@a} % \end{macrocode} % +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\begin}{Making \begin/\end robust}% +%<latexrelease>\def\begin#1{% +%<latexrelease> \@ifundefined{#1}% +%<latexrelease> {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% +%<latexrelease> {\def\reserved@a{\def\@currenvir{#1}% +%<latexrelease> \edef\@currenvline{\on@line}% +%<latexrelease> \csname #1\endcsname}}% +%<latexrelease> \@ignorefalse +%<latexrelease> \begingroup\@endpefalse\reserved@a} +%<latexrelease> +% \end{macrocode} +% Also undo the internal commands as some packages unfortunately test +% for their existence instead of using \cs{IfFormatAtLeastTF}. +% \changes{v1.1y}{2021/02/08}{Undo the internals for robust \cs{begin} +% and \cs{end} in rollback (gh/494)} +% \begin{macrocode} +%<latexrelease>\expandafter\let\csname begin \endcsname\@undefined +%<latexrelease> +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% + + + + % \begin{macro}{\end} +% The top level definition for \cs{end}. +% \changes{v1.2d}{2024/06/23}{Separate \cs{begin} and \cs{end} definitions +% for individual rollback} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2019/10/01}% +%<latexrelease> {\end}{Making \begin/\end robust}% +% \end{macrocode} % While \cs{begin} was made robust simply by using % \cs{DeclareRobustCommand} we need to be a bit more subtle with % \cs{end} as there are packages out there that try to look into @@ -895,65 +915,129 @@ % \changes{v1.1p}{2019/08/27}{Make command robust} % % \begin{macrocode} -%<latexrelease>\edef\end -%<latexrelease> {\unexpanded{% -%<latexrelease> \romannumeral -%<latexrelease> \ifx\protect\@typeset@protect -%<latexrelease> \expandafter %1 -%<latexrelease> \expandafter %2 -%<latexrelease> \expandafter %1 -%<latexrelease> \expandafter %3 expands the \csname inside \end<space> -%<latexrelease> \expandafter %1 -%<latexrelease> \expandafter %2 expands \end<space> -%<latexrelease> \expandafter %1 expands the \else -%<latexrelease> \z@ -%<latexrelease> \else -%<latexrelease> \expandafter\z@\expandafter\protect -%<latexrelease> \fi -%<latexrelease> }% -%<latexrelease> \expandafter\noexpand\csname end \endcsname -%<latexrelease> } +\edef\end + {\unexpanded{% + \romannumeral + \ifx\protect\@typeset@protect + \expandafter %1 + \expandafter %2 + \expandafter %1 + \expandafter %3 expands the \csname inside \end<space> + \expandafter %1 + \expandafter %2 expands \end<space> + \expandafter %1 expands the \else + \z@ + \else + \expandafter\z@\expandafter\protect + \fi + }% + \expandafter\noexpand\csname end \endcsname + } +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease % \end{macrocode} % And here is the original definition of \cs{end} the way it was in % \LaTeX{} for several decades now hidden in \verb*=\end =. % \begin{macrocode} -%<latexrelease>\@namedef{end }#1{% +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\end}{Making \begin/\end robust}% +%<latexrelease>\def\end#1{% %<latexrelease> \csname end#1\endcsname\@checkend{#1}% %<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi %<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi} +%<latexrelease> %<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} -% An here the rollback in case that is ever needed. +% \end{macro} + + + +% \begin{macro}{\end\verbvisiblespace} +% The internal version with a space at the end. % \begin{macrocode} -%<latexrelease>\IncludeInRelease{0000/00/00}% -%<latexrelease> {\begin}{Making \begin/\end robust}% -%<latexrelease>\def\begin#1{% -%<latexrelease> \@ifundefined{#1}% -%<latexrelease> {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% -%<latexrelease> {\def\reserved@a{\def\@currenvir{#1}% -%<latexrelease> \edef\@currenvline{\on@line}% -%<latexrelease> \csname #1\endcsname}}% -%<latexrelease> \@ignorefalse -%<latexrelease> \begingroup\@endpefalse\reserved@a} -%<latexrelease>\def\end#1{% +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2024/11/01}% +%<latexrelease> {\end!space}{New @endpe handling}% +\@namedef{end }#1{% + \romannumeral + \IfHookEmptyTF{env/#1/end}% + {\expandafter\z@}% + {\z@\UseHook{env/#1/end}}% + \csname end#1\endcsname\@checkend{#1}% +% \end{macrocode} +% We can now close the environment group and due to the new +% \cs{if@endpe} handling we no longer need to \cs{expandafter} +% out of the group. +% \changes{v1.2d}{2024/06/23}{Adjust for new \texttt{@endpe} handling} +% \begin{macrocode} +% \expandafter\endgroup\if@endpe\@doendpe\fi + \endgroup + \UseHook{env/#1/after}% + \if@ignore\@ignorefalse\ignorespaces\fi +} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% Version that adds hooks (so different from the 2019 version). It +% fixes tlb3722 but the change should perhaps be made in +% \texttt{tabularx} instead. +% \begin{macrocode} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\end!space}{Use hook system}% +%<latexrelease> +%<latexrelease>\@namedef{end }#1{% +%<latexrelease> \romannumeral +%<latexrelease> \IfHookEmptyTF{env/#1/end}% +%<latexrelease> {\expandafter\z@}% +%<latexrelease> {\z@\UseHook{env/#1/end}}% +%<latexrelease> \csname end#1\endcsname\@checkend{#1}% +%<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi +%<latexrelease> \UseHook{env/#1/after}% +%<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi +%<latexrelease>} +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% Version without the fix for tlb3722 for the record: +%\begin{verbatim} +%\@namedef{end }#1{% +% \UseHook{env/#1/end}% +% \csname end#1\endcsname\@checkend{#1}% +% \expandafter\endgroup\if@endpe\@doendpe\fi +% \UseHook{env/#1/after}% +% \if@ignore\@ignorefalse\ignorespaces\fi}% +% \end{verbatim} +% +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2019/10/01}% +%<latexrelease> {\end!space}{Making \begin/\end robust}% +%<latexrelease> +%<latexrelease>\@namedef{end }#1{% %<latexrelease> \csname end#1\endcsname\@checkend{#1}% %<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi %<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi} -%<latexrelease> +%<latexrelease>\EndIncludeInRelease % \end{macrocode} -% Also undo the internal commands as some packages unfortunately test +% +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\end!space}{Making \begin/\end robust}% +% \end{macrocode} +% Undo the internal command as some packages unfortunately test % for their existence instead of using \cs{IfFormatAtLeastTF}. % \changes{v1.1y}{2021/02/08}{Undo the internals for robust \cs{begin} % and \cs{end} in rollback (gh/494)} % \begin{macrocode} -%<latexrelease>\expandafter\let\csname begin \endcsname\@undefined %<latexrelease>\expandafter\let\csname end \endcsname\@undefined %<latexrelease> %<latexrelease>\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} -% \end{macro} % % % |