% \iffalse meta-comment
%
% Copyright 2019
% 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: ltnews31.tex
%
% This is issue 31 of LaTeX News.

\documentclass{ltnews}
\usepackage[T1]{fontenc}

\usepackage{lmodern,url,hologo}

\usepackage{csquotes}

\providecommand\acro[1]{\textsc{#1}}
\providecommand\meta[1]{$\langle$\textit{#1}$\rangle$}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}


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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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{February}
\publicationyear{2020}

\publicationissue{31}

\begin{document}

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

\maketitle
\tableofcontents

\setlength\rightskip{0pt plus 3em}

%\newpage

\medskip


\section{Introduction}

This document is under construction \ldots


\section{Primitive requirements}

Since the finalisation of \eTeX{} in 1999, a number of additional `utility'
primitives have been added to \pdfTeX{}. Several of these are broadly useful
and have been requirements for \pkg{expl3} for some time, most notably
\cs{pdfstrcmp}. Over time, a common set of these `post-\eTeX{}' primitives have
been incorporated into \XeTeX{} and (u)p-\TeX{}; they were available in
\LuaTeX{} already.

A number of the additional primitives are needed to support new or improved
functionality in \LaTeX{}. This is seen for example in improved UTF-8 handling,
which uses \cs{ifincsname}. The following primitive functionality (which in
\LuaTeX{} may be achieved using Lua code) will therefore be \emph{required} by
the \LaTeX{} kernel after [INSERT DATE HERE]:
\begin{itemize}
  \item \cs{expanded}
  \item \cs{ifincsname}
  \item \cs{ifpdfprimitive}
  \item \cs{pdfcreationdate}
  \item \cs{pdfelapsedtime}
  \item \cs{pdffiledump}
  \item \cs{pdffilemoddate}
  \item \cs{pdffilesize}
  \item \cs{pdflastxpos}
  \item \cs{pdflastypos}
  \item \cs{pdfmdfivesum}
  \item \cs{pdfnormaldeviate}
  \item \cs{pdfpageheight}
  \item \cs{pdfpagewidth}
  \item \cs{pdfprimitive}
  \item \cs{pdfrandomseed}
  \item \cs{pdfresettimer}
  \item \cs{pdfsavepos}
  \item \cs{pdfsetrandomseed}
  \item \cs{pdfshellescape}
  \item \cs{pdfstrcmp}
  \item \cs{pdfuniformdeviate}
\end{itemize}
For ease of reference, these primitives will be referred to as the
`\pdfTeX{} utilities'.

Engines which are fully Unicode-capable must all provide the following
primitives
\begin{itemize}
  \item \cs{Uchar}
  \item \cs{Ucharcat}
  \item \cs{Umathcode}
\end{itemize}
In particular, note that \cs{Umathcode} is used as a marker primitive for
this capability.

\section{Experiences with the \LaTeX\texttt{-dev} formats}

\emph{write}

In TeXLive 2020 the Lua\LaTeX{} format will use the new LuaHB\TeX{} engine, which is Lua\TeX{} with an embedded HarfBuzz library.
HarfBuzz can be used by setting a suitable renderer in the font declaration. An interface for that is provided by \pkg{fontspec}.
This additional font renderer will greatly improve the shaping of various scripts, which are currently handled correctly only by \XeTeX{}.
To simplify the testing of the new engine, binaries have been added to MiKTeX and TeXLive 2019 and both have changed the Lua\LaTeX-dev format to use it.

\section{Improved load-times for \pkg{expl3}}

The \LaTeX3 programming layer, \pkg{expl3}, has over the past decade moved from
being largely experimental to broadly stable. It is now used in a significant
number of third-party packages, most notably \pkg{xparse} for defining
interfaces in cases where no \pkg{expl3} code is \enquote{visible}. Most
\LaTeX{} documents compiled using \XeTeX{} or \LuaTeX{} load \pkg{fontspec},
which is written using \pkg{expl3}.

The \pkg{expl3} layer contains a non-trivial number of macros, and when used
with the \XeTeX{} and \LuaTeX{} engines, it loads a large body of Unicode data.
This means that even on a fast computer, there is a relatively large load time for
using \pkg{expl3}.

For this release, the team have made adjustments in the \LaTeXe{} kernel to
pre-load a significant portion of \pkg{expl3} as the format is built. This is
transparent at the user level, other than the significant decrease in document
processing time: there will be no \enquote{pause} for loading Unicode data
files. Loading of \pkg{expl3} in documents and packages can be done as usual;
eventually, it will be possible to omit
\begin{verbatim}
\RequirePackage{expl3}
\end{verbatim}
entirely, but to support older formats, this is still recommended at present.

\section{Other changes to the \LaTeX{} kernel}

\emph{fixed gh198}


\section{Changes to packages in the \pkg{tools} category}

\emph{fixed gh190}



\section{Changes to packages in the \pkg{amsmath} category}




\section{Documentation updates}





\begin{thebibliography}{9}

%\fontsize{9.3}{11.3}\selectfont

\bibitem{31:devformat} Frank Mittelbach:
  \emph{The
  \LaTeX{} release workflow and the \LaTeX{} dev formats}.
  In: TUGboat, 40\#2, 2019.
  \url{https://latex-project.org/publications/}

\bibitem{31:fntguide} \LaTeX{} Project Team:
  \emph{\LaTeXe{} font selection}.\\
  \url{https://latex-project.org/documentation/}

\bibitem{31:site-doc}
  \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
  \url{https://latex-project.org/documentation/}

%\bibitem{31:site-pub}
%  \emph{\LaTeX{} Project publications on the \LaTeX{} Project Website}.\\
%  \url{https://latex-project.org/publications/}

\end{thebibliography}

\end{document}
