summaryrefslogtreecommitdiff
path: root/macros/latex/base/ltnews32.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/base/ltnews32.tex')
-rw-r--r--macros/latex/base/ltnews32.tex872
1 files changed, 872 insertions, 0 deletions
diff --git a/macros/latex/base/ltnews32.tex b/macros/latex/base/ltnews32.tex
new file mode 100644
index 0000000000..f26449af6b
--- /dev/null
+++ b/macros/latex/base/ltnews32.tex
@@ -0,0 +1,872 @@
+% \iffalse meta-comment
+%
+% Copyright 2019-2020
+% The LaTeX3 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: ltnews32.tex
+%
+% This is issue 32 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+
+\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}
+
+% 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\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#2}%
+ {gnats issue #1/#2}%
+ )}%
+ \par}
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+
+\vbadness=1400 % accept slightly empty columns
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{October}
+\publicationyear{2020}
+
+\publicationissue{32}
+
+\begin{document}
+
+\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB
+
+\maketitle
+{\hyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+
+\medskip
+
+
+\section{Introduction}
+
+The 2020-10-01 release of \LaTeX{} shows that work on improving
+\LaTeX{} has again intensified. The two most important new features
+are the kernel support for \pkg{xparse} and the introduction of the
+new hook management system for \LaTeX{}, but as you can see there are
+many smaller enhancements and bug fixes added to the kernel and
+various packages.
+
+
+
+\section{Providing \pkg{xparse} in the format}
+
+The official interface in the \LaTeXe{} kernel for creating
+document-level commands has always been \cs{newcommand}. This was a
+big step forward from \LaTeX~2.09. However, it was still very limited
+in the types of command it can create: those taking at most one
+optional argument in square brackets, then zero or more mandatory
+arguments. Richer syntaxes required use of the \TeX{} \cs{def}
+primitive along with appropriate low-level macro programming.
+
+The \LaTeX{} team started work on a comprehensive document-command
+parser, \pkg{xparse}, in the late 1990s. In the past decade, the
+experimental ideas it provides have been carefully worked through and
+moved to a stable footing. As such, \pkg{xparse} is now used to define
+a very large number of document and package commands. It does this by
+providing a rich and self-consistent syntax to describe a wide range of
+interfaces seen in \LaTeX{} packages.
+
+The ideas developed in \pkg{xparse} are now sufficiently well tested
+that the majority can be transferred into the \LaTeX{} kernel. Thus
+the following commands have been added
+\begin{itemize}
+ \item \cs{NewDocumentCommand}, \cs{RenewDocumentCommand},
+ \cs{ProvideDocumentCommand}, \cs{DeclareDocumentCommand}
+ \item \cs{NewExpandableDocumentCommand}, \cs{RenewExpandableDocumentCommand},
+ \cs{ProvideExpandableDocumentCommand}, \cs{DeclareExpandableDocumentCommand}
+ \item \cs{NewDocumentEnvironment}, \cs{RenewDocumentEnvironment},
+ \cs{ProvideDocumentEnvironment}, \cs{DeclareDocumentEnvironment}
+ \item \cs{BooleanTrue} \cs{BooleanFalse}
+ \item \cs{IfBooleanTF}, \cs{IfBooleanT}, \cs{IfBooleanF}
+ \item \cs{IfNoValueTF}, \cs{IfNoValueT}, \cs{IfNoValueF}
+ \item \cs{IfValueTF}, \cs{IfValueT}, \cs{IfValueF}
+ \item \cs{SplitArgument}, \cs{SplitList}, \cs{TrimSpaces},
+ \cs{ProcessList}, \cs{ReverseBoolean}
+ \item \cs{GetDocumentCommandArgSpec}
+ \cs{GetDocumentEnvironmentArgSpec}
+\end{itemize}
+
+Most, but not all, of the argument types defined by \pkg{xparse} are
+now supported at the kernel level. In particular, the types
+\texttt{g}/\texttt{G}, \texttt{l} and \texttt{u} are \emph{not} provided by
+the kernel code; these are deprecated but still available by
+explicitly loading \pkg{xparse}. All other argument types \emph{are}
+now available directly within the \LaTeXe{} kernel.
+
+
+
+
+
+
+\section{A hook management system for \LaTeX{}}
+
+With the fall 2020 release of \LaTeX{} we provide a general hook
+management system for the kernel and for packages. This will allow
+packages to safely add code to various kernel and package hooks and if
+necessary define rules to reorder the code in the hooks to resolve
+typical package loading order issues. This hook system is written in
+the L3 programming layer and thus forms the first larger application
+within the kernel that makes use of the \LaTeX3 functionality now
+available (if we discount \pkg{xparse} which has already been available for
+a long time as a separate package).
+
+The file \texttt{lthooks.dtx} holds the core management code for hooks
+and defines basic hooks for environments (as previously offered by
+\pkg{etoolbox}), \texttt{ltshipout.dtx} provides kernel hooks into the
+shipout process (making packages like \pkg{atbegshi},
+etc., unnecessary) and the file \texttt{ltfilehook.dtx} holds
+redefinitions for commands like \cs{input} or \cs{usepackage} so that
+they offer hooks in a similar fashion to what is provided by the
+\pkg{filehook} package.
+
+At the moment the integration is lightweight, overwriting definitions
+made earlier during format generation (though this will change after
+more thorough testing). For that reason the documentation isn't in its
+final form either and you have to read through three different
+documents:
+\begin{description}
+ \item[\texttt{lthooks-doc.pdf}] Core management interface and basic
+ hooks for environments provided by the kernel.
+
+ \item[\texttt{ltshipout-doc.pdf}] Hooks accessible while a page is
+ being shipped out.
+
+ \item[\texttt{ltfilehook-doc.pdf}] Hooks used when reading a file.
+\end{description}
+For those who wish to also study the code, replace \texttt{-doc} with
+\texttt{-code}, e.g., \texttt{lthooks-code.pdf}. All documents should
+be accessible via \texttt{texdoc}, e.g.,
+\begin{verbatim}
+ texdoc lthooks-doc
+\end{verbatim}
+should open the core documentation for you.
+
+
+
+\section{Other changes to the \LaTeX{} kernel}
+
+
+\subsection{\cs{symbol} in math mode for large Unicode values}
+
+The \LaTeXe{} kernel defines the command \cs{symbol}, which allows
+characters to be typeset by entering their `slot number'. With the
+\LuaTeX{} and \XeTeX{} engines, these slot numbers can extend to very
+large values to accommodate Unicode characters in the upper Unicode
+planes (e.g., bold mathematical capital A is slot number
+\texttt{"1D400} in hex or \texttt{119808} in decimal). The \XeTeX{}
+engine did not allow \cs{symbol} in math mode for values above
+$2^{16}$; this limitation has now been lifted.
+%
+\githubissue{124}
+
+
+\subsection{Correct Unicode value of \cs{=y} (\=y)}
+
+The Unicode slot for \=y was incorrectly pointing to the slot for
+\=Y. This has been corrected.
+%
+\githubissue{326}
+
+\subsection{Add support for Unicode soft hyphens}
+
+For a long time, the UTF-8 option for \pkg{inputenc} made the Unicode
+soft hyphen character (U+00AD) an alias for the \LaTeX\ soft hyphen
+\cs{-}. The Unicode engines \XeTeX{} and \LuaTeX{} behaved
+differently though: They either ignored U+00AD or interpreted it as an
+unconditional hyphen. This inconsistency is fixed now and \LaTeX{}
+always treats \texttt{U+00AD} as \cs{-}.
+%
+\githubissue{323}
+
+
+
+\subsection{Fix capital accents in Unicode engines}
+
+In Unicode engines the capital accents such as \cs{capitalcedilla},
+etc., have been implemented as trivial shorthands for the normal
+accents (because other than Computer Modern virtually no fonts support
+them), but that failed when \pkg{hyperref} got loaded. This has been
+corrected.
+%
+\githubissue{332}
+
+
+
+\subsection{Support \pkg{calc} in various kernel commands}
+
+The \cs{hspace}, \cs{vspace}, \cs{addvspace}, \cs{\textbackslash} and
+other commands simply passed their argument to a \TeX{} primitive to
+produce the necessary space. As a result it was impossible to specify
+anything other than a simple dimension value in such arguments. This
+has been changed, so that now \pkg{calc} syntax is also supported with
+these commands.
+%
+\githubissue{152}
+
+\subsection{Support \eTeX\ length expressions in \texttt{picture} coordinates}
+
+Picture mode coordinates specified with \texttt{(\_,\_)} previously
+accepted multiples of \cs{unitlength}. They now also allow \eTeX\ length
+expressions (as used by the \cs{glueexpr} primitive although all uses
+in \texttt{picture} mode are non-stretchy).
+
+So, valid uses include \verb|\put(2,2)| as previously,
+ but now also uses such as\tubcommand\\\verb|\put(\textwidth-5cm,0.4\textheight)|.
+
+Note that you can only use expressions with lengths; \verb|\put(1+2,0)| is not
+supported.
+
+
+\subsection{Spaces in filenames of included files}
+
+File names containing spaces lead to unexpected results when used in
+the commands \cs{include} and \cs{includeonly}. This has now been
+fixed and the argument to \cs{include} can contain a file name
+containing spaces. Leading or trailing spaces will be stripped off
+but spaces within the file name are kept. The argument to
+\cs{includeonly}, which is a comma-separated list of files to process,
+can also contain spaces with any leading and trailing spaces stripped
+from the individual filenames while spaces \emph{in} the file
+names will remain intact.
+%
+\githubissue[s]{217 and 218}
+
+
+\subsection{Avoid extra line in \cs{centering}, \cs{raggedleft} or \cs{raggedright}}
+
+If we aren't justifying paragraphs then a very long word (longer than a
+line) could result in an unnecessary extra line in order to prevent a
+hyphen in the second-last line of the paragraph. This is now avoided
+by setting \cs{finalhyphendemerits} to zero in unjustified settings.
+%
+\githubissue{274}
+
+\def\negskip{\tubcommand{\vspace*{-.2pt}}}
+\negskip
+\subsection{Set a non-zero \cs{baselineskip} in text scripts}
+
+As \cs{textsuperscript} and \cs{textsubscript} usually contain only a
+few characters on a single line the \cs{baselineskip} was set to
+zero. However, \pkg{hyperref} uses that value to determine the height
+of a link box which consequently came out far too small. This has
+been adjusted.
+%
+\githubissue{249}
+
+\negskip
+\subsection{Spacing issues when using \cs{linethickness}}
+
+In some circumstances the use of \cs{linethickness} introduced a
+spurious space that shifted objects in a \texttt{picture} environment
+to the right. This has been corrected.
+%
+\githubissue{274}
+
+
+\negskip
+\subsection{Better support for the legacy series default interface}
+
+In the initial implementation of \LaTeX's font selection scheme (NFSS)
+changes to any default were carried out by redefining some
+commands, e.g., \cs{seriesdefault}. In 2019 we introduced various
+extensions and with it new methods of customizing certain parts of
+NFSS, e.g., the recommended way for changing the series default(s) is
+now through \cs{DeclareFontSeriesDefault}~\cite{32:ltnews31}. In this
+release we improved the support for legacy documents using the old
+method to cover additional edge cases.
+%
+\githubissue[s]{306,315}
+
+
+\negskip
+\subsection{Support for uncommon font series defaults}
+
+If a font family was set up with fairly unusual font series defaults,
+e.g.,
+\begin{verbatim}
+ \renewcommand\ttdefault{lmvtt}
+ \DeclareFontSeriesDefault[tt]{md}{lm}
+ \DeclareFontSeriesDefault[tt]{bf}{bm}
+\end{verbatim}
+then a switch between the main document families, e.g.,
+\verb=\ttfamily...\rmfamily= did not always correctly continue
+typesetting in medium or bold series if that involved adjusting the
+values used by \verb=\mdseries= or \verb=\bfseries=. This has now
+been corrected.
+%
+\githubissue{291}
+
+\subsection{Checking the current font series context}
+
+Sometimes it is necessary to define commands that act differently when
+used in bold context (e.g., inside \cs{textbf}). Now that it is
+possible in \LaTeX{} to specify different \enquote{\texttt{bf}}
+defaults based for each of the three meta families (\texttt{rm},
+\texttt{sf} and \texttt{tt}) via \cs{DeclareFontSeriesDefault}, it is
+no longer easy to answer the question \enquote{am I typesetting in
+ a bold context?}. To help with this problem a new command was provided:
+\begin{quote}
+ \cs{IfFontSeriesContextTF}\Arg{context}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+The \meta{context} can be either \texttt{bf} (bold) or \texttt{md}
+(medium) and depending on whether or not the current font is
+recognized as being selected through \cs{bfseries} or \cs{mdseries}
+the \meta{true code} or \meta{false code} is executed.
+As an example
+\begin{verbatim}
+\usepackage{bm} % (bold math)
+\newcommand\vbeta{\IfFontSeriesContextTF{bf}%
+ {\ensuremath{\bm{\beta}}}%
+ {\ensuremath{\beta}}}
+\end{verbatim}
+This way you can write \cs{vbeta}\texttt{-isotopes} and if used in a
+heading it comes out in a bolder version.
+%
+\githubissue{336}
+
+
+\subsection{Avoid spurious package option warning}
+
+When a package is loaded with a number of options, say \texttt{X},
+\texttt{Y} and \texttt{Z}, and then later another loading attempt was
+made with a subset of the options or no options, it was possible
+to get an error message that option \texttt{X} is not known to the
+package. This obviously incorrect error was due to a timing issue
+where the list of available options got lost prematurely. This has now
+been fixed.
+%
+\githubissue{22}
+
+
+\subsection{Adjusting \texttt{fleqn}}
+
+In \pkg{amsmath} the \cs{mathindent} parameter used with the
+\texttt{fleqn} design is a rubber length parameter allowing for setting
+it to a value such as \texttt{1em minus 1em}, i.e., so that the normal
+indentation can be reduced in case of very wide math displays.
+This is now also supported by the \LaTeX{} standard classes.
+
+In addition a compressible space between formula and equation number
+in the \texttt{equation} environment got added when the \texttt{fleqn}
+option is used so that a very wide formula doesn't bump into the
+equation number.
+%
+\githubissue{252}
+
+
+\subsection{Provide \cs{clap}}
+
+\LaTeX{} has inherited \cs{llap} and \cs{rlap} from plain \TeX{}
+(zero-sized boxes whose content sticks out to the left or right,
+respectively) but there isn't a corresponding \cs{clap} command that
+centers the material. This missing command was added by several
+packages, e.g., \pkg{mathtools}, and has now been added to the
+kernel.
+
+\subsection{Fix to legacy math alphabet interface}
+
+When using the \LaTeX{}~2.09 legacy math alphabet interface, e.g.,
+\verb=$\sf -1$= instead of \verb=$\mathsf{-1}$=, an extra math Ord atom
+was added to the formula in case the math alphabet was used for the first
+time. In some cases this math atom would change the spacing, e.g.,
+change the unary minus sign into a binary minus in the above example. This
+has finally been fixed.
+%
+\gnatsissue{latex}{3357}
+
+
+
+\subsection{Added tests for format, package and class dates}
+
+To implement compatibility code or to ensure that certain features are
+available it is helpful and often necessary to check the date of the
+format or that of a package or class and execute different code based
+on the result. For that, \LaTeX\ previously had only internal commands
+(\cs{@ifpackagelater} and \cs{@ifclasslater}) for testing package or
+class names, but nothing reasonable for testing the format date. For the
+latter one had to resort to some obscure command \cs{@ifl@t@r} that,
+given its cryptic name, was clearly never intended for use even in
+package or class code. Furthermore, even the existing interface
+commands were defective as they are testing for \enquote{equal or
+ later} and not for \enquote{later} as their names indicate.
+
+We have therefore introduced three new CamelCase commands as the
+official interface for such tests
+\begin{quote}
+ \cs{IfFormatAtLeastTF}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+and for package and class tests
+\begin{quote}
+ \cs{IfClassAtLeastTF}\Arg{class name}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code} \\
+ \cs{IfPackageAtLeastTF}\Arg{package~name}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+For compatibility reasons the legacy commands remain available, but we
+suggest to replace them over time and use the new interfaces in new
+code.
+%
+\githubissue{186}
+
+
+\subsection{Avoid problematic spaces after \cs{verb}}
+
+If a user typed \verb*=\verb !~! foo= instead of
+\verb*=\verb!~! foo= by mistake, then surprisingly the result was
+``\verb=!~!=foo'' without any warning or error.
+%
+What happened was that the
+\verb*= = became the argument delimiter due to the rather complex
+processing done by \cs{verb} to render verbatim. This has been
+fixed and spaces directly following the command \cs{verb} or \cs{verb*}
+are now ignored as elsewhere.
+%
+\githubissue{327}
+
+
+\subsection{Provide a way to copy robust commands\ldots}
+
+With the previous \LaTeXe{} release, several user-level commands were
+made robust, so the need for a way to create copies of these commands
+(often to redefine them) increased, and the \LaTeXe{} kernel didn't have
+a way to do so. Previously this functionality was provided in part by
+Heiko Oberdiek's \pkg{letltxmacro} package, which allows a robust
+command \verb=\foo= to be copied to \verb=\bar= with
+\verb=\LetLtxMacro\bar\foo=.
+
+From this release onwards, the \LaTeXe{} kernel provides
+\cs{NewCommandCopy} (and \verb=\Renew...= and \verb=\Declare...=
+variants) which functions almost like
+\verb=\LetLtxMacro=. To the end user, both should work the same way,
+and one shouldn't need to worry about the definition of the command:
+\cs{NewCommandCopy} should do the hard work.
+
+\cs{NewCommandCopy} knows about the different types of definitions from
+the \LaTeXe{} kernel, and also from other packages, such as
+\pkg{xparse}'s command declarations like \cs{NewDocumentCommand}, and
+\pkg{etoolbox}'s \cs{newrobustcmd}, and it can be extended to cover
+further packages.
+%
+\githubissue{239}
+
+
+\subsection{\ldots\ and a way to \cs{show} them}
+
+It is sometimes necessary to look up the definition of a command, and often
+one not only doesn't know where that command is defined, but doesn't
+know if it gets redefined by some package, so often enough looking at
+the source doesn't help. The typical way around this problem is to use
+\TeX's \cs{show} primitive to look at the definition of a command, which
+works fine until the command being \cs{show}n is robust. With
+\verb=\show\frac= one sees
+\begin{verbatim}
+>> \frac=macro:
+->>\protect \frac .
+\end{verbatim}
+which is not very helpful. To show the actual command the user needed to
+notice that the real definition of \cs{frac} is in the \verb*=\frac = %*
+macro and do \verb=\expandafter\show\csname frac\space\endcsname=.
+
+But with the machinery for copying robust commands in place it is
+already possible to examine a command and detect (as far as a macro
+expansion language allows) how it was defined. \cs{ShowCommand} knows
+that and with \verb=\ShowCommand\frac= the terminal will show
+\begin{verbatim}
+>> \frac=robust macro:
+->>\protect \frac .
+
+>> \frac =\long macro:
+#1#2->>{\begingroup #1\endgroup \over #2}.
+\end{verbatim}
+%
+\githubissue{373}
+
+\subsection{Merge \pkg{l3docstrip} into \pkg{docstrip}}
+
+The file \pkg{l3docstrip.tex} offered a small extension over the
+original \pkg{docstrip.tex} file supporting the
+\texttt{\%\string<@@=\meta{module}\string>} syntax of \pkg{expl3}.
+This has been merged into \pkg{docstrip} so that it can now be
+used for both traditional \texttt{.dtx} files and those containing
+code written in the L3 programming layer language.
+%
+\githubissue{337}
+
+
+\subsection{Support vertical typesetting with \pkg{doc}}
+
+The \texttt{macrocode} environment uses a \texttt{trivlist} internally
+and as part of this sets up the \cs{@labels} box to contain some
+horizontal skips, but that box is never used. As a result this
+generates an issue in some circumstances if the typesetting direction
+is vertical. This has now been corrected to support such use cases as
+well.
+%
+\githubissue{344}
+
+
+\subsection{Record the counter name stepped by \cs{refstepcounter}}
+
+\cs{refstepcounter} now stores the name of the counter in \cs{@currentcounter}.
+This allows packages like \pkg{zref} and \pkg{hyperref} to store the name without
+having to patch \cs{refstepcounter}.
+%
+\githubissue{300}
+
+
+\subsection{Native Lua\TeX\ behavior for \cs{-}}
+
+\LaTeX\ changes \cs{-} to add a discretionary hyphen even if \cs{hyphenchar}
+is set to $-1$. This change is not necessary under Lua\TeX\ because there
+\cs{-} is not affected by \cs{hyphenchar} in the first place. Therefore this
+behavior has been changed to ensure that Lua\TeX's (language specific)
+hyphenation characters are respected by \cs{-}.
+
+
+
+\subsection{Allow \cs{par} commands inside \cs{typeout}}
+
+\cs{typeout} used to choke when seeing an empty line or a \cs{par}
+command in its argument. However, sometimes it is used to display
+arbitrary user input or code (wrapped, for example, in
+\cs{unexpanded}) which may contain explicit \cs{par} commands. This is
+now allowed.
+%
+\githubissue{335}
+
+\subsection{Spacing commands moved from \pkg{amsmath} to the kernel}
+Originally \LaTeX{} only provided a small set of spacing commands
+for use in text and math, some of the commands like \cs{;} were
+only supported in math mode. \texttt{amsmath} normalized and
+provided all of them in text and math. This code has now been
+moved to the kernel so that it is generally available.
+%
+\githubissue{303}
+
+\begin{tabular}{lll}
+command name(s) & math & text\\\hline
+\cs{,} \cs{thinspace} & $x\,x$ & x\,x\\
+\cs{!} \cs{negthinspace} \; & $x\!x$ & x\!x\\
+\cs{:} \cs{>} \cs{medspace} & $x\:x$ & x\:x\\
+\cs{negmedspace} & $x\negmedspace x$ & x\negmedspace x\\
+\cs{;} \cs{thickspace} & $x\;x$ & x\;x\\
+\cs{negthickspace} & $x\negthickspace x$ & x\negthickspace x\\
+\end{tabular}
+
+
+
+\subsection{Access raw glyphs in \LuaTeX\ without reloading fonts}
+
+\LaTeX's definitions for \cs{textquotesingle},\tubcommand\\ \cs{textasciigrave}, and
+\cs{textquotedbl} for the TU encoding in \LuaTeX\ need special handling to
+stop the shaper from replacing these characters with curly quotes.
+This used to be done by reloading the current font without the \texttt{tlig}
+feature, but that came with multiple disadvantages: It behaves differently
+than the corresponding \XeTeX\ code and it is not very efficient.
+This code has now been replaced with an implementation which injects a
+protected glyph node which is not affected by font shaping.
+%
+\githubissue{165}
+
+
+\subsection{Added a fourth empty argument to \cs{contentsline}}
+
+\LaTeX's \cs{addcontentsline} writes a \cs{contentsline}
+command with three arguments to the \texttt{.toc} and similar files.
+\pkg{hyperref} redefines \cs{addcontentsline} to write
+a fourth argument. The change unifies the number of arguments
+by writing an additional empty brace group.
+
+
+
+\subsection{Lua\TeX\ callback \texttt{new\_graf} made \texttt{exclusive}}
+
+Corrected an incorrect callback type which caused return values from the
+\texttt{new\_graf} callback to be ignored and paragraph indentation to be
+suppressed. In the new version, only one \texttt{new\_graf} callback handler
+can be active at a time, which allows this handler to take full control of
+paragraph indentation.
+%
+\githubissue{188}
+
+
+
+
+
+\section{Changes to packages in the \pkg{graphics} category}
+
+\subsection{Generate a warning if existing color definition is changed}
+
+If a color is defined twice using \cs{DefineNamedColor}, no
+info text \texttt{Redefining color ...\ in named color model ...}\ was written
+to the log file, because of a typo in the check. This has been corrected.
+%
+\gnatsissue{graphics}{3635}
+
+\subsection{Specifying viewport in the \pkg{graphics} package}
+Specifying a BoundingBox does not really have meaning when including non-EPS graphics in
+\pdfTeX\ and \LuaTeX. For some years the \pkg{graphicx} package
+\texttt{bb} key has been interpreted (with a warning) as a
+\texttt{viewport} key. This feature has been added to the two-argument
+form of \verb|\includegraphics|, which is mostly used in the
+\pkg{\mbox{graphics}} package. \verb|\includegraphics[1,2][3,4]{file}| will
+now be interpreted in \pdfTeX\ and \LuaTeX\ in the same way as
+\pkg{\mbox{graphicx}}'s\tubcommand\\
+\verb|\includegraphics[viewport=1 2 3 4]{file}|.
+
+\subsection{Normalizing \cs{endlinechar}}
+If \cs{endlinechar} is set to $-1$ so that ends of lines are ignored
+in special contexts, then a low level \TeX\ error would be generated
+by code parsing BoundingBox comments. The package now locally sets
+\cs{endlinechar} to its standard value while reading files.
+%
+\githubissue{286}
+
+\subsection{Files with multiple parts}
+Sometimes one has a graphics file, say, \texttt{file.svg}, and converts
+it to another format to include it in \LaTeX{} and ends up with a file
+named \texttt{file.svg.png}. In previous releases, if the user did
+\verb|\includegraphics{file.svg}|, an error would be raised and the
+graphics inclusion would fail due to the unknown \verb|.svg| extension.
+The \pkg{graphics} package now checks if the given extension is known, and if
+it doesn't, it tries appending the known extensions until it finds a
+graphics file with a valid extension, otherwise it falls back to the
+file as requested.
+%
+\githubissue{355}
+
+
+\section{Changes to packages in the \pkg{tools} category}
+
+\subsection{\pkg{array}: Support stretchable glue in \texttt{w}-columns}
+
+If stretchable glue, e.g., \cs{dotfill}, is used in \env{tabular}
+columns made with the \pkg{array} package, it stretches as it would in
+normal paragraph text. The one exception was \texttt{w}-columns (but
+not \texttt{W}-columns) where it got forced to its nominal width (which
+in case of \cs{hfill} or \cs{dotfill} is 0\,pt). This has been
+corrected and now \texttt{w}-columns behave like all other column
+types in this respect.
+%
+\githubissue{270}
+
+\subsection{\pkg{array}: Use math mode for \texttt{w} and
+ \texttt{W}-cells in \env{array}}
+
+The \texttt{w} and \texttt{W}-columns are LR-columns very similar to
+\texttt{l}, \texttt{c} and \texttt{r}. It is therefore natural to
+expect their cell content to be typeset in math mode instead of text
+mode if they are used in an \env{array} environment. This has now
+been adjusted. Note that this is a breaking change in version v2.5!
+If you have used \texttt{w} or \texttt{W}-columns in older documents
+either add \texttt{\detokenize{>{$}...<{$}}} for such columns or
+remove the \texttt{\$} signs in the cells. Alternatively, you can roll
+back to the old version by loading \pkg{array} with
+\begin{verbatim}
+ \usepackage{array}[=v2.4]
+\end{verbatim}
+in such documents.
+%
+\githubissue{297}
+
+\subsection{\pkg{array}: Fix for \cs{firsthline} and \cs{lasthline}}
+
+Replacing \cs{hline} with \cs{firsthline} or \cs{lasthline} could lead
+in some cases to an increase of the tabular width. This has now been
+corrected.
+%
+\githubissue{322}
+
+\subsection{\pkg{varioref}: Support Japanese as a language option}
+
+The package now recognizes \texttt{japanese} as a language option.
+The extra complication is that for grammatical reasons \cs{vref},
+\cs{Vref}, \cs{vrefrange} and \cs{fullref} need a structure different
+from all other languages currently supported. To accommodate this,
+\cs{vrefformat}, \cs{Vrefformat}, \cs{vrefrangeformat}, and \cs{fullrefformat}
+have been added to all languages.
+%
+\githubissue{352}
+
+
+\subsection{\pkg{xr}: Support for spaces in filenames}
+
+The command \cs{externaldocument}, provided by \pkg{xr}, now also
+supports filenames with spaces, just like \cs{include} and
+\cs{includeonly}.
+%
+\githubissue{223}
+
+
+
+\section{Changes to packages in the \pkg{amsmath} category}
+
+\subsection{Placement corrections for two accent commands}
+
+The accent commands \cs{dddot} and \cs{ddddot} (producing triple and
+quadruple dot accents) moved the base character vertically in certain
+situations if it was a single glyph,
+e.g., \verb=$Q \dddot{Q}$=
+were not at the same baseline. This has been corrected.
+%
+\githubissue{126}
+
+\subsection{Fixes to \texttt{aligned} and \texttt{gathered}}
+
+The environments \texttt{aligned} and \texttt{gathered} have a
+trailing optional argument to specify the vertical position of the
+environment with respect to the rest of the line. Allowed values are
+\texttt{t}, \texttt{b} and \texttt{c} but the code only tested for
+\texttt{b} and \texttt{t} and assumed anything else must be
+\texttt{c}. As a result, a formula starting with a bracket group would
+get mangled without warning---the group being dropped and interpreted
+as a request for centering. After more than 25 years this has now been
+corrected. If such a group is found a warning is given and the data is
+processed as part of the formula.
+%
+\githubissue{5}
+
+\tubcommand\newpage
+\subsection{Detect Unicode engines when setting \cs{std@minus} and \cs{std@equal}}
+
+\pkg{amsmath} now detects the Unicode engines and uses their extended
+commands to define \cs{std@minus} and \cs{std@equal}. This avoids a
+package like \pkg{unicode-math} having to patch the code in the begin
+document hook to change the commands.
+
+\subsection{Use lua\TeX{} primitives}
+
+For a number of years \pkg{lualatex-math} patched \cs{frac},
+\cs{genfrac} and the \texttt{subarray} environment to make use of new
+lua\TeX{} primitives. This code has now been integrated into
+\pkg{amsmath}.
+
+\section{Changes to the \pkg{babel} package}
+
+Multilingual typesetting has evolved greatly in recent years, and
+\pkg{babel}, like \LaTeX{} itself, has followed the footsteps of
+Unicode and the W3C consortia to produce proper output in many
+languages.
+
+Furthermore, the traditional model to define and select languages
+(which can be called \enquote{vertical}), based on closed files, while
+still the preferred one in monolingual documents, is being extended
+with a new model (which can be called \enquote{horizontal}) based on
+\emph{services} provided by \pkg{babel}, which allows defining and
+redefining locales with the help of simple \texttt{ini} files based on
+key\slash value pairs. The \pkg{babel} package provides about 250 of these files, which
+have been generated with the help of the Unicode Common Language Data
+Repository.
+
+Thanks to the recent advances in \texttt{lualatex} and
+\pkg{luaotfload}, \pkg{babel} currently provides \emph{services} for bidi
+typesetting, line breaking for Southeast Asian and CJK scripts,
+nonstandard hyphenation (like ff to ff-f), alphabetic and additive
+counters, automatic selection of fonts and languages based on the
+script, etc. This means \pkg{babel} can be used to typeset a wide variety of
+languages, such as Russian, Arabic, Hindi, Thai, Japanese, Bangla, Amharic,
+Greek, and many others.
+
+In addition, since these \texttt{ini} files are easily parsable, they can
+serve as a source for other packages.
+
+For further details take a look at the \pkg{babel} package
+documentation~\cite{32:babel}.
+
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{32:ltnews31} \LaTeX{} Project Team:
+ \emph{\LaTeXe{} news 31}.\\
+ \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
+
+\bibitem{32:site-doc}
+ \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+ \url{https://latex-project.org/help/documentation/}
+
+\bibitem{32:issue-tracker}
+ \emph{\LaTeX{} issue tracker}.
+ \url{https://github.com/latex3/latex2e/issues/}
+
+\bibitem{32:babel}
+ Javier Bezos and Johannes Braams.
+ \emph{Babel---Localization and internationalization}.\\
+ \url{https://www.ctan.org/pkg/babel}
+
+\end{thebibliography}
+
+
+
+
+\end{document}