diff options
Diffstat (limited to 'macros/latex-dev/base')
120 files changed, 939 insertions, 335 deletions
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md index a22c57ad24..8e74772593 100644 --- a/macros/latex-dev/base/README.md +++ b/macros/latex-dev/base/README.md @@ -1,7 +1,7 @@ The LaTeX kernel ================ -Release 2024-11-01 pre-release 4 +Release 2025-06-01 pre-release 0 Overview -------- diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf Binary files differindex 26c6b0e171..bd3211998e 100644 --- a/macros/latex-dev/base/alltt.pdf +++ b/macros/latex-dev/base/alltt.pdf diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf Binary files differindex e8b7788146..7bf7bd0b18 100644 --- a/macros/latex-dev/base/cfgguide.pdf +++ b/macros/latex-dev/base/cfgguide.pdf diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt index 5f0a4f5014..6321cf6fd8 100644 --- a/macros/latex-dev/base/changes.txt +++ b/macros/latex-dev/base/changes.txt @@ -6,6 +6,55 @@ to completeness or accuracy and it contains some references to files that are not part of the distribution. ================================================================================ +================================================================================ +All changes above are only part of the development branch for the next release. +================================================================================ + +######################### +# 2024-11-01 Release +######################### + +2024-10-29 Yukai Chou <muzimuzhi@gmail.com> + * lthooks.dtx (subsection{Setting rules for hooks code}): + Skip mapping over undeclared \g__hook_<hook>_code_prop (gh/1513). + +2024-10-27 Marcel Krüger <Marcel.Krueger@latex-project.org> + * lttagging.dtx + Change tagging sockets with two arguments to drop the first argument + but return the second argument when the socket is disabled with \SuspendTagging. + Add expandable versions of tagging socket use commands. + * ltsocket.dtx + Add expandable versions of \socket_use_expandable:n. + Make internal plug definitions non-protected to allow expandable use. + +2024-10-26 Yukai Chou <muzimuzhi@gmail.com> + * ltcounts.dtx (subsection{Environment Counter Macros}): + Fully expand counter name in \theH<counter> commands (gh/1508) + +2024-10-23 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + * doc.dtx: + A rollback comment leaked into the documentation (gh1418) + +2024-10-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + * ltcmdhooks.dtx: + Some clarification why not all + commands allow generic cmd hooks (gh/1091, gh/1430 and gh/1501) + +2024-10-22 Ulrike Fischer <Ulrike.Fischer@latex-project.org> + * ltshipout.dtx: correct documentation (gh/1470). + + 2024-10-21 Matthew Bertucci <bertucci@math.utah.edu> + * lthooks.dtx + Define \IfHookEmptyT, \IfHookEmptyF + * ltmarks.dtx + Define \IfMarksEqualT, \IfMarksEqualF + * ltproperties.dtx + Define \IfPropertyRecordedT, \IfPropertyRecordedF + +2024-10-18 Clea Rees <reesc21@cf.ac.uk> + * lttextcomp.dtx + Fix typo in \ProvidesFile + 2024-10-12 Joseph Wright <Joseph.Wright@latex-project.org> * ltmiscen.dtx Define \begin as an engine-protected macro @@ -15,7 +64,7 @@ not part of the distribution. Correct passing of token list content using \KeyValue 2024-10-02 Ulrike Fischer <Ulrike.Fischer@latex-project.org> - * lttagging.dtx: restore also paratagging in the para/restore socket, + * lttagging.dtx: restore also paratagging in the para/restore socket, see https://github.com/latex3/tagging-project/issues/723 2024-09-25 Matthew Bertucci <bertucci@math.utah.edu> @@ -25,7 +74,6 @@ not part of the distribution. * lttagging.dtx: dummy for \tag_suspend:n and \tag_resume:n * lttagging.dtx: declare tagging sockets for floats and caption. - 2024-09-21 Ulrike Fischer <Ulrike.Fischer@latex-project.org> * ltcounts.dtx (subsection{Environment Counter Macros}): @@ -34,7 +82,6 @@ not part of the distribution. Use sockets in \refstepcounter for target and tagging support. * ltmeta.dtx: move patches and change of \MakeLinkTarget from latex-lab. * lttagging.dtx: add tagging socket for targets. - 2024-09-15 Joseph Wright <Joseph.Wright@latex-project.org> * lttemplates-doc.tex, lttemplates-code.tex: @@ -125,12 +172,6 @@ not part of the distribution. (subsection{Declaring commands and environments}): Simplify \__cmd_declare_env:nnnn, use space-trimmed envname directly -2024-06-23 Yukai Chou <muzimuzhi@gmail.com> - - * ltpara.dtx - Append \everypar toks to \g__parar_standard_everypar_tl, rollback - 2023/06/01 (gh/1386) - 2024-06-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org> * ltlists.dtx: @@ -198,9 +239,15 @@ not part of the distribution. * lttemplates.dtx: Fix markup typos. -================================================================================ -All changes above are only part of the development branch for the next release. -================================================================================ +######################### +# 2024-06-01 PL2 Release +######################### + +2024-06-23 Yukai Chou <muzimuzhi@gmail.com> + + * ltpara.dtx + Append \everypar toks to \g__parar_standard_everypar_tl, rollback + 2023/06/01 (gh/1386) ######################### # 2024-06-01 PL1 Release diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf Binary files differindex 094b379cb6..a43910f485 100644 --- a/macros/latex-dev/base/classes.pdf +++ b/macros/latex-dev/base/classes.pdf diff --git a/macros/latex-dev/base/clsguide-historic.pdf b/macros/latex-dev/base/clsguide-historic.pdf Binary files differindex c5b07e748b..76ce49be4b 100644 --- a/macros/latex-dev/base/clsguide-historic.pdf +++ b/macros/latex-dev/base/clsguide-historic.pdf diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf Binary files differindex 526a571cd2..1658b6168e 100644 --- a/macros/latex-dev/base/clsguide.pdf +++ b/macros/latex-dev/base/clsguide.pdf diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf Binary files differindex 60aef6e282..89de0c3ef6 100644 --- a/macros/latex-dev/base/cmfonts.pdf +++ b/macros/latex-dev/base/cmfonts.pdf diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf Binary files differindex 0f643e3122..b5f914d9e2 100644 --- a/macros/latex-dev/base/cyrguide.pdf +++ b/macros/latex-dev/base/cyrguide.pdf diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf Binary files differindex 60072bde43..d361838381 100644 --- a/macros/latex-dev/base/doc-code.pdf +++ b/macros/latex-dev/base/doc-code.pdf diff --git a/macros/latex-dev/base/doc.dtx b/macros/latex-dev/base/doc.dtx index 4cb8dd6b1c..a6af48b88a 100644 --- a/macros/latex-dev/base/doc.dtx +++ b/macros/latex-dev/base/doc.dtx @@ -34,7 +34,7 @@ %\catcode`\<=14 %<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01] %<+package> -% Any rollback request before 2016-02-15 we try to fulfill with the 2016 version: +% ^^A Any rollback request before 2016-02-15 we try to fulfill with the 2016 version: %<+package>\DeclareRelease{}{1994-06-01} %<+package> {doc-2016-02-15.sty} %<+package>\DeclareRelease{v2.1g}{2016-02-15} @@ -45,7 +45,7 @@ %<+package> %<+package>\ProvidesPackage{doc} %<+shortvrb>\ProvidesPackage{shortvrb} -%<+package|shortvrb> [2024/06/29 v3.0q +%<+package|shortvrb> [2024/10/23 v3.0q %<+package|shortvrb> Standard LaTeX documentation package V3 (FMi)] %\catcode`\<=12 % diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf Binary files differindex 65ebc473e3..817c4c5a5e 100644 --- a/macros/latex-dev/base/doc.pdf +++ b/macros/latex-dev/base/doc.pdf diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf Binary files differindex 2080f1d0cf..91ac058a5d 100644 --- a/macros/latex-dev/base/docstrip.pdf +++ b/macros/latex-dev/base/docstrip.pdf diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf Binary files differindex 773c3a208e..e01c09a6e3 100644 --- a/macros/latex-dev/base/encguide.pdf +++ b/macros/latex-dev/base/encguide.pdf diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf Binary files differindex c26625bac2..fceeac65e7 100644 --- a/macros/latex-dev/base/exscale.pdf +++ b/macros/latex-dev/base/exscale.pdf diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf Binary files differindex e63ddf44a8..dfa6f18896 100644 --- a/macros/latex-dev/base/fix-cm.pdf +++ b/macros/latex-dev/base/fix-cm.pdf diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf Binary files differindex 1e7ef27095..4788f8aa5e 100644 --- a/macros/latex-dev/base/fntguide.pdf +++ b/macros/latex-dev/base/fntguide.pdf diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf Binary files differindex 54bcbc0c10..7988bac004 100644 --- a/macros/latex-dev/base/graphpap.pdf +++ b/macros/latex-dev/base/graphpap.pdf diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf Binary files differindex aacaf95452..19a244e1d3 100644 --- a/macros/latex-dev/base/ifthen.pdf +++ b/macros/latex-dev/base/ifthen.pdf diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf Binary files differindex da79e23b16..9f855b1da3 100644 --- a/macros/latex-dev/base/inputenc.pdf +++ b/macros/latex-dev/base/inputenc.pdf diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf Binary files differindex 5451a4e7dc..c9edf04efd 100644 --- a/macros/latex-dev/base/lamport-manual.pdf +++ b/macros/latex-dev/base/lamport-manual.pdf diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf Binary files differindex 6a68894e03..f4d6211ea4 100644 --- a/macros/latex-dev/base/latexrelease.pdf +++ b/macros/latex-dev/base/latexrelease.pdf diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf Binary files differindex 2c2f9185b5..fef1fb9d98 100644 --- a/macros/latex-dev/base/latexsym.pdf +++ b/macros/latex-dev/base/latexsym.pdf diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf Binary files differindex 2ba307919b..0f5e8979fe 100644 --- a/macros/latex-dev/base/lb2.pdf +++ b/macros/latex-dev/base/lb2.pdf diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf Binary files differindex d27d0b009f..a7f8eb532a 100644 --- a/macros/latex-dev/base/letter.pdf +++ b/macros/latex-dev/base/letter.pdf diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf Binary files differindex d77ecbbf98..acbc7ab359 100644 --- a/macros/latex-dev/base/lgc2.pdf +++ b/macros/latex-dev/base/lgc2.pdf diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf Binary files differindex 9e356ca732..3f025cadbb 100644 --- a/macros/latex-dev/base/lppl.pdf +++ b/macros/latex-dev/base/lppl.pdf diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf Binary files differindex 8aca1f3bec..cdf9a60b5b 100644 --- a/macros/latex-dev/base/ltcmdhooks-code.pdf +++ b/macros/latex-dev/base/ltcmdhooks-code.pdf diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf Binary files differindex 7eadbbbdc8..ebd2c3780b 100644 --- a/macros/latex-dev/base/ltcmdhooks-doc.pdf +++ b/macros/latex-dev/base/ltcmdhooks-doc.pdf diff --git a/macros/latex-dev/base/ltcmdhooks.dtx b/macros/latex-dev/base/ltcmdhooks.dtx index e8793817df..0d14ebfe6b 100644 --- a/macros/latex-dev/base/ltcmdhooks.dtx +++ b/macros/latex-dev/base/ltcmdhooks.dtx @@ -20,7 +20,7 @@ %<*driver> % \fi \ProvidesFile{ltcmdhooks.dtx} - [2024/07/08 v1.0j LaTeX Kernel (Command hooks)] + [2024/10/22 v1.0j LaTeX Kernel (Command hooks)] % \iffalse % \documentclass{l3doc} @@ -68,7 +68,15 @@ % supported % for all types of commands, see section~\ref{sec:look-ahead} for % the restrictions that apply and what happens if one tries to use -% this with commands for which this is not supported.} These are: +% this with commands for which this is not supported.} +% +% However, this is only true \enquote{in theory}. In practice there +% are a number of restrictions that makes it impossible to use such +% generic command hooks in a number of cases, so please read all +% of section~\ref{sec:restrictions} to understand what may prevent +% you from using them successfully. +% +% The generic command hooks are: % \begin{description} % \item[\hook{cmd/\meta{name}/before}] % @@ -152,7 +160,55 @@ % and \TeX{} doesn't have a reliable way to see that, so some guesswork % has to be employed. % -% \subsection{Patching} +% We can do this in most cases when commands are defined using +% \cs{NewDocumentCommand} or \cs{newcommand} (with a few exceptions). +% For commands defined with \tn{def} the situation is less good. +% Common cases where the command hooks will not work are: +% \begin{itemize} +% \item +% +% Commands that use special catcode settings within their +% definition. In that case it is usually not possible to augment the +% definition (see~\ref{sec:patching}). +% +% \item +% +% If a command is defined while \cs{ExplSyntaxOn} is in force +% \textbf{and} the command contains \verb=~= characters to represent +% spaces, then it can't be patched to include the command hooks. In +% fact in some very special circumstances you might even get a +% low-level error rather than the information that the command can't +% be patched (see, for example, +% \url{https://github.com/latex3/latex2e/issues/1430}. +% +% \item +% +% Commands that have arguments as far as the user is concerned +% (e.g., \cs{section} or \cs{caption}), but are defined in a way that these +% arguments are not read by the user level command but only later +% during the processing. In that case the \texttt{after} hook +% doesn't work at all. The \text{before} hook only works with +% \cs{AddToHook} but not with \cs{AddToHookWithArguments} because the +% arguments haven't been read at that point where the hook is +% patched in. See +% section~\ref{sec:look-ahead}. +% +% +% \item +% Adding a specific generic command hook is only attempted once per +% command, thus after redefining a command such hooks will no longer +% be there and will also not being re-added, see section~\ref{sec:timing}. +% +% \end{itemize} +% All this means that you have to have a good understanding of how +% commands are defined when you attempt to make use of such hooks and +% something goes wrong. +% What can help in that case is to turn on \cs{DebugHooksOn} in which +% case you get much more (low-level) details on why something fails and +% what was tried to enable the hooks. +% +% +% \subsection{Patching}\label{sec:patching} % % The code here tries to find out if a command was defined with % \tn{newcommand} or \tn{DeclareRobustCommand} or @@ -172,7 +228,7 @@ % catcode settings are not the same as the ones at the time of command's % definition, so not always adding a hook to a command will work. % -% \subsubsection{Timing} +% \subsubsection{Timing}\label{sec:timing} % % When \cs{AddToHook} (or its \pkg{expl3} equivalent) is called with % a generic |cmd| hook, say, \hook{cmd/foo/before}, for the first time @@ -211,12 +267,14 @@ % hooks attached to them. % % One good example is the \tn{section} command. You can add something -% to the \hook{cmd/section/before} hook, but if you try to add something -% to the \hook{cmd/section/after} hook, \tn{section} will no longer -% work. That happens because the \tn{section} macro takes no argument, -% but instead calls a few internal \LaTeX{} macros to look for the -% optional and mandatory arguments. By adding code to the -% \hook{cmd/section/after} hook, you get in the way of that scanning. +% to the \hook{cmd/section/before} hook (but only with \cs{AddToHook} +% not \cs{AddToHookWithArguments}), +% but if you try to add anything to the \hook{cmd/section/after} +% hook, \tn{section} will no longer work at all. That happens because the +% \tn{section} macro takes no argument, but instead calls a few +% internal \LaTeX{} macros to look for the optional and mandatory +% arguments. By adding code to the \hook{cmd/section/after} hook, you +% get in the way of that scanning. % % In such a case, where it is known that a specific generic command % hook does not work if code is added to it, the package author can diff --git a/macros/latex-dev/base/ltcounts.dtx b/macros/latex-dev/base/ltcounts.dtx index 9417769d73..1d3f202489 100644 --- a/macros/latex-dev/base/ltcounts.dtx +++ b/macros/latex-dev/base/ltcounts.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltcounts.dtx} - [2024/09/20 v1.1o LaTeX Kernel (Counters)] + [2024/10/26 v1.1p LaTeX Kernel (Counters)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltcounts.dtx} @@ -310,6 +310,7 @@ % \changes{v1.1n}{2023/11/07}{Do not change \cs{the...} if already defined (gh/823)} % \changes{v1.1o}{2024/09/20}{define theHfoo (used for internal links)} % \begin{macrocode} +% \changes{v1.1p}{2024/10/26}{Fully expand counter name in theHfoo commands (gh/1508)} %</2ekernel> %<latexrelease>\IncludeInRelease{2024/11/01}{\@definecounter} %<latexrelease> {provide theHfoo commands}% @@ -319,7 +320,8 @@ \global\expandafter\let\csname cl@#1\endcsname\@empty \@addtoreset{#1}{@ckpt}% \global\expandafter\let\csname p@#1\endcsname\@empty - \expandafter\gdef\csname theH#1\endcsname{\the\value{#1}}% + \expandafter\xdef\csname theH#1\endcsname{% + \noexpand\the\noexpand\value{#1}}% % \end{macrocode} % If \cs{the\#1} is undefined or \cs{relax} we define it with the % standard definition for counters, otherwise we warn. This will @@ -360,6 +362,7 @@ % % \begin{macro}{\@addtoreset} % \changes{v1.1o}{2024/09/20}{add the parent theHfoo if a counter is reset} +% \changes{v1.1p}{2024/10/26}{Fully expand counter name in theHfoo commands (gh/1508)} % If a counter is reset when a parent counter changes it no longer has an unique value % across the document. As |\theH<counter>| should be unique % this representation is changed to include also the @@ -371,7 +374,9 @@ %<latexrelease> {provide theHfoo commands}% %<*2ekernel|latexrelease> \def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}% - \expandafter\gdef\csname theH#1\endcsname{\csname theH#2\endcsname.\the\value{#1}}% + \expandafter\xdef\csname theH#1\endcsname{% + \expandafter\noexpand\csname theH#2\endcsname.% + \noexpand\the\noexpand\value{#1}}% } %<latexrelease>\EndIncludeInRelease %</2ekernel|latexrelease> diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf Binary files differindex 1269635a4a..18f398e257 100644 --- a/macros/latex-dev/base/ltfilehook-code.pdf +++ b/macros/latex-dev/base/ltfilehook-code.pdf diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf Binary files differindex e6d556b0a9..fd8a9f3758 100644 --- a/macros/latex-dev/base/ltfilehook-doc.pdf +++ b/macros/latex-dev/base/ltfilehook-doc.pdf diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf Binary files differindex a340bcdedd..419be940ec 100644 --- a/macros/latex-dev/base/lthooks-code.pdf +++ b/macros/latex-dev/base/lthooks-code.pdf diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf Binary files differindex b3f605cbec..d05d264308 100644 --- a/macros/latex-dev/base/lthooks-doc.pdf +++ b/macros/latex-dev/base/lthooks-doc.pdf diff --git a/macros/latex-dev/base/lthooks.dtx b/macros/latex-dev/base/lthooks.dtx index 9e4450d628..0c33c022e3 100644 --- a/macros/latex-dev/base/lthooks.dtx +++ b/macros/latex-dev/base/lthooks.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{lthooks.dtx} - [2024/08/09 v1.1i LaTeX Kernel (hooks)] + [2024/10/29 v1.1k LaTeX Kernel (hooks)] % \iffalse % \documentclass{l3doc} @@ -405,11 +405,17 @@ % Removes any code labeled by \meta{label} from the \meta{hook}. % When the optional argument \meta{label} is not provided, the % \meta{default label} is used (see section~\ref{sec:default-label}). +% \end{function} % % If there is no code under the \meta{label} in the \meta{hook}, % or if the \meta{hook} does not exist, a warning is issued when % you attempt to \cs{RemoveFromHook}, and the command is ignored. -% \cs{RemoveFromHook} should be used only when you know exactly what +% \cs{RemoveFromHook}\marginpar{\raggedleft\rightskip5pt\itshape +% \textbf{Important:}\break The \cs{RemoveFromHook} command should be +% only used if one has full control over the code chunk to be removed. +% In particular it should not be used to remove code chunks from other +% packages! For this the \texttt{voids} relation is provided.} +% should be used only when you know exactly what % labels are in a hook. Typically this will be when some code gets added to a hook % by a package, then later this code is removed by that same package. % If you want to prevent the execution of code from another @@ -423,16 +429,15 @@ % The \meta{hook} and \meta{label} can be specified using the % dot-syntax to denote the current package name. % See section~\ref{sec:default-label}. -% \end{function} -% -% \medskip % -% In contrast to the \texttt{voids} relationship between two labels +% In contrast to the \texttt {voids} relationship between two labels % 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. % +% \medskip +% % A useful application for this declaration inside the document body % is when one wants to temporarily add code to hooks and later remove % it again, e.g., @@ -538,7 +543,6 @@ % % % -% % \subsubsection{Hook names and default labels} % \label{sec:default-label} % @@ -894,7 +898,7 @@ % some variant thereof. Generic hooks such as \hook{file} and \hook{env} hooks are % automatically declared when code is added to them. % -% \begin{function}[EXP]{\IfHookEmptyTF} +% \begin{function}[EXP]{\IfHookEmptyTF,\IfHookEmptyT,\IfHookEmptyF} % \begin{syntax} % \cs{IfHookEmptyTF} \Arg{hook} \Arg{true code} \Arg{false code} % \end{syntax} @@ -6174,6 +6178,8 @@ } % \end{macrocode} % +% \changes{v1.1k}{2024/10/29} +% {Skip mapping over undeclared \cs{g_@@_\meta{hook}_code_prop} (gh/1513)} % \begin{macrocode} \@@_if_usable:nF {#1} { \@@_log_line:x { The~hook~is~not~declared. } } @@ -6183,7 +6189,9 @@ { #2 { The~hook~is~empty } } { \@@_log_line:x { Code~chunks: } - \prop_if_empty:cTF { g_@@_#1_code_prop } + \bool_lazy_or:nnTF + { ! \prop_if_exist_p:c { g_@@_#1_code_prop } } + { \prop_if_empty_p:c { g_@@_#1_code_prop } } { \@@_log_line_indent:x { --- } } { \prop_map_inline:cn { g_@@_#1_code_prop } @@ -6445,19 +6453,24 @@ % |#2|${}={}$\meta{label_1}\verb=|=\meta{label_2}, % and |#3|${}={}$\meta{hook} (the latter may be the argument |#1| to % \cs{@@_list_rules:nn}, or \texttt{??} if it is a default rule). +% \changes{v1.1k}{2024/10/29} +% {Skip mapping over undeclared \cs{g_@@_\meta{hook}_code_prop} (gh/1513)} % \begin{macrocode} \cs_new_protected:Npn \@@_list_rules:nn #1 #2 { - \cs_set_protected:Npn \@@_tmp:w ##1 ##2 ##3 {#2} - \prop_map_inline:cn { g_@@_#1_code_prop } + \prop_if_exist:cT { g_@@_#1_code_prop } { + \cs_set_protected:Npn \@@_tmp:w ##1 ##2 ##3 {#2} \prop_map_inline:cn { g_@@_#1_code_prop } { - \@@_if_label_case:nnnnn {##1} {####1} - { \prop_map_break: } - { \@@_list_one_rule:nnn {##1} {####1} } - { \@@_list_one_rule:nnn {####1} {##1} } - {#1} + \prop_map_inline:cn { g_@@_#1_code_prop } + { + \@@_if_label_case:nnnnn {##1} {####1} + { \prop_map_break: } + { \@@_list_one_rule:nnn {##1} {####1} } + { \@@_list_one_rule:nnn {####1} {##1} } + {#1} + } } } } @@ -7764,13 +7777,16 @@ % \end{macro} % % -% \begin{macro}[EXP]{\IfHookEmptyTF} +% \begin{macro}[EXP]{\IfHookEmptyTF,\IfHookEmptyT,\IfHookEmptyF} +% \changes{v1.1j}{2024/10/21}{Define \cs{IfHookEmptyT}, \cs{IfHookEmptyF}} % Here we avoid the overhead of \pkg{xparse}, since \cs{IfHookEmptyTF} % is used in \cs{end} (that is, every \LaTeX{} environment). As a % further optimization, use \cs{let} rather than \cs{def} to avoid one % expansion step. % \begin{macrocode} \cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF +\cs_new_eq:NN \IfHookEmptyT \hook_if_empty:nT +\cs_new_eq:NN \IfHookEmptyF \hook_if_empty:nF % \end{macrocode} % \end{macro} % diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf Binary files differindex 6886ca4fa0..992ee68de4 100644 --- a/macros/latex-dev/base/ltluatex.pdf +++ b/macros/latex-dev/base/ltluatex.pdf diff --git a/macros/latex-dev/base/ltmarks-code.pdf b/macros/latex-dev/base/ltmarks-code.pdf Binary files differindex cf1a13a38e..61b65bbe12 100644 --- a/macros/latex-dev/base/ltmarks-code.pdf +++ b/macros/latex-dev/base/ltmarks-code.pdf diff --git a/macros/latex-dev/base/ltmarks-doc.pdf b/macros/latex-dev/base/ltmarks-doc.pdf Binary files differindex 567d98b29b..30a1f71773 100644 --- a/macros/latex-dev/base/ltmarks-doc.pdf +++ b/macros/latex-dev/base/ltmarks-doc.pdf diff --git a/macros/latex-dev/base/ltmarks.dtx b/macros/latex-dev/base/ltmarks.dtx index f71bfab9b6..f769a09324 100644 --- a/macros/latex-dev/base/ltmarks.dtx +++ b/macros/latex-dev/base/ltmarks.dtx @@ -17,7 +17,7 @@ %<*driver> % \fi \ProvidesFile{ltmarks.dtx} - [2024/07/08 v1.0g LaTeX Kernel (Marks)] + [2024/10/22 v1.0h LaTeX Kernel (Marks)] % \iffalse % \documentclass{l3doc} @@ -257,7 +257,7 @@ % running headers and footers and shipout out both in one % go.\footnote{As of now that scenario is not yet officially supported.} % -% \begin{function}[EXP]{\IfMarksEqualTF,\mark_if_eq:nnnnTF,\mark_if_eq:nnnnnnTF} +% \begin{function}[EXP]{\IfMarksEqualTF,\IfMarksEqualT,\IfMarksEqualF,\mark_if_eq:nnnnTF,\mark_if_eq:nnnnnnTF} % \begin{syntax} % \cs{IfMarksEqualTF} \oarg{region} \Arg{class} \Arg{pos_1} \Arg{pos_2} \Arg{true} \Arg{false} % \cs{mark_if_eq:nnnnTF} \Arg{region} \Arg{class} \Arg{pos_1} \Arg{pos_2} \Arg{true} \Arg{false} @@ -676,7 +676,8 @@ % and adds suitable \cs{mark_insert:nn} in the two token % lists. These token lists can then be executed at the right place % to reinsert the marks, e.g., directly after the box. This is, for -% example, used by \pkg{multicol} when a short balanced +% example, going to be used\footnote{Probably not before 2025, though.} +% by \pkg{multicol} when a short balanced % \env{multicols} is returned to the galley for typesetting. % % If the \meta{source} consists of a single vertical box (plus @@ -1799,8 +1800,9 @@ % % % -% \begin{macro}[EXP]{\IfMarksEqualTF} -% We only provide a CamelCase command for the case with one region +% \begin{macro}[EXP]{\IfMarksEqualTF,\IfMarksEqualT,\IfMarksEqualF} +% \changes{v1.0h}{2024/10/21}{Define \cs{IfMarksEqualT}, \cs{IfMarksEqualF}} +% We only provide CamelCase commands for the case with one region % (optional) and one class. One could think of also providing a % version for the general case with several optional arguments, but % use cases for this are most likely rare, so not done yet. @@ -1808,6 +1810,12 @@ \NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} { \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4} } +\NewExpandableDocumentCommand \IfMarksEqualT {O{page}mmm} { + \mark_if_eq:nnnnT {#1}{#2}{#3}{#4} +} +\NewExpandableDocumentCommand \IfMarksEqualF {O{page}mmm} { + \mark_if_eq:nnnnF {#1}{#2}{#3}{#4} +} % \end{macrocode} % \end{macro} % diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf Binary files differindex c678cd2b29..fc920d24d4 100644 --- a/macros/latex-dev/base/ltnews.pdf +++ b/macros/latex-dev/base/ltnews.pdf diff --git a/macros/latex-dev/base/ltnews.tex b/macros/latex-dev/base/ltnews.tex index af21aad00b..7756497289 100644 --- a/macros/latex-dev/base/ltnews.tex +++ b/macros/latex-dev/base/ltnews.tex @@ -40,7 +40,7 @@ \ProvidesFile{ltnews.tex}% [2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)] -\providecommand*{\lastissue}{40} +\providecommand*{\lastissue}{41} \InputIfFileExists{ltnews-lastissue.cfg}{}{} diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf Binary files differindex 3fc3020d72..5fdbbf0d8e 100644 --- a/macros/latex-dev/base/ltnews01.pdf +++ b/macros/latex-dev/base/ltnews01.pdf diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf Binary files differindex 5f7fd7cf48..482b092195 100644 --- a/macros/latex-dev/base/ltnews02.pdf +++ b/macros/latex-dev/base/ltnews02.pdf diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf Binary files differindex 349ec0769d..3c231187b9 100644 --- a/macros/latex-dev/base/ltnews03.pdf +++ b/macros/latex-dev/base/ltnews03.pdf diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf Binary files differindex bc48b28219..b0f68211d5 100644 --- a/macros/latex-dev/base/ltnews04.pdf +++ b/macros/latex-dev/base/ltnews04.pdf diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf Binary files differindex d5fd084578..5e8372a988 100644 --- a/macros/latex-dev/base/ltnews05.pdf +++ b/macros/latex-dev/base/ltnews05.pdf diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf Binary files differindex 11c2f135d6..b6b3d6465c 100644 --- a/macros/latex-dev/base/ltnews06.pdf +++ b/macros/latex-dev/base/ltnews06.pdf diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf Binary files differindex eb9f3a9493..741dd1c092 100644 --- a/macros/latex-dev/base/ltnews07.pdf +++ b/macros/latex-dev/base/ltnews07.pdf diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf Binary files differindex b611e667af..2c2d934244 100644 --- a/macros/latex-dev/base/ltnews08.pdf +++ b/macros/latex-dev/base/ltnews08.pdf diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf Binary files differindex 372cd9a26a..f20a22d717 100644 --- a/macros/latex-dev/base/ltnews09.pdf +++ b/macros/latex-dev/base/ltnews09.pdf diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf Binary files differindex eaa67dc4ee..8f5a1e7806 100644 --- a/macros/latex-dev/base/ltnews10.pdf +++ b/macros/latex-dev/base/ltnews10.pdf diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf Binary files differindex ad17c6ffdf..7120d140b7 100644 --- a/macros/latex-dev/base/ltnews11.pdf +++ b/macros/latex-dev/base/ltnews11.pdf diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf Binary files differindex a1871c4aeb..0086ef464e 100644 --- a/macros/latex-dev/base/ltnews12.pdf +++ b/macros/latex-dev/base/ltnews12.pdf diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf Binary files differindex 582736ea05..65ccc95c39 100644 --- a/macros/latex-dev/base/ltnews13.pdf +++ b/macros/latex-dev/base/ltnews13.pdf diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf Binary files differindex 0d088afec9..4151f2e058 100644 --- a/macros/latex-dev/base/ltnews14.pdf +++ b/macros/latex-dev/base/ltnews14.pdf diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf Binary files differindex a20c4970a4..068ffb4a79 100644 --- a/macros/latex-dev/base/ltnews15.pdf +++ b/macros/latex-dev/base/ltnews15.pdf diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf Binary files differindex 888372ba70..b0563d1876 100644 --- a/macros/latex-dev/base/ltnews16.pdf +++ b/macros/latex-dev/base/ltnews16.pdf diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf Binary files differindex 71240c09c6..5eed24de70 100644 --- a/macros/latex-dev/base/ltnews17.pdf +++ b/macros/latex-dev/base/ltnews17.pdf diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf Binary files differindex 4d55619b98..ffa8c6ba01 100644 --- a/macros/latex-dev/base/ltnews18.pdf +++ b/macros/latex-dev/base/ltnews18.pdf diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf Binary files differindex 16c0c62911..d33fbb3fb8 100644 --- a/macros/latex-dev/base/ltnews19.pdf +++ b/macros/latex-dev/base/ltnews19.pdf diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf Binary files differindex a585544562..05f877fba5 100644 --- a/macros/latex-dev/base/ltnews20.pdf +++ b/macros/latex-dev/base/ltnews20.pdf diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf Binary files differindex b9dfe73338..2654d394fd 100644 --- a/macros/latex-dev/base/ltnews21.pdf +++ b/macros/latex-dev/base/ltnews21.pdf diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf Binary files differindex 91027fe345..4023a9680f 100644 --- a/macros/latex-dev/base/ltnews22.pdf +++ b/macros/latex-dev/base/ltnews22.pdf diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf Binary files differindex 1db85acf71..d5f7d765bd 100644 --- a/macros/latex-dev/base/ltnews23.pdf +++ b/macros/latex-dev/base/ltnews23.pdf diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf Binary files differindex b75c2b8054..7393a550ff 100644 --- a/macros/latex-dev/base/ltnews24.pdf +++ b/macros/latex-dev/base/ltnews24.pdf diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf Binary files differindex 7443c1edf1..c056f4458e 100644 --- a/macros/latex-dev/base/ltnews25.pdf +++ b/macros/latex-dev/base/ltnews25.pdf diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf Binary files differindex efafea05cf..bb8440029b 100644 --- a/macros/latex-dev/base/ltnews26.pdf +++ b/macros/latex-dev/base/ltnews26.pdf diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf Binary files differindex 81e0108ef9..bbca3fcd86 100644 --- a/macros/latex-dev/base/ltnews27.pdf +++ b/macros/latex-dev/base/ltnews27.pdf diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf Binary files differindex 92b00f2885..d1f7332f07 100644 --- a/macros/latex-dev/base/ltnews28.pdf +++ b/macros/latex-dev/base/ltnews28.pdf diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf Binary files differindex 8a09f387e8..a320b2e899 100644 --- a/macros/latex-dev/base/ltnews29.pdf +++ b/macros/latex-dev/base/ltnews29.pdf diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf Binary files differindex 706fa88cba..a7765966ab 100644 --- a/macros/latex-dev/base/ltnews30.pdf +++ b/macros/latex-dev/base/ltnews30.pdf diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf Binary files differindex 0a89ed7361..dd27b7e52b 100644 --- a/macros/latex-dev/base/ltnews31.pdf +++ b/macros/latex-dev/base/ltnews31.pdf diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf Binary files differindex 63e78248ae..a585387999 100644 --- a/macros/latex-dev/base/ltnews32.pdf +++ b/macros/latex-dev/base/ltnews32.pdf diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf Binary files differindex e7b2c447cb..ff8b3685b7 100644 --- a/macros/latex-dev/base/ltnews33.pdf +++ b/macros/latex-dev/base/ltnews33.pdf diff --git a/macros/latex-dev/base/ltnews34.pdf b/macros/latex-dev/base/ltnews34.pdf Binary files differindex c1b7881021..60af644363 100644 --- a/macros/latex-dev/base/ltnews34.pdf +++ b/macros/latex-dev/base/ltnews34.pdf diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf Binary files differindex 487a850ff3..5dfb4fd316 100644 --- a/macros/latex-dev/base/ltnews35.pdf +++ b/macros/latex-dev/base/ltnews35.pdf diff --git a/macros/latex-dev/base/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf Binary files differindex 2fe5308173..7cb9f129f8 100644 --- a/macros/latex-dev/base/ltnews36.pdf +++ b/macros/latex-dev/base/ltnews36.pdf diff --git a/macros/latex-dev/base/ltnews37.pdf b/macros/latex-dev/base/ltnews37.pdf Binary files differindex 52f03a43ed..d7e1a7d554 100644 --- a/macros/latex-dev/base/ltnews37.pdf +++ b/macros/latex-dev/base/ltnews37.pdf diff --git a/macros/latex-dev/base/ltnews38.pdf b/macros/latex-dev/base/ltnews38.pdf Binary files differindex 2849e8c898..38985af42d 100644 --- a/macros/latex-dev/base/ltnews38.pdf +++ b/macros/latex-dev/base/ltnews38.pdf diff --git a/macros/latex-dev/base/ltnews39.pdf b/macros/latex-dev/base/ltnews39.pdf Binary files differindex 3fc09b75fb..0101d6d37b 100644 --- a/macros/latex-dev/base/ltnews39.pdf +++ b/macros/latex-dev/base/ltnews39.pdf diff --git a/macros/latex-dev/base/ltnews40.pdf b/macros/latex-dev/base/ltnews40.pdf Binary files differindex eb7d8d5579..f41370e623 100644 --- a/macros/latex-dev/base/ltnews40.pdf +++ b/macros/latex-dev/base/ltnews40.pdf diff --git a/macros/latex-dev/base/ltnews40.tex b/macros/latex-dev/base/ltnews40.tex index a1067731d6..cbb04bcb40 100644 --- a/macros/latex-dev/base/ltnews40.tex +++ b/macros/latex-dev/base/ltnews40.tex @@ -141,7 +141,8 @@ \tubcommand{\input{tubltmac}} \publicationmonth{November} -\publicationyear{2024 --- DRAFT version for upcoming release} +%\publicationyear{2024 --- DRAFT version for upcoming release} +\publicationyear{2024} \publicationissue{40} @@ -155,147 +156,320 @@ \medskip -\section{Introduction} -\emph{to write \ldots\ 30th aniversary of \LaTeXe{} this year btw} +\section{Thirty years of \LaTeXe{}} + +In summer 1994, i.e., thirty years ago, \LaTeXe{} saw its first public +release. Back then it was meant to be an intermediate version (hence +the $\epsilon$) on the way to a major new version (the mythical +\LaTeX3) that we expected to take a couple of more years to reach +maturity. It took much more than that in the end\Dash nominally, +\LaTeXe{} is still with us today. + +However, under the hood, \LaTeXe{} changed a lot throughout these +thirty years, as one can see, for example, when looking through the +forty newsletters~\cite{40:ltnews} that accompanied the \LaTeX{} +releases that happened in the meantime. + +During the first two decades, the \LaTeX{} kernel was kept largely +stable with only minimal bug fix activities. During that period +additional functionality was mostly provided through new or +extended packages that could be loaded in the document preamble. This +included many of the ideas targeted for \LaTeX3{}, e.g., \pkg{expl3} +(\LaTeX3 programming language), \pkg{xparse} (new document command +interface), \pkg{xtemplate} (a configuration mechanism), and many +others. + +Initially, this approach worked well and provided good backward +compatibility; however, over time it became apparent that keeping all +developments confined to packages was more and more problematical. +Features or bug fixes that should have been generally available, i.e., +part of the kernel, were only available in packages, so a lot of +dependencies between packages were introduced and resulted in +convoluted code that was difficult to manage. For example, +\pkg{hyperref} had to rewrite a lot of kernel (and package) macros, so +the code and behavior of other packages had to change depending on +whether or not \pkg{hyperref} was loaded or not. + +Thus, in 2015 the \LaTeX{} team decided to change the policy and +(re)start active kernel development, see~\cite{40:ltnews22}. To ensure +continuous backward compatibility we introduced at the same time the +\pkg{latexrelease} package that enables users to roll back changes to +the \LaTeX{} kernel to an earlier release, in case this is necessary +to successfully rerun a document produced at that time. + +As a consequence of this policy change the last decade saw a larger +number of enhancements and corrections that were made part of the +\LaTeX{} kernel. Overall, we can confidently say that the new +approach has worked well and enabled us to modernize \LaTeX{} and ensure +that it remains relevant without compromising one of the cornerstones +of \LaTeX{}: its outstanding ability to reprocess old documents +written many years ago. + +Being able to update and modernize the kernel sources allowed us to +embark in 2019 on the multi-year \enquote{\LaTeX{} Tagged PDF} project +with the goal of automatically providing accessible PDF documents with +\LaTeX{}. While there are several more project phases to complete, the +milestones already reached allow users to generate PDF/UA compliant +documents if the input is restricted to a (growing) subset of packages +and document classes; see next section and previous newsletters. + + A big change happened with the 2020-02-02 release as part of the project activity, + albeit somewhat obfuscated by us as \enquote{Improved load-times for + \pkg{expl3}}. While technically correct, what it really meant is + that we had finally integrated the programming layer of \LaTeX3, + i.e., the ideas originally sketched out around 1992. Or saying it + differently: with that date the original ideas for \LaTeX3 became a + reality as part of the standard \LaTeX{} kernel. + + With the programming layer available under the hood we were then able to + provide new concepts and extensions as part of \LaTeX{}, + e.g., the hook management system, a new mark mechanism, core + functionality for tagging and PDF resource management, a consistent + key/value interface, and more recently the socket and plug mechanism. + + More will follow while we continue to work on modernizing \LaTeX{} and + bringing the Tagged PDF project to a truly successful completion\Dash so + stay tuned and watch this space for future announcements in the next + newsletters. + + -\section{Switch to T1 as default encoding in documents using \cs{DocumentMetadata}} +\section{News from the \enquote{\LaTeX{} Tagged PDF} project} -As it is well known the font encoding \texttt{OT1} supports only 128 characters and -has various problems and quirks notably for languages different to English. -Nevertheless \texttt{OT1} is the default encoding in \LaTeX{} and this can not be easily -changed without affecting many documents as the \texttt{T1} version of the fonts have slightly different metrics. +\subsection{Engine support:\ An important update} -The introduction of the \cs{DocumentMetadata} command, which announces -\emph{new} code and changes that can also affect the layout gives us now the -opportunity to make this step. So with this version a use of -\cs{DocumentMetadata} with (pdf)\LaTeX{} will setup \texttt{T1} as default -font encoding\footnote{The Unicode engines will continue to use \texttt{TU} -as encoding.}. To ensure that scalable fonts are used, the package -\pkg{cm-super} has to be installed. Users who want to revert to the -\texttt{OT1} encoding in their document can do so with -\verb+\usepackage[OT1]{fontenc}+. +As detailed below, work is progressing on the Tagged PDF +project. There are many drivers for this work, including legal changes +in many places which will increasingly require well-tagged PDFs +including full support for mathematics. As part of the work on this, +we are looking at the technical abilities of the \TeX{} engines. +With \XeTeX{}, it is impossible to reliably produce tagged PDFs due to +engine limitations. The increasing importance of tagged PDFs means +that this requires a move away from \XeTeX{}. We will continue to +address issues with \XeTeX{} support in team-maintained \LaTeX{} code +on a best-effort basis. No \emph{new} functionality will be added for +\XeTeX{} by the \LaTeX{} team. It is likely that over time +functionality may become more restricted, and users are urged to +migrate \XeTeX{} documents to \LuaTeX{}. +For \pdfTeX{}, tagging is available and we are able to support +mathematics by including relevant \TeX{} source or by using +externally-generated MathML. Only \LuaTeX{} is capable of +\emph{automatic} generation of MathML as part of a \LaTeX{} run. Thus +\pdfTeX{} continues to be supported for existing material, but for new +documents, moving to \LuaTeX{} is recommended. -\section{News from the \enquote{\LaTeX{} Tagged PDF} project} +We cannot make statements about the support for other engines such as +(u)p\TeX{}, as we don't use these programs nor have in depth knowledge +of their functionalities. To the best of our knowledge, core \LaTeX{} +works well with these engines, but if and to what extent tagging can +be supported will remain to be seen. If relevant information becomes +available to us we will provide an update in future editions of the +\LaTeX{} newsletter. + + +\subsection{Tagging support for external packages} + +At \url{https://latex3.github.io/tagging-project/tagging-status/} we +show the status of many \LaTeX{} packages and classes with respect to +PDF tagging. We also started to improve tagging support in external +packages. If the \texttt{firstaid} key is used in addition to the +\texttt{phase-III} key basic commands of several packages, including +\pkg{amsthm} and \pkg{fancyvrb}, can now be used. + + +\subsection{Improved table tagging} The tagging of tabulars has been extended: it is now possible to tag -also row headers and to create cells that span more than one row. +row headers and to create cells that span more than one row. + +The interface to this functionality is not finalized but can be +accessed in the current release by specifying the row and columns to +be treated as headers. For example +% +\begin{verbatim} + \tagpdfsetup{ + table/header-rows={1,2}, + table/header-columns={1} } +\end{verbatim} +would specify that in the following tables the first two rows and +first column of each row should be tagged as heading entries. + +Similarly you may add a RowSpan attributes to tag a cell that spans +two rows using: +\begin{verbatim} + \tagpdfsetup{table/multirow={2}} +\end{verbatim} + + +\subsection{Automatic MathML tagging} + +When Lua\LaTeX{} is being used, and the \pkg{luamml} package is +available, and if the document uses the \pkg{unicode-math} package, +then the math module will automatically convert each math formula to +MathML and use it to attach MathML associated files (or MathML +Structure elements) to the tagged PDF. This new feature can be +disabled with \verb+\tagpdfsetup{math/mathml/luamml/load=false}+. More +options to configure MathML tagging can be found in the documentation +of \pkg{latex-lab-math}. + + +\subsection{Change behavior of tagging sockets with two arguments} + +When calling tagging sockets with two arguments using +\cs{UseTaggingSocket} when tagging is suspended, previous versions of +\LaTeXe{} dropped both arguments. This behavior has been changed to +drop the first argument and preserve the second one instead, thereby +allowing tagging sockets to be used to wrap existing content which +should still appear in a non-tagging context. + +Since no tagging sockets currently provided by \LaTeX{} use two +arguments we do not expect this change to affect any existing +documents, but if a custom tagging socket has been defined outside of +the kernel it might need to be adapted to be compatible with the new +behavior. +% +\githubissue{1500} -\emph{write more details ...} -The math module will automatically generate a MathML file and use it to -attach MathML associated files to the structure if lua\LaTeX{} and -the \pkg{unicode-math} package are used and the \pkg{luamml} is found. -This new feature can be disabled with \verb+\tagpdfsetup{math/mathml/luamml=false}+ -More details can be found in the documentation of \pkg{latex-lab-math}. -At \url{https://latex3.github.io/tagging-project/tagging-status/} we show the status of many \LaTeX{} Packages and Classes with respect to PDF tagging. -We also started to improve tagging support in external packages. If the -\texttt{firstaid} key is used in addition to the \texttt{phase-III} key -basic commands of packages like \pkg{amsthm} and \pkg{fancyvrb} can now be used. +\section{Changes to the \LaTeX{} kernel} -\section{Handling paragraph continuation} +\subsection{Handling paragraph continuation} -Already \LaTeX~2.09 offered some automatism to detect whether or not +Already \LaTeX~2.09 offered some automation to detect whether or not text after a list or some other display environment is meant to be a continuation of the current paragraph or should start a new one. The document-level syntax for this is that a blank line after such an -environment signals to \LaTeX{} that it should start a new paragraph; whilst -no blank line signals that there should be no new paragraph and the -text should be considered a continuation. +environment signals to \LaTeX{} that it should start a new paragraph; +whilst no blank line signals that there should be no new paragraph and +the text should be considered a continuation. -Unfortunately, there are a number of cases where the original 2.09 +Unfortunately, there were a number of cases where the original 2.09 approach failed, e.g., with \begin{flushleft} \ttfamily -\{\meta{local customizations}\\ -\cs{begin}\{equation\} a<b \cs{end}\{equation\}\} \\ -\meta{some text} +\ \ \{\meta{local customizations}\\ +\ \ \cs{begin}\{equation\} a<b \cs{end}\{equation\}\} \\ +\ \ \meta{some text} \end{flushleft} the \meta{some text} incorrectly started a new paragraph. Bug reports about this behavior can be traced back to the time \LaTeXe{} was developed, e.g., one test file from 1992 has a note that the above -case was unfortunately not resolvable despite some improvements made back -then. The main cause of the issue (as you probably guessed) is that -the mechanism failed whenever the environment was executed within a -group (\texttt{\{...\}}, \cs{begingroup}/\cs{endgroup}, or +case was unfortunately not resolvable despite some improvements made +back then. The main cause of the issue (as you probably guessed) is +that the mechanism failed whenever the environment was executed within +a group (\texttt{\{...\}}, \cs{begingroup}/\cs{endgroup}, or \cs{bgroup}/\cs{egroup} pair) that was closed before the next blank line was reached. -While most of the time this could be visually corrected by adding some +While most of the time this could be visually corrected by adding some explicit \cs{noindent}, the situation got worse when we tried to implement tagged PDFs resulting in incorrect structures or worse. We therefore made a new attempt to resolve this problem in every -situation and this new solution is rolled out in the current -release. +situation and this new solution is rolled out in the current release. -\section{New or improved commands} - \subsection{Avoid bogus \enquote{no item} error} The commands \cs{addvspace} and \cs{addpenalty} generated the famous -error message \enquote{Something's wrong--perhaps a missing \cs{item}} -when they were encountered outside vertical mode. Most of the time this -error was bogus and if not, then it was generated several times rather -than once. +error message \enquote{Something's wrong---perhaps a missing \cs{item}} +when they were encountered outside vertical mode. Most of the time +this error was bogus and if not, then it was generated several times +rather than once. Once upon a time (in \LaTeX{}~2.09) it was necessary that these commands were used only in vertical mode, but with \LaTeXe{} in 1994, we changed the internals but simply overlooked that this error message -then had become useless. In this release, i.e.,~30 years too late, we have -finally lifted the ban and from now on this error should only show -up if there is indeed a missing \cs{item}. +then had become useless. In this release, i.e.,~30 years too late, we +have finally lifted the ban and from now on this error should only +show up if there is indeed a missing \cs{item}. % \githubissue{1460} +\subsection[Switch to T1 as default encoding in documents + using \cs{DocumentMetadata}] + {Switch to T1 as default encoding in documents\\\mbox\qquad + using \cs{DocumentMetadata}} + +As it is well known, the font encoding \texttt{OT1} supports only 128 +characters and has various problems and quirks notably for languages +different to English. Nevertheless \texttt{OT1} is the default +encoding in \LaTeX{} and this cannot be easily changed without +affecting many documents as the \texttt{T1} version of the fonts have +slightly different metrics. + +The introduction of the \cs{DocumentMetadata} command, which announces +\emph{new} code and changes that can also affect the layout gives us +now the opportunity to make this step. So with this version a use of +\cs{DocumentMetadata} with (pdf)\LaTeX{} will setup \texttt{T1} as +default font encoding.\footnote{The Unicode engines will continue to +use \texttt{TU} as the encoding.} To ensure that scalable fonts are used, +the package \pkg{cm-super} has to be installed. Users who want to +revert to the \texttt{OT1} encoding in their document can do so with +\verb+\usepackage[OT1]{fontenc}+. + + + + \section{Code improvements} -\subsection{Avoiding keyval option clashes between classes and packages} - -In \LaTeX{} News~35~\cite{40:ltnews35} we introduced keyval option processing -to the kernel. Following the standard for \LaTeXe{} options, keyval options -given to the \cs{documentclass} line were treated as global and so parsed by -every package. However, with keyvals, the likelihood of a name clash between a -class-specific option and one used by a package is much higher than it is with -simple strings. We have therefore refined the mechanism in the current release. - -When a class uses the kernel keyval processor, any options it recognises are -recorded and any packages using the keyval processor will then \emph{skip} -these \enquote{global} options. To allow for the case where a class directly -uses an option which should be global (for example \texttt{draft}), a new key -property \texttt{.pass-to-packages} has been added. This can then be set to -indicate that this key is not to be skipped. For example +\subsection[Avoiding key--value option clashes between classes and packages] + {Avoiding key--value option clashes between classes\\\mbox\qquad and packages} + +In \LaTeX{} News~35~\cite{40:ltnews35} we introduced key--value option +processing to the kernel. Following the standard for \LaTeXe{} +options, keyval options given to the \cs{documentclass} line were +treated as global and so parsed by every package. However, with +keyvals, the likelihood of a name clash between a class-specific +option and one used by a package is much higher than it is with simple +strings. We have therefore refined the mechanism in the current +release. + +When a class uses the kernel keyval processor, any options it +recognizes are recorded and any packages using the keyval processor +will then \emph{skip} these \enquote{global} options. To allow for the +case where a class directly uses an option which should be global (for +example \texttt{draft}), a new key property \texttt{.pass-to-packages} +has been added. This can then be set to indicate that this key is not +to be skipped. For example \begin{verbatim} -\DeclareKeys{ - draft .if = {ifl@cls@draft}, - draft .pass-to-packages = true, - mode .store = \cls@mode -} + \DeclareKeys{ + draft .if = {ifl@cls@draft}, + draft .pass-to-packages = true, + mode .store = \cls@mode + } \end{verbatim} -in a class would create two options, \texttt{draft} and \texttt{mode}. The -\texttt{draft} option will be treated in the normal way by packages using -keyvals, but they will ignore the \texttt{mode} option: it is effectively -marked as \enquote{private} to the class. +in a class would create two options, \texttt{draft} and +\texttt{mode}. The \texttt{draft} option will be treated in the normal +way by packages using keyvals, but they will ignore the \texttt{mode} +option: it is effectively marked as \enquote{private} to the class. % \githubissue{1279} +\subsection{Improvement to \textup{\XeTeX}\ \cs{showhyphens}} + +When using \cs{showhyphens} with \XeTeX, missing character warnings +would be generated for any character not in Latin Modern. This has +been corrected and the warnings are suppressed. +% +\githubissue{1380} \subsection{Improved error raised by empty hook} -When using the hook management, both hook and label names (if specified) -should be non-empty. Before empty hook and empty label both raised the -same label-specific error. +When using the hook management, both hook and label names (if +specified) should be non-empty. Before, empty hook and empty label names both +raised the same label-specific error: \begin{verbatim} ! LaTeX hooks Error: Empty code label on line .... Using 'top-level' instead. \end{verbatim} -This has now been improved. Now empty hook raises +This has now been improved. Now an empty hook raises \begin{verbatim} ! LaTeX hooks Error: Empty hook on line .... \end{verbatim} @@ -304,24 +478,25 @@ This has now been improved. Now empty hook raises \subsection{Provide counter representations for link targets} -To create unique target names for links the package -\pkg{hyperref} uses a special counter representation -\verb+\theH+\meta{counter}. To ensure that this -counter representation exists, \pkg{hyperref} redefined the -commands \verb+\@definecounter+, \verb+\@addtoreset+ -and \verb+\refstepcounter+. This counter representation is also -needed for the Tagged PDF project and and so these augmented command definitions -have now been incorporated -into the kernel. -Thus from now on every \verb+\newcounter{+\meta{counter}\verb+}+ will not -only define \verb+\the+\meta{counter} but also \verb+\theH+\meta{counter}. +To create unique target names for links the package \pkg{hyperref} +uses a special counter representation \verb+\theH+\meta{counter}. To +ensure that this counter representation exists, \pkg{hyperref} +redefined the commands \verb+\@definecounter+, \verb+\@addtoreset+ and +\verb+\refstepcounter+. This counter representation is also needed for +the Tagged PDF project and so these augmented command definitions +have now been incorporated into the kernel. Thus from now on every +\verb+\newcounter{+\meta{counter}\verb+}+ will not only define +\verb+\the+\meta{counter} but also \verb+\theH+\meta{counter}. \subsection{Extending \cs{refstepcounter}} -The package \pkg{hyperref} redefines since many years \verb+\refstepcounter+ and -adds code that creates link targets. The kernel definition has now been extended -with socket interfaces that will allow \pkg{hyperref} to avoid the redefinitions. The new interfaces are also used by the Tagged PDF code that needs target names to resolve -references between structures. +For many years, the package \pkg{hyperref} had been redefining +\verb+\refstepcounter+ and adding code that creates link targets. The +kernel definition has now been extended with socket interfaces that +will allow \pkg{hyperref} to avoid the redefinitions. The new +interfaces are also used by the Tagged PDF code that needs target +names to resolve references between structures. + \section{Bug fixes} @@ -340,48 +515,51 @@ LaTeX Warning: Suspicious rollback/min-date \end{verbatim} In some cases this message showed a wrong file type, i.e., -\verb|document class '<pkgname>'| or \verb|package '<clsname>'|. -This has now been corrected. +\verb|document class '<pkgname>'| or \verb|package '<clsname>'|. This +has now been corrected. % \githubissue{870} \subsection*{Fix existence check of document environments} -\cs{NewDocumentEnvironment} and friends define (or redefine) a document -environment using the space-trimmed \meta{envname}, but the existence -check for \meta{envname} was done without space trimming. Thus when the -user-specified \meta{envname} consists of leading and/or trailing -space(s), it may lead to erroneously silent environment declaration. -For example, in -\begin{verbatim} - \NewDocumentEnvironment{myenv}{}{begin}{end} - \NewDocumentEnvironment{ myenv }{}{begin}{end} -\end{verbatim} + +\cs{NewDocumentEnvironment} and friends define (or redefine) a +document environment using the space-trimmed \meta{envname}, but the +existence check for \meta{envname} was done without space +trimming. Thus when the user-specified \meta{envname} consists of +leading and/or trailing space(s), it may lead to erroneously silent +environment declaration. For example, in +\begin{flushleft} +\ttfamily +\ \ \verb=\NewDocumentEnvironment{myenv}{}{begin}{end}=\\ +\ \ \verb*=\NewDocumentEnvironment{ myenv }{}{begin}{end}=\kern-1cm +\end{flushleft} the first line defines a new environment \env{myenv} but the second -line would check existence for \env{ myenv } (which is not yet defined), -then redefine \env{myenv} environment without raising any errors. -This has now been corrected. +line would check existence for \verb*| myenv | (which is not yet +defined), then redefine \env{myenv} environment without raising any +errors. This has now been corrected. % \githubissue{1399} \subsection{Handling of global keys with spaces} If the global (class) options contained spaces around key names, -\cs{ProcessKeyOptions} would fail to remove known keys from the -list of unused global options and \cs{OptionNotUsed} would mistakenly -add space-surrounded key names to that list. -These has been corrected as a hotfix in patch level 1 of the November 2023 -release (but unfortunately not mentioned in~\cite{40:ltnews38}) and -the current release, respectively. +\cs{ProcessKeyOptions} would fail to remove known keys from the list +of unused global options and \cs{OptionNotUsed} would mistakenly add +space-surrounded key names to that list. The first issue was corrected as +a hotfix in patch level 1 of the November 2023 release (but +unfortunately not mentioned in~\cite{40:ltnews38}) and the second in the current +release. % \githubissue{1238} \subsection{File list entries for rolled back packages/classes} -When the rollback mechanism for packages and classes was introduced -in 2018~\cite{40:ltnews28}, loading of the selected historic release -was not recorded in the file list used by \cs{listfiles}. -This has now been corrected so that the extended usage~\cite{40:ltnews39} + +When the rollback mechanism for packages and classes was introduced in +2018~\cite{40:ltnews28}, loading of the selected historic release was +not recorded in the file list used by \cs{listfiles}. This has now +been corrected so that the extended usage~\cite{40:ltnews39} \begin{verbatim} -\listfiles[hashes,sizes] + \listfiles[hashes,sizes] \end{verbatim} now gives more complete and less confusing info. % @@ -389,56 +567,61 @@ now gives more complete and less confusing info. \subsection{\pkg{doc}:\ \cs{PrintDescribeMacro} in preamble} -In \pkg{doc} version 2 it was possible alter the definition of +In \pkg{doc} version 2 it was possible to alter the definition of \cs{PrintDescribeMacro} and similar commands in preamble. In version 3 -this stopped working because they go reset at the end of the +this stopped working because they were reset at the end of the preamble. This has now been implemented differently and changes in the preamble are possible again. % \githubissue{1000} -\section{Improvement to \XeTeX\ \cs{showhyphens}} -When using \cs{showhyphens} with \XeTeX, missing character warnings -would be generated for any character not in Latin Modern. This has been -corrected and the warnings are suppressed. -% -\githubissue{1380} +\subsection{Avoid low-level error if \cs{ShowHooks} is used late} +If \cs{ShowHooks} was used to examine a package hook after the +package was loaded, a low level error resulted. This has now been +corrected. +% +\githubissue{1513} -\section{Avoid code duplication in rollback} +\subsection{Avoid code duplication in rollback} -When the kernel uses \cs{AddToHook} in a region that might be -rolled back (which happens in a few places) and a document requests a -rollback, then we have the situation that the hook already contains code to which we added the same -(or slightly different) code during the -rollback; this results in code duplication or, worse, in errors. This has -now been corrected by dropping any such code chunk (if there is one) prior to -adding the rollback code. +When the kernel uses \cs{AddToHook} in a region that might be rolled +back (which happens in a few places) and a document requests a +rollback, then we have the situation that the hook already contains +code to which we added the same (or slightly different) code during +the rollback; this results in code duplication or, worse, in +errors. This has now been corrected by dropping any such code chunk +(if there is one) prior to adding the rollback code. % \githubissue{1407} -\section{Passing template keys using \cs{KeyValue}} -With the move of the template code to the kernel, some internal efficiencies -were also made. However, there was an oversight in how passing key values from -one setting to another was implemented, meaning that using \cs{KeyValue} could -result in an infinite loop. This has now been fixed. +\subsection{Passing template keys using \cs{KeyValue}} + +With the move of the template code to the kernel, internal +functions were reviewed to improve efficiency. However, there +was an oversight in how +passing key values from one setting to another was implemented, +such that using \cs{KeyValue} could result in an infinite +loop. This has now been fixed. % \githubissue{1486} + + \section{Changes to packages in the \pkg{amsmath} category} -\section{Extend support for \cs{dots}} +\subsection{Extend support for \cs{dots}} The implementation of \cs{dots} in \pkg{amsmath} has the feature that it selects different dots depending on the symbol that follows: e.g., dots between commas would normally be on the baseline, while dots -between binary or relational symols would be raised. However, when symbols such -as \cs{cong} were protected from expansion in moving arguments (so -that they worked in places such as headings) it had the unfortunate -side-effect that the \cs{dots} magic stopped working for them. This -has now been corrected. +between binary or relational symbols would be raised. However, when +symbols such as \cs{cong} were protected from expansion in moving +arguments (so that they worked in places such as headings) it had the +unfortunate side-effect that the \cs{dots} magic stopped working for +them. This has now been corrected. % \githubissue{1265} @@ -450,15 +633,29 @@ has now been corrected. \subsection{Modification to generation of the \file{.tex} from \pkg{fileerr}} -The \pkg{fileerr} extraction has been modified to write \texttt{rename-to-empty-base.tex} -rather than \texttt{.tex} to comply with an expected security change in texlive 2025. -\texttt{build.lua} has been modified to rename \texttt{rename-to-empty-base.tex} to \texttt{.tex} -after unpacking. However if using \textsf{docstrip} directly rather than using \textsf{l3build} -or the unpacked zip file from \CTAN{}, the user must now rename the file and install as \texttt{.tex}. +The \pkg{fileerr} extraction has been modified to write +\texttt{rename-to-empty-base.tex} rather than \texttt{.tex} to comply +with an expected security change in \TeX{}~Live 2025. The +\texttt{build.lua} file for the \pkg{tools} has been modified to +rename \texttt{rename-to-empty-base.tex} to \texttt{.tex} after +unpacking. However if using \textsf{docstrip} directly rather than +using \textsf{l3build} or the unpacked zip file from \CTAN{}, the user +must now rename the file and install as \texttt{.tex}. % \githubissue{1412} -\subsection{\pkg{array}: Tagging support for \cs{cline}} + +\subsection{\pkg{array}:\ Improve \texttt{>\{...\}} specifier} + +If the argument of \texttt{>\{...\}} ended with a command accepting a +trailing optional argument, e.g., defined for example with +\verb=\NewDocumentCommand\foo{o}{...}=, one could get low-level +parsing errors. This has now been corrected. +% +\githubissue{1468} + + +\subsection{\pkg{array}:\ Tagging support for \cs{cline}} In the last release we added tagging support for \pkg{array}, \pkg{longtable} and other tabular packages, but we overlooked that the @@ -468,40 +665,55 @@ artifact. Furthermore, the processing of a \cs{cline} looks to the algorithm as if another row is added (which is technically what happens), thus it was also necessary to decrement the internal row counter to get a correct row count. This has now been corrected in -\pkg{array} which is automatically loaded for tagging, so that all +\pkg{array}, which is automatically loaded for tagging, so that all these packages are now fully compatible with the tagging code if it is turned on. % \taggingissue{134} -\subsection{\pkg{longtable}: Extend caption type} -The \pkg{longtable} has been extended and now provides the command \cs{LTcaptype} -(stemming from the \pkg{ltcaption} package) to change -the counter and caption type used by the \cs{caption} command from longtable. -So with \verb+\renewcommand\LTcaptype{figure}+, a longtable will step the -figure counter instead of the table counter and produce an -entry in the list of figures. An empty definition, \verb+\renewcommand\LTcaptype{}+, -will suppress increasing of the counter. This makes it easy to define an -unnumbered variant of longtable: +\subsection{\pkg{longtable}:\ Extend caption type} + +The \pkg{longtable} package has been extended and now provides the command +\cs{LTcaptype} (stemming from the \pkg{ltcaption} package) to change +the counter and caption type used by the \cs{caption} command from +longtable. So with \verb+\renewcommand\LTcaptype{figure}+, a +longtable will step the figure counter instead of the table counter +and produce an entry in the list of figures. An empty definition, +\verb+\renewcommand\LTcaptype{}+, will suppress increasing of the +counter. This makes it easy to define an unnumbered variant of +longtable: \begin{verbatim} -\newenvironment{longtable*} - {\renewcommand\LTcaptype{}\longtable} - {\endlongtable} + \newenvironment{longtable*} + {\renewcommand\LTcaptype{}\longtable} + {\endlongtable} \end{verbatim} +\subsection{\pkg{longtable}:\ Prevent \cs{pagegoal} exceeding maximum value} -\subsection{\pkg{array}: Improve \texttt{>\{...\}} specifier} - -If the argument of \texttt{>\{...\}} ended with a command accepting a -trailing optional argument, e.g., defined for example with -\verb=\NewDocumentCommand\foo{o}{...}=, one could get low-level -parsing errors. This has now been corrected. +An internal guard has been added to avoid \TeX\ errors if +\verb=\pagegoal= is increased beyond the maximum value for a +\TeX\ dimension. % -\githubissue{1468} +\githubissue{1495} + +\section{Changes to \pkg{l3build}} + +To support third-party developers testing their code against pre-release +\LaTeX{}, a new switch \verb|--dev| has been added to \pkg{l3build}. +This allows the developer to run +\begin{verbatim} + l3build check +\end{verbatim} +to run their test suite against the current release of \LaTeX{} and +\begin{verbatim} + l3build check --dev +\end{verbatim} +to run exactly the same tests using the development release of +\LaTeX{}. %\section{Changes to files in the \pkg{cyrillic} category} @@ -518,9 +730,13 @@ Leslie Lamport. \newblock Reprinted with corrections in 1996. \bibitem{40:ltnews} \LaTeX{} Project Team. - \emph{\LaTeXe{} news 1--39}. June, 2024. + \emph{\LaTeXe{} news 1--39}. June 2024. \url{https://latex-project.org/news/latex2e-news/ltnews.pdf} +\bibitem{40:ltnews22} \LaTeX{} Project Team. + \emph{\LaTeXe{} news 22}. January 2015. + \url{https://latex-project.org/news/latex2e-news/ltnews22.pdf} + \bibitem{40:ltnews28} \LaTeX{} Project Team. \emph{\LaTeXe{} news 28}. April 2018. \url{https://latex-project.org/news/latex2e-news/ltnews28.pdf} diff --git a/macros/latex-dev/base/ltnews41.pdf b/macros/latex-dev/base/ltnews41.pdf Binary files differnew file mode 100644 index 0000000000..aa6c674964 --- /dev/null +++ b/macros/latex-dev/base/ltnews41.pdf diff --git a/macros/latex-dev/base/ltnews41.tex b/macros/latex-dev/base/ltnews41.tex new file mode 100644 index 0000000000..0c9751704a --- /dev/null +++ b/macros/latex-dev/base/ltnews41.tex @@ -0,0 +1,190 @@ +% \iffalse meta-comment +% +% Copyright 2024 +% The LaTeX Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% -—————————————— +% +% 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". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% Filename: ltnews41.tex +% +% This is issue 41 of LaTeX News. + +\NeedsTeXFormat{LaTeX2e}[2020-02-02] + +\documentclass{ltnews} + +%% Maybe needed only for Chris' inadequate system: +\providecommand\Dash {\unskip \textemdash} + +%% NOTE: Chris' preferred hyphens! +%% \showhyphens{parameters} +%% \hyphenation{because} + +\usepackage[T1]{fontenc} + +\usepackage{lmodern,url,hologo} + +\usepackage{csquotes} +\usepackage{multicol} +\usepackage{color} + +\providecommand\hook[1]{\texttt{#1}} + +\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$} +\providecommand\option[1]{\texttt{#1}} +\providecommand\env[1]{\texttt{#1}} +\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}} + + +\providecommand\eTeX{\hologo{eTeX}} +\providecommand\XeTeX{\hologo{XeTeX}} +\providecommand\LuaTeX{\hologo{LuaTeX}} +\providecommand\pdfTeX{\hologo{pdfTeX}} +\providecommand\MiKTeX{\hologo{MiKTeX}} +\providecommand\CTAN{\textsc{ctan}} +\providecommand\TL{\TeX\,Live} + + +\providecommand\githubissue[2][]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}% + {github issue#1 #2}% + )}% + \par\smallskip} +%% But Chris has to mostly disable \href for his TEXPAD app: +%% \def\href #1#2{#2} % Only For Chris' deficient TeX engine + +% simple solution right now (just link to the first issue if there are more) +\def\getfirstgithubissue#1 #2\relax{#1} + +\providecommand\sxissue[1]{\ifhmode\unskip + \else + % githubissue preceding + \vskip-\smallskipamount + \vskip-\parskip + \fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par} + +\providecommand\gnatsissue[2]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}% + {gnats issue #1/#2}% + )}% + \par} + +\let\cls\pkg +\providecommand\env[1]{\texttt{#1}} +\providecommand\acro[1]{\textsc{#1}} + +\vbadness=1400 % accept slightly empty columns + + +\let\finalpagebreak\pagebreak % for TUB (if they use it) +\let\finalvspace\vspace % for document layout fixes + +\makeatletter +% maybe not the greatest design but normally we wouldn't have subsubsections +\renewcommand{\subsubsection}{% + \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}% + {-1em}{\@subheadingfont\colonize}% +} +\providecommand\colonize[1]{#1:} +\makeatother + + +% Undo ltnews's \verbatim@font with active < and > +\makeatletter +\def\verbatim@font{\normalsize\ttfamily} +\makeatother + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand\tubcommand[1]{} +\tubcommand{\input{tubltmac}} + +\publicationmonth{June} +\publicationyear{2025 --- DRAFT version for upcoming release} + +\publicationissue{41} + +\begin{document} + +\maketitle +{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 +\tableofcontents} + +\setlength\rightskip{0pt plus 3em} + +\medskip + +\section{Introduction} + +% To write + +\section{New or improved commands} + +\section{Code improvements} + +\section{Bug fixes} + +%\subsection{A fix} + +%% Some text +% +%%\githubissue{XXXX} + +%\section{Changes to packages in the \pkg{amsmath} category} + +%\section{Changes to packages in the \pkg{graphics} category} + +%\section{Changes to packages in the \pkg{tools} category} + +%\section{Changes to files in the \pkg{cyrillic} category} + +\begin{thebibliography}{9}\frenchspacing + +%\fontsize{9.3}{11.3}\selectfont + +\bibitem{41:Lamport} +Leslie Lamport. +\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference + Manual}. +\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994. +\newblock ISBN 0-201-52983-1. +\newblock Reprinted with corrections in 1996. + +\bibitem{41:ltnews} \LaTeX{} Project Team. + \emph{\LaTeXe{} news 1--39}. June, 2024. + \url{https://latex-project.org/news/latex2e-news/ltnews.pdf} + +\bibitem{41:ltnews40} \LaTeX{} Project Team. + \emph{\LaTeXe{} news 40}. November 2024. + \url{https://latex-project.org/news/latex2e-news/ltnews40.pdf} + +\end{thebibliography} + +\end{document} diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf Binary files differindex 538b23b3ac..9fd9d61978 100644 --- a/macros/latex-dev/base/ltpara-code.pdf +++ b/macros/latex-dev/base/ltpara-code.pdf diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf Binary files differindex 9a28b40b5b..2400146a3d 100644 --- a/macros/latex-dev/base/ltpara-doc.pdf +++ b/macros/latex-dev/base/ltpara-doc.pdf diff --git a/macros/latex-dev/base/ltproperties-code.pdf b/macros/latex-dev/base/ltproperties-code.pdf Binary files differindex 88e4b154b1..6ef1abd4fb 100644 --- a/macros/latex-dev/base/ltproperties-code.pdf +++ b/macros/latex-dev/base/ltproperties-code.pdf diff --git a/macros/latex-dev/base/ltproperties-doc.pdf b/macros/latex-dev/base/ltproperties-doc.pdf Binary files differindex 9075c499b8..7411dda4c3 100644 --- a/macros/latex-dev/base/ltproperties-doc.pdf +++ b/macros/latex-dev/base/ltproperties-doc.pdf diff --git a/macros/latex-dev/base/ltproperties.dtx b/macros/latex-dev/base/ltproperties.dtx index 23a38c43af..77d36a43a9 100644 --- a/macros/latex-dev/base/ltproperties.dtx +++ b/macros/latex-dev/base/ltproperties.dtx @@ -30,7 +30,7 @@ %<*driver> % \fi \ProvidesFile{ltproperties.dtx} - [2024/09/25 v1.0g LaTeX Kernel (Properties)] + [2024/10/21 v1.0h LaTeX Kernel (Properties)] % \iffalse % \documentclass[full]{l3doc} @@ -363,7 +363,7 @@ % has been set with the standard \cs{label} command. % \end{function} % -% \begin{function}{\IfPropertyRecordedTF} +% \begin{function}{\IfPropertyRecordedTF,\IfPropertyRecordedT,\IfPropertyRecordedF} % \begin{syntax} % \cs{IfPropertyRecordedTF} \Arg{label} \Arg{property} \Arg{true code} \Arg{false code} % \end{syntax} @@ -805,9 +805,12 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\IfPropertyRecordedTF} +% \begin{macro}{\IfPropertyRecordedTF,\IfPropertyRecordedT,\IfPropertyRecordedF} +% \changes{v1.0h}{2024-10-21}{Define \cs{IfPropertyRecordedT}, \cs{IfPropertyRecordedF}} % \begin{macrocode} -\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new:Npn \IfPropertyRecordedT #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{#3}{} } +\cs_new:Npn \IfPropertyRecordedF #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{}{#3} } % \end{macrocode} % \end{macro} % diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf Binary files differindex 8800cc981a..ed0017f6a5 100644 --- a/macros/latex-dev/base/ltshipout-code.pdf +++ b/macros/latex-dev/base/ltshipout-code.pdf diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf Binary files differindex 8b6ba93c8a..3f179f3f17 100644 --- a/macros/latex-dev/base/ltshipout-doc.pdf +++ b/macros/latex-dev/base/ltshipout-doc.pdf diff --git a/macros/latex-dev/base/ltshipout.dtx b/macros/latex-dev/base/ltshipout.dtx index 0c9113ce93..c2e70ba6d5 100644 --- a/macros/latex-dev/base/ltshipout.dtx +++ b/macros/latex-dev/base/ltshipout.dtx @@ -34,7 +34,7 @@ %<*driver> % \fi \ProvidesFile{ltshipout.dtx} - [2024/02/11 v1.0n LaTeX Kernel (Shipout)] + [2024/10/22 v1.0n LaTeX Kernel (Shipout)] % \iffalse % \documentclass{l3doc} @@ -469,7 +469,7 @@ % % \begin{variable}{\PreviousTotalPages} % \begin{syntax} -% \cs{thetotalpages}/\cs{PreviousTotalPages} +% \cs{PreviousTotalPages} % \end{syntax} % Command that expands to the number of total pages from the % previous run. If there was no previous run or if used in the diff --git a/macros/latex-dev/base/ltsockets-code.pdf b/macros/latex-dev/base/ltsockets-code.pdf Binary files differindex 017fcd6d1e..db17620914 100644 --- a/macros/latex-dev/base/ltsockets-code.pdf +++ b/macros/latex-dev/base/ltsockets-code.pdf diff --git a/macros/latex-dev/base/ltsockets-doc.pdf b/macros/latex-dev/base/ltsockets-doc.pdf Binary files differindex 37df65d4d7..0328fa8758 100644 --- a/macros/latex-dev/base/ltsockets-doc.pdf +++ b/macros/latex-dev/base/ltsockets-doc.pdf diff --git a/macros/latex-dev/base/ltsockets.dtx b/macros/latex-dev/base/ltsockets.dtx index c77c74b57f..a977f8f6aa 100644 --- a/macros/latex-dev/base/ltsockets.dtx +++ b/macros/latex-dev/base/ltsockets.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltsockets.dtx} - [2024/06/29 v0.9a LaTeX Kernel (Sockets)] + [2024/10/27 v0.9b LaTeX Kernel (Sockets)] % \iffalse % \documentclass{l3doc} @@ -371,7 +371,7 @@ % number of inputs = 2 % available plugs = noop, plug-A, plug-B % current plug = plug-B -% definition = \protected\long macro:#1#2->\begin {quote}\sffamily +% definition = \long macro:#1#2->\begin {quote}\sffamily % foo-B: #2\textsuperscript {2}\end {quote} % \end{verbatim} % \LogSocket{foo} @@ -617,6 +617,22 @@ % \end{function} % % +% \begin{function}[EXP]{\socket_use_expandable:nw,\socket_use_expandable:n} +% \begin{syntax} +% \cs{socket_use_expandable:n} \Arg{socket-name} +% \end{syntax} +% Fully expandable variant of \cs{socket_use:n}. This can be used in macro code +% to retrieve code from sockets which need to appear in an expandable context. +% +% This usually requires the plug to only contain expandable code and should therefore +% only be used for sockets which are clearly documented to be used in an expandable context. +% This command does not print any debugging info when \cs{DebugSocketsOn} is active +% and should therefore be avoided whenever possible. +% +% For performance reasons there is no explicit check that the socket was declared! +% \end{function} +% +% % \begin{function}{\ShowSocket,\LogSocket,\socket_show:n,\socket_log:n} % \begin{syntax} % \cs{ShowSocket} \Arg{socket-name} @@ -820,6 +836,7 @@ % % % \begin{macro}{\socket_new_plug:nnn,\socket_set_plug:nnn} +% \changes{v0.9b}{2024/10/27}{Make plug definition non-protected} % % Declaring a code for a socket is just making a definition, taking % the number of arguments from the saved int. @@ -834,7 +851,7 @@ { \cs_generate_from_arg_count:cNnn { @@_#1_plug_#2:w } - \cs_new_protected:Npn + \cs_new:Npn { \int_use:c { c_@@_#1_args_int } } {#3} % \end{macrocode} @@ -862,7 +879,7 @@ { \cs_generate_from_arg_count:cNnn { @@_#1_plug_#2:w } - \cs_set_protected:Npn + \cs_set:Npn { \int_use:c { c_@@_#1_args_int } } {#3} \@@_debug_term:n @@ -942,6 +959,17 @@ % \fmi{Implement?} % \end{macro} % +% \begin{macro}{\socket_use_expandable:nw,\socket_use_expandable:n} +% \changes{v0.9b}{2024/10/27}{Added \cs{socket_use_expandable:n}} +% The same as the non-expandable code, except for the missing debug output. +% \begin{macrocode} +\cs_new:Npn \socket_use_expandable:nw #1 { + \use:c { @@_#1_plug_ \str_use:c { l_@@_#1_plug_str } :w } +} +\cs_new_eq:NN \socket_use_expandable:n \socket_use_expandable:nw % socket with no inputs +% \end{macrocode} +% \end{macro} +% % % % diff --git a/macros/latex-dev/base/lttagging.dtx b/macros/latex-dev/base/lttagging.dtx index 74735a3762..6b68cd0e05 100644 --- a/macros/latex-dev/base/lttagging.dtx +++ b/macros/latex-dev/base/lttagging.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{lttagging.dtx} - [2024/10/11 v1.0j LaTeX Kernel (tagging support)] + [2024/10/21 v1.0k LaTeX Kernel (tagging support)] % \iffalse \documentclass{l3doc} \GetFileInfo{lttagging.dtx} @@ -78,7 +78,7 @@ % \DescribeMacro\tag_suspend:n % \DescribeMacro\tag_resume:n -% +% % The are places in code where it is import top stop any tagging % activities, e.g., when we are doing trial typesetting that it is % done several times. In such a case one must tag only the final @@ -107,46 +107,51 @@ % \DescribeMacro\UseTaggingSocket % \DescribeMacro\tag_socket_use:n % \DescribeMacro\tag_socket_use:nn -% To support tagging in packages we use sockets with names starting -% with \texttt{tagsupport/}. Usually, these sockets have exactly two -% plugs defined: -% \plug{noop} (when no tagging is requested or tagging is not wanted -% for some reason) and a second plug that enables the tagging. There -% may be more, e.g., tagging with special debugging, etc., but right -% now it is usually just on or off. -% -% Given that we sometimes have to suspend tagging, it would be fairly -% inefficient to put different plugs into these sockets whenever that -% happens. We therefore offer \cs{UseTaggingSocket} which is like -% \cs{UseSocket} except that the socket name is specified without -% \texttt{tagsupport/}, i.e., +% \DescribeMacro\tag_socket_use:nnn +% Given that we sometimes have to suspend tagging, it would be fairly +% inefficient to put different plugs into these sockets whenever that +% happens. We therefore offer \cs{UseTaggingSocket} which is like +% \cs{UseSocket} except that is expects a socket starting with +% \texttt{tagsupport/} but the socket name is specified without +% this prefix, i.e., % \begin{quote} % \verb=\UseTaggingSocket{foo}= $\to$ % \verb=\UseSocket{tagsupport/foo}= -% \end{quote} -% Beside being slightly shorter, the big advantage is that this way -% we can change \cs{UseTaggingSocket} to do nothing when tagging is -% suspended with \cs{SuspendTagging} instead of changing the plugs of -% the tagging support sockets back and forth. -% -% This means that with \cs{SuspendTagging} in force all socket -% arguments are ignored (including the case when there is a single -% one), i.e., all sockets used with \cs{UseTaggingSocket} behave as -% if the \text{noop} plug is assigned. -% -% It is possible to use the tagging support sockets with -% \cs{UseSocket} instead of \cs{UseTaggingSocket}, but in this case -% the socket remains active if \cs{SuspendTagging} is in force. There -% may be reasons for doing that, but in general we expect to always -% use \cs{UseTaggingSocket}. -% -% The L3 programming layer versions \cs{tag_socket_use:n} and -% \cs{tag_socket_use:nn} are slightly more efficient than +% \end{quote}. +% +% Beside being slightly shorter, the big advantage is that this way +% we can change \cs{UseTaggingSocket} to do nothing by switching a boolean +% instead of changing the plugs of the tagging support sockets back and forth. +% +% Usually, these sockets have (beside the default plug defined for every socket) +% one additional plug defined and directly assigned. This plug is used when +% tagging is active. +% There may be more plugs, e.g., tagging with special debugging or special behaviour +% depending on the class or PDF version etc., but right now it is usually just on or off. +% +% When tagging is suspended they all have the same predefined behaviour: +% The sockets with zero arguments do nothing. The sockets with one argument +% gobble their argument. The sockets with two arguments +% will drop their first argument and pass the second unchanged. +% +% It is possible to use the tagging support sockets with +% \cs{UseSocket} directly, but in this case the socket remains active +% if \cs{SuspendTagging} is in force. There may be reasons for doing +% that but in general we expect to always use \cs{UseTaggingSocket}. +% +% \DescribeMacro\UseExpandableTaggingSocket +% \DescribeMacro\tag_socket_use_expandable:n +% For special cases like in some \cs{halign} contexts we need a fully expandable +% version of the commend. For these cases, \cs{UseExpandableTaggingSocket} can be +% used. To allow being expandable, it does not output any debugging information +% if \cs{DebugSocketsOn} is in effect and therefore should be avoided whenever possible. +% +% The L3 programming layer versions \cs{tag_socket_use_expandable:n}, +% \cs{tag_socket_use:n}, \cs{tag_socket_use:nn}, and \cs{tag_socket_use:nnn} +% are slightly more efficient than % \cs{UseTaggingSocket} because they do not have to determine how -% many arguments the socket takes when disabling it, so in code that -% is using the L3 programming layer we recommend to use them instead -% of the CamelCase command. -% +% many arguments the socket takes when disabling it. +% % % \MaybeStop{} % @@ -156,12 +161,12 @@ % % % \begin{macro}{\tag_suspend:n,\tag_resume:n,\SuspendTagging,\ResumeTagging} -% +% % In the kernel, these commands get dummy definitions so that % they can be used without harm in packages. The real definition is % used when tagging gets enabled. % \begin{macrocode} -\cs_new_eq:NN \tag_suspend:n \use_none:n +\cs_new_eq:NN \tag_suspend:n \use_none:n \cs_new_eq:NN \tag_resume:n \use_none:n \cs_new_protected:Npn \SuspendTagging #1 { \tag_suspend:n {#1} } \cs_new_protected:Npn \ResumeTagging #1 { \tag_resume:n {#1} } @@ -170,7 +175,10 @@ % % \begin{macro}{\tag_socket_use:n, % \tag_socket_use:nn, +% \tag_socket_use:nnn, +% \tag_socket_use_expandable:n, % \UseTaggingSocket, +% \UseExpandableTaggingSocket, % } % Again this is not the final definition for the kernel; it is just % a version to get going while some parts of the kernel support are @@ -187,19 +195,21 @@ % % Dummy definitions in the kernel. % These definitions will get updated in \pkg{tagpdf}. +% The default in the kernel is just to get rid of the first argument, the second is preserved if present: +% \changes{v1.0k}{2024/10/21}{Changed behavior of two argument tagging sockets when disabled.} +% \changes{v1.0k}{2024/10/21}{Added expandable variants} % \begin{macrocode} +\cs_new:Npn \tag_socket_use_expandable:n #1 { } \cs_new_protected:Npn \tag_socket_use:n #1 { } \cs_new_protected:Npn \tag_socket_use:nn #1#2 { } -% \end{macrocode} -% The default in the kernel is just to get rid of the argument: -% \begin{macrocode} +\cs_new_protected:Npn \tag_socket_use:nnn #1#2#3 { #3 } \cs_new_protected:Npn \UseTaggingSocket #1 { \int_case:nnF { \int_use:c { c__socket_tagsupport/#1_args_int } } { 0 \prg_do_nothing: 1 \use_none:n - 2 \use_none:nn + 2 \use_ii:nn % \end{macrocode} % We do not expect tagging sockets with more than one or two % arguments, so for now we only provide those. @@ -208,15 +218,28 @@ \ERRORusetaggingsocket % that should get a proper error message } % \end{macrocode} +% The same as an expandable command: +% \begin{macrocode} +\cs_new:Npn \UseExpandableTaggingSocket #1 { + \int_case:nnF + { \int_use:c { c__socket_tagsupport/#1_args_int } } + { + 0 \prg_do_nothing: + 1 \use_none:n + 2 \use_ii:nn + } + \ERRORusetaggingsocket % that should get a proper error message +} +% \end{macrocode} % % \end{macro} % % \subsection{Tagging sockets} % This collects tagging sockets that should be generally available -% so that they can also be used even if the tagging code is not loaded. -% +% so that they can also be used even if the tagging code is not loaded. +% % \subsubsection{Tagging support for paragraph setup} -% +% % Paragraphs are tagged through the code in the para/hooks. This code is sometimes % adjusted, e.g. to produce a \enquote{flattened} paragraph or to use a different tag. % Sockets related to such code parts are collected here. @@ -225,22 +248,22 @@ % The block code needs to know if they are nested blockenvs inside % a flattened environment. For this it uses a counter. Inside some contexts, % e.g. at the begin of a minipage or a footnote this counter must be reset. -% We therefore define the counter here so that we can use it in the following -% socket. +% We therefore define the counter here so that we can use it in the following +% socket. % \begin{macrocode} \int_new:N \l__tag_block_flattened_level_int % \end{macrocode} % \end{macro} -% +% % \begin{socketdecl}{tagsupport/para/restore} % This socket restores the para related settings to their default. It % should be used in places where ``normal'' paragraph tagging must be ensured, for example -% at the begin of a footnote. +% at the begin of a footnote. % \begin{macrocode} \NewSocket{tagsupport/para/restore}{0} % \end{macrocode} % \end{socketdecl} -% +% % \begin{plugdecl}{default} % \changes{v1.0i}{2024/10/10}{Restore also paratagging (tagging/723)} % \begin{macrocode} @@ -255,7 +278,7 @@ \AssignSocketPlug{tagsupport/para/restore}{default} % \end{macrocode} % \end{plugdecl} -% +% % \begin{socketdecl}{tagsupport/para/begin,tagsupport/para/end} % These sockets are currently defined in tagpdf. They overwrite % definitions in the latex-lab-block code. There is also a simpler @@ -273,22 +296,22 @@ \NewSocket{tagsupport/recordtarget}{0} % \end{macrocode} % \end{socketdecl} -% +% % \begin{plugdecl}{kernel (tagsupport/recordtarget)} % \begin{macrocode} -% +% \NewSocketPlug{tagsupport/recordtarget}{kernel} { \tl_if_blank:VF \@currentHref { - \prop_gput:Nee - \g__tag_struct_dest_num_prop + \prop_gput:Nee + \g__tag_struct_dest_num_prop {\@currentHref} - {\tag_get:n{struct_num}} + {\tag_get:n{struct_num}} } } -\AssignSocketPlug{tagsupport/recordtarget}{kernel} -\ExplSyntaxOff +\AssignSocketPlug{tagsupport/recordtarget}{kernel} +\ExplSyntaxOff % \end{macrocode} % \end{plugdecl} % \subsubsection{Tagging sockets for toc} @@ -307,28 +330,28 @@ % \begin{socketdecl}{tagsupport/toc/starttoc/before, % tagsupport/toc/starttoc/after} % Tagging sockets for the begin and end of start of \cs{@starttoc}. -% They take one argument, the extension. +% They take one argument, the extension. % \begin{macrocode} \NewSocket{tagsupport/toc/starttoc/before}{1} \NewSocket{tagsupport/toc/starttoc/after}{1} % \end{macrocode} % \end{socketdecl} -% +% % \begin{socketdecl}{tagsupport/toc/leaders/before, % tagsupport/toc/leaders/after} % Tagging sockets to make the dot leaders an artifact. -% They do not take an argument. +% They do not take an argument. % \begin{macrocode} \NewSocket{tagsupport/toc/leaders/before}{0} \NewSocket{tagsupport/toc/leaders/after}{0} % \end{macrocode} % \end{socketdecl} -% +% % \subsubsection{Tagging support for table/tabular packages} % % The code uses a number of sockets to inject the tagging % commands. These can be easily set to a noop-plug in case the -% automated tagging is not wanted. +% automated tagging is not wanted. % % \begin{socketdecl}{tagsupport/tbl/cell/begin, % tagsupport/tbl/cell/end, @@ -463,10 +486,10 @@ % \end{socketdecl} % % \subsubsection{Tagging Support for floats} -% +% % \begin{socketdecl}{tagsupport/float/hmode/begin, % tagsupport/float/hmode/end} -% These sockets are used if the float is called in +% These sockets are used if the float is called in % hmode. % \changes{v1.0h}{2024/09/13}{Sockets for floats added} % \begin{macrocode} @@ -484,38 +507,38 @@ % \end{macrocode} % \end{socketdecl} % -% +% % \begin{socketdecl}{tagsupport/caption/begin, % tagsupport/caption/end} % These sockets are used in \cs{@makecaption}. % They open and close the \texttt{Caption} structure. -% Their default plugs assume that they are used in +% Their default plugs assume that they are used in % vmode. The argument of the begin socket is % the structure number of the parent float. If it is -% empty the current structure number is used. +% empty the current structure number is used. % \begin{macrocode} \NewSocket{tagsupport/caption/begin}{1} \NewSocket{tagsupport/caption/end}{0} % \end{macrocode} % \end{socketdecl} -% +% % \begin{socketdecl}{tagsupport/caption/label/begin, % tagsupport/caption/label/end} % These sockets are used in \cs{@makecaption} around the -% label. Their default plugs ensure that -% the label is outside the paragraph and that +% label. Their default plugs ensure that +% the label is outside the paragraph and that % the rest of the caption uses flattened para mode. If the -% caption is not in a hbox, the \texttt{para/begin} -% socket should follow to properly start the paragraph. +% caption is not in a hbox, the \texttt{para/begin} +% socket should follow to properly start the paragraph. % \begin{macrocode} \NewSocket{tagsupport/caption/label/begin}{0} -\NewSocket{tagsupport/caption/label/end}{0} +\NewSocket{tagsupport/caption/label/end}{0} % \end{macrocode} % \end{socketdecl} -% +% % \section{For lttab.dtx parked here for now} % -% +% % \begin{macrocode} %<@@=tbl> \ExplSyntaxOn @@ -536,7 +559,7 @@ % \g_@@_row_int, % \g_@@_span_tl, % \g_@@_table_cols_tl} -% +% % \cs{g_@@_row_int} holds the current row number in the table. The % value \texttt{0} means we haven't yet processed the table % preamble (or in case of longtable are just in front of the next @@ -606,14 +629,14 @@ % \subsection{Tracing/debugging} % % \begin{macro}{\DebugTablesOn,\DebugTablesOff} -% +% % \begin{macrocode} \def\DebugTablesOn{ \cs_set_eq:NN \@@_trace:n \typeout -} +} \def\DebugTablesOff{ \cs_set_eq:NN \@@_trace:n \use_none:n -} +} % \end{macrocode} % % \begin{macrocode} @@ -663,7 +686,7 @@ % % % \begin{macro}{\l_@@_tmpa_seq} -% +% % \begin{macrocode} \seq_new:N \l_@@_tmpa_seq % \end{macrocode} @@ -672,7 +695,7 @@ % % % \begin{macro}{\tbl_count_missing_cells:n} -% +% % We might have the situation that some table package has not % implemented the \cs{tbl_count_table_cols:} in which case % \cs{g_@@_table_cols_tl} would always be zero and we would get an @@ -708,7 +731,7 @@ % % % \begin{macro}{\tbl_save_outer_table_cols:} -% +% % \begin{macrocode} \cs_new_protected:Npn \tbl_save_outer_table_cols: { \tl_set_eq:NN \l_@@_saved_table_cols_tl \g_@@_table_cols_tl @@ -718,7 +741,7 @@ % % % \begin{macro}{\tbl_init_cell_data_for_table:} -% +% % \begin{macrocode} \cs_new_protected:Npn \tbl_init_cell_data_for_table: { \tl_set:No \l_@@_saved_col_tl {\int_use:N \g_@@_col_int } @@ -832,14 +855,14 @@ % % % \begin{macro}{\tbl_restore_outer_cell_data:} -% +% % \begin{macrocode} \cs_new_protected:Npn \tbl_restore_outer_cell_data: { \int_gset:Nn \g_@@_col_int { \l_@@_saved_col_tl } \int_gset:Nn \g_@@_row_int { \l_@@_saved_row_tl } \tl_gset_eq:NN \g_@@_span_tl \l_@@_saved_span_tl \tl_gset_eq:NN \g_@@_table_cols_tl \l_@@_saved_table_cols_tl - \UseTaggingSocket{tbl/restore/celldata} + \UseTaggingSocket{tbl/restore/celldata} \@@_trace:n { ==>~ restored~cell~data:~ \int_use:N \g_@@_row_int, \int_use:N \g_@@_col_int, @@ -901,7 +924,7 @@ % the macro \cs{tbl_count_missing_cells:n} is executed and % then the row is finished with a final \cs{cr}. % \begin{macrocode} -\cs_new:Npn \tbl_crcr:n #1 { +\cs_new:Npn \tbl_crcr:n #1 { \int_compare:nNnT \g_@@_col_int > 0 { \tbl_count_missing_cells:n {#1} @@ -928,7 +951,7 @@ % \changes{v1.0h}{2024/09/20}{moved \cs{@kernel@refstepcounter} into ltxref} % This is needed for \pkg{longtable} because \cs{refstepcounter} is % setting up a target when \pkg{hyperref} is loaded and we don't -% want that in \pkg{longtable}.%% +% want that in \pkg{longtable}.%% % Prevent longtable patching by hyperref until hyperref does so automatically: % \begin{macrocode} \def\hyper@nopatch@longtable{} diff --git a/macros/latex-dev/base/lttemplates-code.pdf b/macros/latex-dev/base/lttemplates-code.pdf Binary files differindex 2a2ede340d..aa3b6f9c56 100644 --- a/macros/latex-dev/base/lttemplates-code.pdf +++ b/macros/latex-dev/base/lttemplates-code.pdf diff --git a/macros/latex-dev/base/lttemplates-doc.pdf b/macros/latex-dev/base/lttemplates-doc.pdf Binary files differindex b828c74d87..76c00342a5 100644 --- a/macros/latex-dev/base/lttemplates-doc.pdf +++ b/macros/latex-dev/base/lttemplates-doc.pdf diff --git a/macros/latex-dev/base/lttextcomp.dtx b/macros/latex-dev/base/lttextcomp.dtx index 7f247747d6..1ee4a18b7a 100644 --- a/macros/latex-dev/base/lttextcomp.dtx +++ b/macros/latex-dev/base/lttextcomp.dtx @@ -2357,8 +2357,8 @@ % \changes{v1.1a}{2024/01/27}{Added check file for encoding subset} % \begin{macrocode} %<*TS1check> -\Providesfile{checkencodingsubset.tex} - [2024/01/27 v0.5a Figure out safe TS1 encoding subsets] +\ProvidesFile{checkencodingsubset.tex} + [2024/10/18 v0.5b Figure out safe TS1 encoding subsets] % \end{macrocode} % % \begin{macrocode} diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx index 50c8b9a91f..76a16e3528 100644 --- a/macros/latex-dev/base/ltvers.dtx +++ b/macros/latex-dev/base/ltvers.dtx @@ -112,10 +112,10 @@ %</2ekernel> %<latexrelease>\edef\latexreleaseversion %<*2ekernel|latexrelease> - {2024-11-01} + {2025-06-01} %</2ekernel|latexrelease> %<*2ekernel> -\def\patch@level{-4} +\def\patch@level{0} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf Binary files differindex c9d6243144..ea8d21b55f 100644 --- a/macros/latex-dev/base/ltx3info.pdf +++ b/macros/latex-dev/base/ltx3info.pdf diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf Binary files differindex bf34a6158d..f0034affb5 100644 --- a/macros/latex-dev/base/ltxdoc.pdf +++ b/macros/latex-dev/base/ltxdoc.pdf diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf Binary files differindex 17b55b3b69..7be9058ba3 100644 --- a/macros/latex-dev/base/makeindx.pdf +++ b/macros/latex-dev/base/makeindx.pdf diff --git a/macros/latex-dev/base/manifest.txt b/macros/latex-dev/base/manifest.txt index 21b3c0bff3..e393012417 100644 --- a/macros/latex-dev/base/manifest.txt +++ b/macros/latex-dev/base/manifest.txt @@ -76,7 +76,8 @@ % ltnews37.tex -- What was new in the release dated 2023/06. % ltnews38.tex -- What was new in the release dated 2023/11. % ltnews39.tex -- What was new in the release dated 2024/06. -% +% ltnews40.tex -- What was new in the release dated 2024/11. +% ltnews41.tex -- What was new in the release dated 2025/06. % % ltx3info.tex -- Information about the LaTeX3 project. % diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf Binary files differindex b2f9b603d3..a176dd214f 100644 --- a/macros/latex-dev/base/modguide.pdf +++ b/macros/latex-dev/base/modguide.pdf diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf Binary files differindex daeb13bff5..06fcd085a8 100644 --- a/macros/latex-dev/base/nfssfont.pdf +++ b/macros/latex-dev/base/nfssfont.pdf diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf Binary files differindex f3df0c2e37..5a14431bdd 100644 --- a/macros/latex-dev/base/proc.pdf +++ b/macros/latex-dev/base/proc.pdf diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf Binary files differindex 22f5e97d71..8297e59343 100644 --- a/macros/latex-dev/base/slides.pdf +++ b/macros/latex-dev/base/slides.pdf diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf Binary files differindex f9e8e569e9..e1c640709a 100644 --- a/macros/latex-dev/base/slifonts.pdf +++ b/macros/latex-dev/base/slifonts.pdf diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf Binary files differindex 618ab9f305..87c4de96db 100644 --- a/macros/latex-dev/base/source2e.pdf +++ b/macros/latex-dev/base/source2e.pdf diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf Binary files differindex 46ee8c1e14..a711c567f2 100644 --- a/macros/latex-dev/base/syntonly.pdf +++ b/macros/latex-dev/base/syntonly.pdf diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf Binary files differindex dcf6ce6c2e..2174d9c5d3 100644 --- a/macros/latex-dev/base/tlc2.pdf +++ b/macros/latex-dev/base/tlc2.pdf diff --git a/macros/latex-dev/base/tlc3.pdf b/macros/latex-dev/base/tlc3.pdf Binary files differindex 978b713fb6..f7c206a692 100644 --- a/macros/latex-dev/base/tlc3.pdf +++ b/macros/latex-dev/base/tlc3.pdf diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf Binary files differindex c146c31e21..d3a865fe6c 100644 --- a/macros/latex-dev/base/tulm.pdf +++ b/macros/latex-dev/base/tulm.pdf diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf Binary files differindex 0a1b81b425..2ebb782a01 100644 --- a/macros/latex-dev/base/usrguide-historic.pdf +++ b/macros/latex-dev/base/usrguide-historic.pdf diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf Binary files differindex c33ac4a591..4cdaff2fa3 100644 --- a/macros/latex-dev/base/usrguide.pdf +++ b/macros/latex-dev/base/usrguide.pdf diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex index 2b9e959627..e4ea6e4e0c 100644 --- a/macros/latex-dev/base/usrguide.tex +++ b/macros/latex-dev/base/usrguide.tex @@ -43,7 +43,7 @@ \texttt{usrguide.tex} for full details.}% } -\date{2024-05-24} +\date{2024-10-22} \NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}} \NewDocumentCommand\marg{m}{\arg{#1}} @@ -265,7 +265,16 @@ These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but create environments (\cs{begin}\arg{env} \ldots{} \cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code} may access the arguments as defined by \meta{arg spec}. The arguments will be -given following \cs{begin}\arg{env}. +given following \cs{begin}\arg{env}. Any spaces at the start and end of the +\arg{env} are removed before the definition takes place, thus +\begin{verbatim} +\NewDocumentEnvironment{foo} +\end{verbatim} +and +\begin{verbatim} +\NewDocumentEnvironment{ foo } +\end{verbatim} +both create the same \enquote{\texttt{foo}} environment. \subsection{Optional arguments} \label{sec:cmd:opt} diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf Binary files differindex b7f8f1da07..fee976bcfa 100644 --- a/macros/latex-dev/base/utf8ienc.pdf +++ b/macros/latex-dev/base/utf8ienc.pdf diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf Binary files differindex d570bb43fe..5796eaeff8 100644 --- a/macros/latex-dev/base/webcomp.pdf +++ b/macros/latex-dev/base/webcomp.pdf |