% \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$\textit{#1}$\rangle$}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}
\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}


\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


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iffalse % only for TUB production
\usepackage{graphicx}
\makeatletter
% Xe\TeX{} requires reflecting the first E, hence we complain if the
% graphics package is not present.  (For plain documents, this can be
% loaded via Eplain.)  Also, at Barbara's suggestion, if the current
% font is slanted, we rotate by 180 instead of reflecting so there is at
% least a chance to look ok.  (The magic values here seem more or less
% ok for \texttt{cmsl} and \texttt{cmti}.)
%
%    \begin{macrocode}
\def\tubreflect#1{%
  \@ifundefined{reflectbox}{%
    \TBerror{A graphics package must be loaded for \string\XeTeX}%
  }{%
    \ifdim \fontdimen1\font>0pt
      \raise 1.6ex \hbox{\kern.1em\rotatebox{180}{#1}}\kern-.1em
    \else
      \reflectbox{#1}%
    \fi
  }%
}
\def\tubhideheight#1{\setbox0=\hbox{#1}\ht0=0pt \dp0=0pt \box0 }
\def\XekernbeforeE{-.125em}
\def\XekernafterE{-.1667em}
\DeclareRobustCommand{\Xe}{\leavevmode
  \tubhideheight{\hbox{X%
    \setbox0=\hbox{\TeX}\setbox1=\hbox{E}%
    \ifdim \fontdimen1\font>0pt \def\XekernbeforeE{0em}\fi
    \lower\dp0\hbox{\raise\dp1\hbox{\kern\XekernbeforeE\tubreflect{E}}}%
    \kern\XekernafterE}}}
\def\XeTeX{\Xe\TeX}
\def\XeLaTeX{\Xe{\kern.11em \LaTeX}}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\publicationmonth{October}
\publicationyear{2020}

\publicationissue{32}

\begin{document}

%\addtolength\textheight{4.2pc}   % only for TUB

\maketitle
{\hyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents}

\setlength\rightskip{0pt plus 3em}


\medskip


\section{Introduction}

This document is under construction \ldots



\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
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{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}$, and 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
different 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 trival short hands 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{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 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 the spaces \emph{in} the file
names will remain intact.
%
\githubissue{217}



\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}


\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} environments
to the right. This has been corrected.
%
\githubissue{274}



\subsection{Better support for the legacy series default interface}

In the initial implementation of \LaTeX's font selection scheme (NFSS)
changes to any default where always carried out by redefining some
commands, e.g., \cs{seriesdefault}. In 2019 we introduced various
extensions and with it new methods of customising 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 was improved to cover additional edge cases.
%
\githubissue[s]{306,315}


\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 continued
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
not any longer easy to answer the question \enquote{am I typsetting 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 that
you got an error message that option \texttt{X} is not known to the
package. This obviously incorrect error was due to some 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 paramter allowing for setting
it to a value such as \texttt{1em minus 1em}, i.e., so the 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
addon 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 be 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\ only had some internal commands
(\cs{@ifpackagelater} and \cs{@ifclasslater}) for testting package or
class names but nothing really 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 where 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 a problem with \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 now got
fixed and spaces directly following the command \cs{verb} or \cs{verb*}
are ignored as elsewhere.
%
\githubissue{327}


\subsection{Record the counter name stepped by \cs{refstepcounter}}

\cs{refstepcounter} now stores the name of 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{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
different 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{Native Lua\TeX\ behaviour 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 in there
\cs{-} is not affected by \cs{hyphenchar} in the first place. Therefore this
behaviour 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}



\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 ...} is written
to the log file, because of a typo in the check. This has been corrected.
%
\gnatsissue{graphics}{3635}


\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 were \texttt{w}-columns (but
not \texttt{W}-columns) were it got forced to its nominal width (which
in case if \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{xr}: Support for spaces in filenames}

The commannd \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 is 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}


\section{Changes to the \pkg{babel} package}

Multilingual typesetting has much evolved in the past years, and
\pkg{babel}, like \LaTeX{} itself, has followed the footsteps of
Unicode and the W3C consortiums 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, which
is 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 to define and
redefine locales with the help of simple |ini| files based on
key/value pairs.  Babel provides about of 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}, babel currently provides \emph{services} for bidi
typesetting, line breaking for South East Asian and CJK scripts,
non-standard hyphenation (like ff to ff-f), alphabetic and additive
counters, automatic selection of fonts and languages based on the
script, etc. This means babel can be used to typeset such a variety of
languages as Russian, Arabic, Hindi, Thai, Japanese, Bangla, Amharic,
Greek, and many others.

And since these \texttt{ini} files they are easily parsable, they can
serve as a source for other packages.

For further details take a look at the \pkg{babel}
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}
