% \iffalse meta-comment
%
% Copyright (C) 2015-2025
% 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
%    http://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: ltnews24.tex
%
% This is issue 24 of LaTeX News.

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

\usepackage{lmodern,url,hologo}

\makeatletter % -- provide command introduced in new release
              %    so this typesets with an old format

% Check we are not in the preamble of a composite document
\def\@tempa{\@latex@error{Can be used only in preamble}\@eha}
\ifx\DeclareTextCommandDefault\@tempa
\else
  \DeclareTextCommandDefault\textcommabelow[1]
    {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\raise-.31ex
     \hbox{\check@mathfonts\fontsize\ssf@size\z@
     \math@fontsfalse\selectfont,}\hidewidth}\egroup}
  \DeclareTextCommandDefault\textcommaabove[1]{%
      \hmode@bgroup
      \ooalign{%
        \hidewidth
        \raise.7ex\hbox{%
          \check@mathfonts\fontsize\ssf@size\z@\math@fontsfalse\selectfont`%
        }%
       \hidewidth\crcr
       \null#1\crcr
      }%
      \egroup
    }
\fi

\makeatother

\publicationmonth{February}
\publicationyear{2016}

\publicationissue{24}

\providecommand\pkg[1]{\texttt{#1}}
\providecommand\cls[1]{\texttt{#1}}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}
\providecommand\file[1]{\texttt{#1}}

\begin{document}

\maketitle

\tableofcontents

\section{\hologo{LuaTeX} support}

This release refines the \hologo{LuaTeX} support introduced in the
2015/10/01 release. A number of patches have been added to improve the
behavior of \pkg{ltluatex} (thanks largely to code review by Philipp Gesang).
The kernel code has been adjusted to
allow for changes in \hologo{LuaTeX} v0.85--v0.88. Most notably, newer
\hologo{LuaTeX} releases allow more than $16$ write streams and these are now
enabled for use by \verb|\newwrite|, but also the experimental
\texttt{newtoken} Lua library has been renamed back to \texttt{token}
which required small adjustments in the  \hologo{LuaTeX} setup.

The biggest change in  \hologo{LuaTeX} v0.85--v0.87 compared to previous
versions is that all the primitives (originally defined in
\hologo{pdfTeX}) dealing with the PDF ``back end''
are no longer defined, being replaced by a much smaller set of new primitives.
This does not directly affect the core \LaTeX{}
files in this release but has required major changes to the
\texttt{.ini} files used by \TeX{} Live and similar distributions to
set up the format files. These changes in the  \hologo{LuaTeX} engine
will affect any packages using these back end commands (packages such
as \pkg{graphics},  \pkg{color},  \pkg{hyperref}, etc.).
Until all contributed packages are updated to the new syntax users may
need to add aliases for the old \hologo{pdfTeX} commands. A new
\pkg{luapdftexalias} package has been contributed to CTAN (not part of the
core \LaTeX\ release) that may be used for this purpose.

See also the sections below for related changes in the
\textsf{tools} and \textsf{graphics} bundles.


\section{Unicode data}

As noted in \LaTeX{} News~22, the 2015/01/01 release of \LaTeX{} introduced
built-in support for extended \TeX{} systems. In particular, the kernel now
loads appropriate data from the Unicode Consortium to set \verb|\lccode|,
\verb|\uccode|, \verb|\catcode| and \verb|\sfcode| values in an automated
fashion for the entire Unicode range.

The initial approach taken by the team was to incorporate the existing model
used by (plain) \hologo{XeTeX} and to pre-process the ``raw'' Unicode data into
a ready-to-use form as \verb|unicode-letters.def|. However, the relationship
between the Unicode Consortium files and \TeX{} data structures is non-trivial and still
being explored. As such, it is preferable to directly parse the original
(\verb|.txt|) files at point of use. The team has therefore ``spun-out'' both
the data and the loading to a new generic package, \pkg{unicode-data}. This
package makes the original Unicode Consortium data files available in the
\verb|texmf| tree (in \verb|tex/generic/unicode-data|) and provides generic
loaders suitable for reading this data into the plain, \LaTeXe{}, and other,
formats.

At present, the following data files are included in this new package:
\begin{itemize}\parskip=0pt
  \item \verb|CaseFolding.txt|
  \item \verb|EastAsianWidth.txt|
  \item \verb|LineBreak.txt|
  \item \verb|MathClass.txt|
  \item \verb|SpecialCasing.txt|
  \item \verb|UnicodeData.txt|
\end{itemize}
These files are used either by \LaTeXe{} or by \textsf{expl3}
(i.e.~they represent the set currently required by the team). The
Unicode Consortium provides various other data files and we would be happy to add
these to the generic package, as it is intended to provide a single place
to collect this material in the \verb|texmf| tree. Such requests can be
mailed to the team as~usual or logged at the package home page:
\url{https://github.com/latex3/unicode-data}.

The new approach extends use of Unicode data in setting \TeX{} information in
two ways. First, the \verb|\sfcode| of all end-of-quotation/closing punctuation
is now set to $0$ (transparent to \TeX{}). Second, \verb|\Umathcode| values are
now set using \verb|MathClass.txt| rather than setting up only letters (which
was done using an arbitrary plane~$0$/plane~$1$ separation). There are also
minor refinements to the existing code setting, particularly splitting the
concepts of case and letter/non-letter category codes.

For \hologo{XeTeX}, users should note that \verb|\xtxHanGlue| and
\verb|\xtxHanSpace| are \emph{no longer defined}, that no assignments are made
to \verb|\XeTeXinterchartoks| and that no \verb|\XeTeXintercharclass| data is
loaded into the format. The values which were previously inherited from
the plain \hologo{XeTeX} setup files are \emph{not} suitable for properly
typesetting East Asian text. There are third-party packages addressing this
area well, notably those in the \textsf{CTeX} bundle. Third-party packages
may need adjustment to load the data themselves; see the \pkg{unicode-data}
package for one possible loader.

\section{More support for east European accents}

As noted in \LaTeX{} News~23, comma accent support was added for \texttt{s} and
\texttt{t} in the 2015/10/01 release. In this release a matching
\verb|\textcommaabove| accent has been added for U+0123 (\verb|\c{g}|,
\textcommaabove{g}) which is the lower case of U+0122 (\verb|\c{G}|,
\textcommabelow{G}).  In the OT1 and T1 encodings the combinations are
declared as composites with the \verb|\c| command, which matches the
Unicode names ``\textsf{latin (capital|small) letter g with cedilla}'' and
also allows \verb|\MakeUppercase{\c{g}}| to produce \verb|\c{G}|, as
required.  In T1 encoding, the composite of \verb|\c| with \texttt{k}, \texttt{l},
\texttt{n} and \texttt{r} are also
declared to use the comma below accent rather than cedilla to match the
conventional use of these letters.

The UTF-8 \pkg{inputenc} option \option{utf8} has been extended to
support all latin combinations that can be reasonably constructed with a
(single) accent command an a base character for the T1 encoding so
\textcommaabove{g}, \k{u} and similar characters may be directly input
using UTF-8 encoding.

\section{Changes in Graphics}

The changes in \hologo{LuaTeX}~v0.87 mean that the \pkg{color} and
\pkg{graphics} packages no longer share the \file{pdftex.def} file
between \hologo{LuaTeX} and \hologo{pdfTeX}. A separate file
\file{luatex.def} (distributed separately) has been produced, and
distributions are encouraged to modify \file{graphics.cfg} and
\file{color.cfg} configuration files to default to the \option{luatex}
option if \hologo{LuaTeX}~v0.87 or later is being used. The team has
contributed suitable \texttt{.cfg} files to CTAN to be used
as models.

Normally it is best to let the local \file{graphics.cfg}
automatically supply the right option depending on the \TeX\ engine
being used; however the \pkg{color} and \pkg{graphics} (and so
\pkg{graphicx}) packages have been extended to have an explicit
\option{luatex} option comparable to the existing \option{pdftex} and
\option{xetex} options.

The \pkg{trig} package has been updated so that pre-computed values
such as $\sin(90)$ now expand to digits (\texttt{1} rather than the
internal token \verb|\@one| in this case). This allows them to be used
directly in PDF literal strings.

\section{Changes in Tools}

\hologo{LuaTeX} from version v0.87 no longer supports the
\verb|\write18| syntax to access system commands. A new package
\pkg{shellesc} has been added to \textsf{tools} that defines a new
command \verb|\ShellEscape| that may be used in all \TeX\ variants to
provide a consistent access to system commands. The package also
defines \verb|\write18| in  \hologo{LuaTeX} so that it continues to access
system commands as before; see the package documentation for details.

\section{Improving support for Unicode engines}

\looseness=-1
Stability concerns are always paramount when considering any change to
the \LaTeXe{} kernel. At the same time, it is important that the format
remains usable and gives reliable results for users. For the Unicode
\TeX{} engines \hologo{XeTeX} and \hologo{LuaTeX} there are important
differences in behavior from classical ($8$-bit) \TeX{} engines which
mean that identical default behaviors are not appropriate. Over the
past 18 months the team has addressed the most pressing of these
considerations (as detailed above and in \LaTeX{} News~22 and 23),
primarily by integrating existing patches into the kernel. There are,
though, important areas which still need consideration, and which
\emph{may} result in refinements to kernel support in this area in
future releases.

The default font setup in \LaTeXe{} at present is to use the \texttt{OT1}
encoding. This assumes that hyphenation patterns have been read using
appropriate codes: the \texttt{T1} encoding is assumed. The commonly-used
hyphenation patterns today, \texttt{hyph-utf8}, are set up in this
way for $8$-bit engines (\hologo{pdfTeX}) but for Unicode engines use
Unicode code points. This means that hyphenation will be incorrect
with Unicode engines unless a Unicode font is loaded. This requires
a concept of a Unicode font encoding, which is currently provided by
the \pkg{fontspec} package in two versions, \texttt{EU1} and
\texttt{EU2}. The team is working to fully understand what is meant
by a ``Unicode font encoding'', as unlike a classical \TeX{} encoding
it is essentially impossible to know what glyphs will be provided
(though each slot is always defined with the same meaning).  There
is also an overlap between this area and ideas of language and writing
system, most obviously in documents featuring mixed scripts (for example
Latin and Cyrillic).

As well as these font considerations, the team is also exploring
to what extent it is possible to allow existing ($8$-bit)
documents to compile directly with Unicode engines without requiring
changes in the sources. Whether this is truly possible remains an open
question.

It is important to stress that changes will only be made in this area where
they do \emph{not} affect documents processed with
\hologo{eTeX}/\hologo{pdfTeX} (i.e.~documents which are written for
``classical'' $8$-bit \TeX{} engines). Changes will also be made only where
they clearly address deficiencies in the current setup for Unicode engines
(i.e.~where current behaviors are wrong).

\end{document}
