summaryrefslogtreecommitdiff
path: root/macros/latex/base/ltnews33.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/base/ltnews33.tex')
-rw-r--r--macros/latex/base/ltnews33.tex942
1 files changed, 942 insertions, 0 deletions
diff --git a/macros/latex/base/ltnews33.tex b/macros/latex/base/ltnews33.tex
new file mode 100644
index 0000000000..899650c693
--- /dev/null
+++ b/macros/latex/base/ltnews33.tex
@@ -0,0 +1,942 @@
+% \iffalse meta-comment
+%
+% Copyright 2019-2021
+% 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: ltnews33.tex
+%
+% This is issue 33 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%%CCC Temporary definitions:
+\providecommand\Dash {\unskip ---}
+
+
+
+%% NOTE: Chris' preferred hyphens!
+%%\showhyphens{parameters}
+\hyphenation{because para-me-ters}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+
+\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}
+
+% 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\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
+
+
+\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}%
+}
+\newcommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace % for document layout fixes
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{June}
+\publicationyear{2021} %% --- Draft Version 3p
+
+\publicationissue{33}
+
+\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 focus of the June 2021 release is to provide further important
+building blocks for the future production of
+reliable tagged PDF output
+(see \cite{33:blueprint}); these enhancements
+are discussed in the next two
+sections.
+
+Subsequent sections describe quite a number of recent smaller
+enhancements and fixes. As usual, more detail on individual changes
+can be found in the \texttt{changes.txt} files in the distribution
+and, of course, in the documented sources~\cite{33:source2e}.
+
+
+
+\section{Extending the hook concept to paragraphs}
+
+Largely triggered by the need for better control of paragraph text
+processing, in particular when producing tagged PDF output, we have
+changed \LaTeX{} so that the kernel gains control both at the start
+and at the end of each paragraph. This is done in a manner that is (or
+should be) transparent to both packages and documents.
+
+Besides the addition of internal control points for the exclusive use
+of the \LaTeX{} kernel, we also implemented four public hooks that can
+be used in packages or documents (via the normal hook management
+declarations) to achieve special effects, etc. Until now, such
+enhancements required redefinitions of \cs{everypar} or \cs{par},
+which led to the usual issues since such changes can easily conflict
+with changes made by other packages.
+
+The documentation of these new \enquote{paragraph hooks}, together
+with a few examples, is in \file{ltpara-doc.pdf} and, for those who
+want to study it, the (quite interesting) code can be found in
+\file{ltpara-code.pdf}. Additionally, both of these files are included
+as part of the full kernel documentation in \file{source2e.pdf}.
+
+
+
+\section{Extending the hook concept to commands}
+
+Up to now, hook management covered hooks for only a few core areas,
+such as the hooks for the \cs{shipout} process or those in the
+\env{document} environment, as well as some \enquote {generic} hooks,
+both for file loading (helpful for patching such files) and for
+arbitrary environments (the hooks executed within \cs{begin} and
+\cs{end}). This concept of \enquote{generic hooks} has now been
+extended to provide \hook{/before} and \hook{/after} hooks for any
+(document-level) command\Dash in theory at least.
+
+
+In practice, these new generic \hook{cmd} hooks, especially the
+\hook{cmd/.../after}, hooks may fail with commands that are too
+complex to be automatically patched, breaking if the hook contains any
+code. These restrictions are documented in
+\texttt{ltcmdhooks-doc.pdf}.
+%
+However, given that these hooks are mainly meant for developers who
+wish to provide better interoperability between different packages,
+and between packages and the \LaTeX{} kernel, these restrictions are,
+we hope, of minor importance. Indeed, for commands where this
+mechanism can't be applied, one is in the same situation as before;
+and for all others there will be a noticeable improvement.
+
+These hooks will be especially important for our current project to
+provide accessible and tagged PDF output~\cite{33:blueprint} because
+we will eventually have to patch many third-party packages, and this
+must be done in controlled and standardized ways.
+
+
+
+
+\section{Other hook business}
+
+
+\subsection{Shipping out a page while bypassing hooks}
+
+In the 2020 October release, several hooks were added to control the
+process of constructing and shipping out a page box: these support,
+for example, the addition of background or foreground material
+to some or all pages.
+
+
+We have now added a command, called \cs{RawShipout}, which does not do
+any rebuilding of the page box and so does not run most of these
+hooks. When using this new command, essential internal book-keeping
+is still carried out, such as updating the \texttt{totalpages} counter
+and adding \texttt{shipout/firstpage} or \texttt{shipout/lastpage}
+material when appropriate.
+
+
+\subsection{A new Lua callback in \pkg{ltshipout},
+for custom attributes}
+
+For use just before shipping out a page, there is now a \LuaTeX{}
+callback \texttt{pre\_shipout\_filter} to contain final adjustments to
+the box being shipped out. This is particularly useful for
+Lua\TeX\ packages which flag (using, for example, attributes or
+properties) elements on a page in order to apply effects (such as the
+insertion of \enquote{color commands}) to these elements at shipout.
+
+
+
+\section{Improved handling of file names}
+
+\subsection[File names with spaces, multiple dots or\\
+ \acro{utf-8} characters]
+ {File names with spaces, multiple dots or \acro{utf-8} characters}
+
+In one of the recent \LaTeX{} releases we improved the interface
+for specifying file names so that they can now safely contain spaces
+(as is common these days),
+more than one dot character, and also \acro{utf-8} characters
+outside the \acro{ascii} range.
+In the past this was only possible by applying a special syntax
+in the case of spaces,
+while file names with several dots often failed,
+as did most \acro{utf-8} characters.
+
+
+\subsubsection{Consequences for file names in \cs{include}}
+
+\TeX{} has a built-in rule saying that you can normally leave out the
+extension if it is \texttt{.tex}. Thus \verb=\input{file}= and
+\verb=\input{file.tex}= both load \file{file.tex} (if it exists).
+While this is convenient most of the time, it is a little awkward in
+some scenarios (for example, when both \file{file} and \file{file.tex}
+exist) and also when you manually try to implement the rule.
+
+\LaTeX{} therefore had one special syntax for \cs{include} and
+\cs{includeonly}: they always expected that
+their arguments contain a
+file name\footnote{In the case of \cs{includeonly}, a comma-separated list of such names.}
+with no extension given,
+ so that it had to be \texttt{.tex}. Thus,
+ when you mistakenly wrote
+\verb=\include{mychap.tex}= (for example,
+because you changed from \cs{input}
+to \cs{include}),
+\LaTeX{} went ahead and looked for the
+file \file{mychap.tex.tex} for inclusion and tried to
+use the file \file{mychap.tex.aux} for internal (auxiliary) information. The reason was that
+\cs{include} had to construct both
+of these file names from the given
+argument and it didn't bother to do
+anything special
+with the supplied
+extension \texttt{.tex}.
+
+With the new implementation this has
+changed:
+the extension \texttt{.tex}
+now gets removed/ignored if it was
+supplied.
+Thus \verb=\include{mychap.tex}= now
+no longer looks for \file{mychap.tex.tex}
+but loads
+\file{mychap.tex}
+and uses \file{mychap.aux}.
+%
+\githubissue{486}
+
+
+
+\subsection{Normalization of robust commands in file names}
+
+The handling of file names has been modified so that \verb|\string| is
+applied to normalize robust commands within the file name.
+Previously, for example, \verb|\input{\sqrt{2}}| would cause
+\LaTeX\ to loop indefinitely whereas with
+the new normalization
+it looks for the file named \verb|sqrt {2}.tex|
+(and therefore very likely reports ``file not found'').
+%
+\githubissue{481}
+
+
+
+
+\subsection{Fix for \env{filecontents} with \acro{utf-8}
+ chars in the file name}
+
+Since a few releases back, the \env{filecontents} environment has
+allowed \acro{utf-8} characters in the file name. There was, however,
+a bug that would not allow \emph{over}writing a file with \acro{utf-8}
+characters in its name. This has been fixed and now
+\env{filecontents} allows any characters in the file name.
+%
+\githubissue{415}
+
+
+
+\section{Updates to the font selection scheme}
+
+
+\subsection{A new hook in \cs{selectfont}}
+
+After \cs{selectfont} has changed the font, we now run a hook (\hook{selectfont})
+so that packages can make final \mbox{adjustments}. This functionality was
+originally provided by the \pkg{everysel} package but our
+implementation is slightly different and uses the standard hook
+management.
+%
+\githubissue{444}
+
+
+\subsection{Change of font series/shape delayed until \cs{selectfont}}
+
+With the NFSS extensions introduced in 2020, the font series and shape
+settings can be influenced by changes to the font family. The
+settings of these two are now therefore delayed until \cs{selectfont}
+is executed; this avoids unnecessary or incorrect substitutions that
+may otherwise happen due to the order of declarations.
+%
+\githubissue{444}
+
+
+
+\section{Glyphs, characters \& encodings}
+
+\subsection{Improved copy\,\&\,paste for \pdfTeX{} documents}
+
+When compiling with \pdfTeX{}, additional information
+(from the file \texttt{glyphtounicode.tex}) is now added automatically
+to the PDF file in order to improve copying from, and searching in,
+text.
+
+In particular, this allows the most common ligatures to be copied as
+intended from all generated PDF files without the need to explicitly
+load the package \pkg{cmap}.
+%
+\githubissue{465}
+
+
+
+
+
+\subsection{Support for more Unicode characters}
+
+
+\LaTeX\ is quite capable of typesetting characters such as
+\enquote{\d{m}}, but until now it could not access some Unicode
+characters from the Latin Extended Additional block. This meant that,
+for example, there were no Unicode mappings for some characters that
+are used to write Sanskrit words in Latin transliteration (as seen in
+books about yoga, Buddhist philosophy, etc.).
+%
+These characters have now been added so that they can be entered
+directly instead of using \verb=\d{m}=, etc.
+%
+\githubissue{484}
+
+
+
+
+
+\subsection{More ``dashes'' in encodings \texttt{OT1},
+ \texttt{T1} and \texttt{TU}}
+
+When pasting in text from external sources, one can encounter these
+three Unicode characters
+%
+\texttt{"2011} (non-breaking hyphen),
+\texttt{"2012} (figure dash) and
+\texttt{"2015} (horizontal bar),
+%
+in addition to the more common
+%
+\texttt{"2013} (en-dash) and \texttt{"2014} (em-dash).
+%
+In the past, these first three produced an error message when used
+with \pdfTeX{} (since they are not available in \texttt{OT1} or
+\texttt{T1} encoded fonts). They now typeset an approximation to the
+glyph: e.g., the ``figure dash'' is approximated by an en-dash.
+
+With Unicode engines they either work (when the glyph is contained in
+the selected Unicode font) or they typeset nothing, producing a
+``Missing character'' warning in the log file.
+
+With all engines these characters can also now be accessed using the
+command names \cs{textnonbreakinghyphen}, \cs{textfiguredash} and
+\cs{texthorizontalbar}, respectively.
+%
+\githubissue{404}
+
+
+\subsection{Poor man's \cs{textasteriskcentered}}
+
+The \cs{textasteriskcentered} symbol, used as part of the set of
+footnote symbols in \LaTeX{}, is assumed to be implemented by every
+font with the \texttt{TS1} encoding (when \pdfTeX{} is used) or with
+the \texttt{TU} encoding for the Unicode engines. That assumption is
+unfortunately not correct for all fonts since, for example, the
+\texttt{stix2} fonts don't provide this glyph. A result is that one
+gets missing glyph messages when using \cs{thanks}, etc.
+
+Therefore \cs{textasteriskcentered} now checks whether there is such a
+glyph and, if not, uses a normal \enquote{*}, but slightly enlarged
+and lowered. This may not be perfect in all cases, but it is
+certainly better than no glyph showing up.
+%
+\githubissue{502}
+
+\subsection {The characters from \pkg{textcomp} are in the kernel}
+
+A couple of releases back, the functionality of the \pkg{textcomp}
+package was integrated into the \LaTeX{} kernel. Thus it is no longer
+necessary to load this package in order to access glyphs such as
+\cs{textcopyright}, \cs{texteuro} or \cs{textyen}.
+
+
+At this time the opportunity was also taken to bring some order to the
+chaos surrounding the question: \enquote{which glyphs from the
+ \texttt{TS1} encoding are available in a given font?}. This was
+done using an approach based on font families and collections, with
+the differing glyph coverage of the \enquote*{text symbols} being
+indicated by assigning to a font family or collection a ``sub-encoding
+number'' that indicates which glyphs from the \texttt{TS1} encoding are
+guaranteed to be available when using a font from that family or
+collection. This assignment ensures that \LaTeX{} always errs on the
+side of caution, possibly claiming that a glyph is not available even
+when it in fact is.
+
+\iffalse %%FMi but drop that
+
+The documented code for this can be found now in the file
+\file{lttextcomp.dtx} but we hope to publish a full explanation of
+the approach very soon now.
+
+\fi %% FMi potential drop
+
+
+
+\subsubsection
+ [A note on the history of ``text symbols'']
+ {A note on the history of ``text symbols'' and
+ the \texttt{TS1} encoding}
+
+
+The \enquote{text symbol encoding} (\texttt{TS1}) was originally
+designed at the Cork Conference as a companion to the \texttt{T1}
+encoding. In it various symbols that are not subject to hyphenation
+got assembled and the \pkg{textcomp} package was developed to make
+them accessible. Unfortunately the \TeX{} community was a bit too
+enthusiastic and included several symbols only available in a few
+\TeX{} fonts and some, such as the capital accents, not available at
+all but developed as part of the reference font implementation.
+
+In hindsight that was a very bad idea because it meant that other
+existing fonts (at the time) and later new fonts that got developed
+were unable to provide the full set of glyphs that made up the
+\texttt{TS1} encoding. For existing free PostScript fonts people
+took the extra effort and produced virtual fonts that faked (some) of
+the missing glyphs. But this was and is a time-consuming effort so it
+was done for only a few basic fonts. But even then, only some fonts
+included all glyphs from \texttt{TS1} so the \pkg{textcomp} already
+back then contained a long list, dividing fonts into 5 categories
+according to which glyphs were implemented and which were missing.
+
+
+When we recently integrated the functionality of the \pkg{textcomp}
+into the \LaTeX{} kernel
+many new free fonts had appeared and
+unfortunately the chaos around the question \enquote{which glyphs of
+ the \texttt{TS1} encoding are implemented by which font} had
+increased with it. Not only did one find many new holes, it was next to
+impossible to order the set of fonts into a reasonable set of
+sub-encodings that are contained in each other in a single sequence.
+
+In the end we decided on nine or ten sub-encodings with a reasonable
+number of fonts in each so that all fonts implemented all glyphs of the
+sub-encoding they got mapped to. Thus when typesetting with a font one
+could be sure that a command like \cs{textcopyleft} would either
+typeset the requested character (if the glyph was part of the
+sub-encoding the font belonged to) or it would raise an error, saying
+that the glyph is unavailable in that font. The mapping would ensure
+that \LaTeX{} always errs on the side of caution, because it might
+claim a glyph is unavailable even though in fact it is.\looseness-1
+
+For example, the old \texttt{pcr} (PostScript Courier) font (as well
+as most other older PS fonts) is mapped to sub-encoding 5 and
+therefore claims that \cs{textasciigrave} is unavailable even though
+in fact for Courier this is not true. If one uses such a font and this
+becomes an issue then there are a couple (suboptimal) possibilities.
+For one, one can alter the mapping of Courier and pretend that belongs
+to a fuller sub-encoding, e.g.
+\begin{verbatim}
+ \DeclareEncodingSubset{TS1}{pcr}{2}
+\end{verbatim}
+The downside is, that \LaTeX{} then believes other glyphs that are in fact
+unavailable are also there, so that it is important to check that the
+final document doesn't have some missing glyphs.
+
+An alternative is to pretend that \cs{textasciigrave} can always be
+taken from the \texttt{TS1} encoding (no questions asked):
+\begin{verbatim}
+ \DeclareTextSymbolDefault{\textasciigrave}{TS1}
+\end{verbatim}
+Again there is a danger that this is not true when it is used with a
+different font and would then generate a missing glyph.
+
+Finally, and possibly the best solution, if not impossible for other
+reasons, is to simply use a different font, for example, to use the
+\TeX{} Gyre Cursor font (a reimplementation of Courier with a
+much more complete glyph set).
+
+
+
+
+\section{New or improved commands}
+
+\subsection{Adjusting \env{itemize} labels with \cs{labelitemfont}}
+
+The command \cs{labelitemfont} was introduced already with the
+\LaTeX\ release 2020-02-02, but back then we forgot to describe it, so
+we do this now. Its purpose is to resolve some bad formatting issues
+with the \env{itemize} environment and also to make it easier to
+adjust the layout when necessary. What could happen in the past was
+that the \env{itemize} labels (e.g., the \textbullet{}) would
+sometimes react to surrounding font changes and could then suddenly
+change shape, for example to \textit{\textbullet}.
+
+This new command \cs{labelitemfont}, which defaults to \cs{normalfont},
+can be used to provide additional control in the typesetting of
+each label. Thus by choosing
+different settings other effects can be achieved. Here are two
+examples:
+\begin{verbatim}
+ \renewcommand\labelitemfont
+ {\normalfont\fontfamily{lmss}\selectfont}
+ \renewcommand\labelitemfont
+ {\rmfamily\normalshape}
+\end{verbatim}
+The first definition will take the symbols from the font Latin Modern
+Sans, so that you get
+%
+\def\myfont#1{{\let\labelitemfont\empty\fontfamily{lmss}\selectfont#1}}%
+%
+\myfont\labelitemi, \myfont\labelitemii, \myfont\labelitemiii\ and
+\!\!\myfont\labelitemiv\,; while the second variant freezes the font family
+and shape, but leaves the series as a variable quantity, so that an
+\env{itemize} in a bold context would show bolder symbols. Making
+\cs{labelitemfont} empty would give you back the buggy old behavior.
+%
+\githubissue{497}
+
+
+\subsection{Producing several marks for one footnote}
+
+It is sometimes necessary to reference the same footnote several
+times: i.e., to produce several footnote marks using the same number
+or symbol. This is now easily possible by placing a \cs{label} within
+the referenced \cs{footnote} and referencing this label by using the
+new command \cs{footref}. This means that footnote marks can be
+generated to refer to arbitrary footnotes (including those in
+\texttt{minipage}s).
+
+This \cs{footref} command has previously been available, but only when
+using certain classes or the \pkg{footmisc} package.
+%
+\githubissue{482}
+
+
+\subsection{Allow \cs{nocite} in the preamble}
+
+A natural place for \verb=\nocite{*}= would be the preamble of the
+document, but for historical reasons \LaTeX{} issued an error message
+if it was placed there. This command is now allowed in the preamble.
+%
+\githubissue{424}
+
+
+\subsection{Made \cs{\textbackslash} generally robust}
+
+In 2018 most \LaTeX{} user-level commands were made robust, including
+the \cs{\textbackslash} command. However, \cs{\textbackslash} gets
+redefined in various environments and not all these cases were caught:
+such as, in particular, its use as the row delimiter in \env{tabular}
+structures. This has been corrected so that \cs{\textbackslash}
+should now be robust in all circumstances.
+
+
+This change also fixed one anomaly present in the past:
+in a tabular preamble of the form
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \hspace*{-.15em}\verb={l=\texttt{\string>}\verb={raggedright}p{10cm}r}= % stupid class
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+a \cs{\textbackslash} in the second column would have the definition
+used within \cs{raggedright} and so it would not indicate the
+(premature) end of the \env{tabular}. Thus, for example,%
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \verb=a & b1 \\ b2 & c \\=
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+was interpreted as a single row of the \env{tabular} (as intended),
+whereas
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \verb=a & \\ b2 & c \\=
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+resulted in two rows! This happened because the \cs{\textbackslash}
+directly following the \verb=&= got interpreted while it still had the
+\enquote{end the row} meaning and not yet the \enquote{start a new
+ line within the second column} meaning.
+
+With \cs{\textbackslash} now being robust, the special scanning mode
+initiated by the \verb=&= ends immediately when this command is seen:
+the second column is therefore then started, which results in the
+\cs{\textbackslash} being interpreted as being within that column and
+hence as having its expected, within-column, meaning.
+
+We have restored consistency here: now both of the above lines
+produce a single \env{tabular} row.
+%
+As before, you can
+put \cs{raggedright}\cs{arraybackslash} in the \env{tabular}'s
+preamble for a column to ensure that \cs{\textbackslash} is always
+interpreted as a tabular row separator when used in that column. And
+you can use \cs{tabularnewline} to explicitly ask for a new table row,
+even when \cs{\textbackslash} has a different meaning within the
+current column.
+%
+\githubissue{548}
+
+
+
+
+\subsection{Allow extra space between name and address in \pkg{letter} class}
+
+The \cs{opening} command in the \pkg{letter} class expects the name
+and address to be separated by \verb=\\=, but it didn't allow the use
+of an optional argument to add some extra space after the name. The
+code has now been slightly altered to allow this.
+%
+\githubissue{427}
+
+
+
+\subsection{Additions to \cs{tracingall}}
+
+In July 2020 David Jones suggested an extension to \TeX{} engines,
+that added the possibility to set \cs{tracinglostchars}\texttt{=3} in
+order to generate an error message in case some character is missing
+from a font. In previous years, a warning about a missing character
+was silently printed to the \texttt{.log} file\linebreak
+(if $\cs{tracinglostchars}>0$) and to the terminal\linebreak
+ (if ${}>1$). This extension was added for \TL{} and \MiKTeX{}
+(except in Knuth's \TeX, of course),
+so that with $\cs{tracinglostchars}>2$ you now also get an
+error message for each missing glyph.
+
+Later, in January 2021, Petr Olšák suggested yet another extension:
+a new primitive
+\mbox{parameter}
+%
+\cs{tracingstacklevels} that, when both it and \cs{tracingmacros} are
+positive, will add to the \mbox{tracing} information for each
+macro a visual indication (using dots) of
+its nesting level in the macro expansion stack.
+
+These changes have both now been added to \LaTeX's debugging macros
+\cs{tracingall} and \cs{tracingnone}, so that these two new extensions
+are activated/deactivated as appropriate, so long as the \TeX{} engine
+supports them. An example document demonstrating these parameters is
+in the linked GitHub issue.
+%
+\githubissue{524}
+
+
+
+
+\section{Code improvements}
+
+\subsection{Execute \cs{par} at the end of \cs{marginpar}}
+
+Previously, \LaTeX{} ended a \cs{marginpar} without ever explicitly
+calling \cs{par}. This command is now explicitly added because it is
+essential to the correct working of the paragraph hooks.
+
+Another case where this issue caused problems was the \pkg{lineno}
+package, where the last line was not numbered if the \cs{marginpar}
+ended without an explicit \cs{par}.
+%
+\githubissue{489}
+
+
+
+\subsection{Execute \cs{AtEndDocument} hook in vertical mode}
+
+Until now \verb=\end{document}= executed the code from the
+\cs{AtEndDocument} hook as its first action. This meant that this
+hook was executed in horizontal mode if the user left no empty line
+after the last paragraph. As a result, one could get a spurious space
+added when, for example, that code contained a \cs{write}
+statement. This was fixed and now \cs{enddocument} first issues a
+\cs{par} to ensure that it always goes into vertical mode.
+%
+\githubissue{385}
+
+
+\subsection{Color groups made permanent}
+
+The use of color in certain \LaTeX{} constructs, especially boxes,
+needs an extra layer of grouping to ensure that the color setting does
+not \emph{escape} and continue outside the box when it shouldn't.
+%
+To support this, the \LaTeX{} kernel defines a number of commands,
+e.g., \cs{color@begingroup} to be used in such places.
+
+
+Until now, these commands were initially set as no-ops and only the
+color packages redefined them to become real groups; this methodology
+complicates the coding as one has to account for a group being present
+or not (\mbox{depending} on what is loaded in the document).
+%
+The kernel therefore now permanently adds these \enquote{color groups}.
+%
+\githubissue{488}
+
+
+\subsection{Provide the raw option list to key/value option handlers}
+
+Before any further processing of the option list, the original
+(un-normalized, \enquote{raw} and unchanged) list of package or class
+options is now saved, as \cs{@raw@opt@...}; this list is not used by
+the standard option processing code but it is now available for use by
+extended class/package processing systems. Note that, for
+compatibility reasons, the standard option processing code has not
+been changed.
+
+
+
+One
+aspect of this
+change does affect the standard \mbox{processing}: any tokens to the
+right of an \texttt{=}
+sign are \mbox{removed}
+from consideration
+when constructing
+the \enquote{\mbox{unused} option list}.
+For example, in
+this release \texttt{clip=true} and
+\texttt{clip=false} both contribute \texttt{clip} to the list of
+options that have been used.
+%
+\githubissue{85}
+
+
+\subsection{New for \pkg{latexrelease}\,: \cs{NewModuleRelease}}
+
+To explain the need for this new feature, we shall consider the
+following example: in the 2020-10-01 release, \LaTeX's new hook
+management system was added to the kernel (see \cite{33:ltnews32})
+and, as with all changes to the kernel, it was added to
+\pkg{latexrelease}; this made it possible to roll back to a date where
+this module didn't yet exist, or to roll forward from an older
+\LaTeX{} release to get the hook management system (by loading the
+\pkg{latexrelease} package).
+%
+However, this method of rolling back from a later release to the
+2020-10-01 release didn't quite work because it would try to define
+all the commands from \pkg{lthooks} again; and this would of course
+result in the expected errors from commands defined with
+\cs{newcommand} or (as in \pkg{lthooks}) \cs{cs\_new:Npn}.
+
+To solve such issues, we now provide \cs{NewModuleRelease} so that
+completely new modules can be defined using the facilities of
+\pkg{latexrelease} in such a way that, when rolling back or forward,
+the system will know whether the code of the new module has to be read
+or completely ignored. More details on this can be found in the
+\pkg{latexrelease} documentation (get this with
+\verb|texdoc latexrelease|).
+%
+\githubissue{479}
+
+
+\subsection{Small fix for rolling back prior to 2020-02-02}
+
+Whereas the \pkg{latexrelease} package can usually emulate an older
+\LaTeX{} kernel without much problem, rolling back to before the
+2020-02-02 release didn't work properly: this is because the
+management of the \cs{ExplSyntaxOn/Off} status for packages (after an
+\pkg{expl3}-based package is loaded) cannot be removed by the rollback
+without messing up the catcodes. This has been fixed so that rollback
+is now more careful not to leave \cs{ExplSyntaxOn} after a package
+ends.
+%
+\githubissue{504}
+
+
+
+\section{Changes to packages in the \pkg{graphics} category}
+
+
+\subsection{Removed warning when loading graphics files}
+
+A previous release sometimes mistakenly caused a (false) warning
+message to appear when \mbox{using} a generic graphics rule to find
+and load a graphics file with an unknown \mbox{extension}.
+%%CCC removing hyphenation here makes this one line longer.
+This warning would incorrectly say that the file was not found,
+whereas the file would in fact be correctly loaded. The warning now
+doesn't show up in that case.
+%
+\githubissue{516}
+
+
+\subsection{Fixed loading of \texttt{gzip}ped
+ PostScript files}
+
+A previous release mistakenly changed the file searching mechanism so
+that compressed PostScript graphics files would raise an error when
+being loaded with \cs{includegraphics}. This has been fixed so that
+\texttt{gzip}ped graphics files now load correctly.
+%
+\githubissue{519}
+
+
+
+
+\section{Changes to packages in the \pkg{tools} category}
+
+\subsection{\pkg{layout}: Added language options}
+
+This package now recognizes \texttt{japanese} and \texttt{romanian} as
+language options.
+%
+\githubissue[s]{353 and 529}
+
+
+\subsection{\pkg{array} and \pkg{longtable}: Make \cs{\textbackslash} generally robust}
+
+The fix for this issue was also applied to these packages; see above.
+%
+\githubissue{548}
+
+
+\subsection{\pkg{longtable}: General bug fix update}
+
+This is a minor update to the \pkg{longtable} package that fixes several
+reported bugs: notably the possibility of incorrect page breaks when
+floats appear on the page where a \env{longtable} starts. As this may
+affect page breaking in existing documents, a rollback to
+\pkg{longtable 4.13} (\file{longtable-2020-01-07.sty}) is supported.
+%
+\gnatsissue{tools}{2914 3396 3512}
+\githubissue{133 137 183 464 561}
+
+
+\subsection{\pkg{trace}: Additions to \cs{traceon}}
+
+The \cs{tracingstacklevels} and \cs{tracinglostchars} extensions to
+\cs{tracingall} (see above) were also added to \cs{traceon} in the
+\pkg{trace} package, so its users can also benefit from these new
+debugging possibilities.
+%
+\githubissue{524}
+
+
+\subsection{\pkg{bm}: Better support for commands with optional arguments}
+
+Some uses of optional arguments in \cs{bm} stopped being supported (in
+2004) when \cs{kernel@ifnextchar} was used internally by the format
+instead of \cs{@ifnextchar}. This update handles both versions of this
+command and restores the original \mbox{behavior}.
+
+In addition, package options for guiding the use of \enquote{poor
+ man's bold} in fallback situations were added.
+%
+\githubissue{554}
+
+
+
+\section{Changes to packages in the \pkg{amsmath} category}
+
+The fix for issue 548 was also applied in \pkg{amsmath}; see above.
+%
+\githubissue{548}
+
+
+
+
+\medskip
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{33:blueprint} Frank Mittelbach and Chris Rowley:
+ \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
+ \url{https://latex-project.org/publications/indexbyyear/2020/}
+
+\bibitem{33:source2e}
+ \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+ \url{https://latex-project.org/help/documentation/}
+
+\bibitem{33:ltnews32} \LaTeX{} Project Team:
+ \emph{\LaTeXe{} news 32}.\\
+ \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
+
+\end{thebibliography}
+
+
+
+\end{document}