% \iffalse meta-comment
%
% Copyright (C) 2019-2026
% 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: ltnews30.tex
%
% This is issue 30 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{October}
\publicationyear{2019}

\publicationissue{30}

\begin{document}

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

\maketitle
\tableofcontents

\setlength\rightskip{0pt plus 3em}

%\newpage

\medskip


%%CCC Does it need an intro?
%% \section{Introduction}

%% This document is under construction \ldots


\section{\LaTeX\texttt{-dev} formats now available}


We know that many of you, especially developers and maintainers of
important packages, have a strong interest in a stable \LaTeX{}
environment.

In order to keep \LaTeX{} very stable for users whilst allowing for
further development to continue, we now have a development branch of
\LaTeX{} on GitHub containing development code for the upcoming
release. When this code is ready for wider consumption and testing, we
generate a pre-release of \LaTeX{} from this development branch and make
it available on \CTAN.

For users of the \TL{} and \MiKTeX{} distributions it is therefore now
straightforward to test their documents and code against the upcoming
\LaTeX{} release with ease, simply by selecting a different program name
(when using the command line) or by selecting a menu entry (after
setting it up; see below).

If you do this then the latest version of the \LaTeX{} development format
will be used to process your document, allowing you to test the
upcoming release with your own documents and packages. For example, if
you run
\begin{verbatim}
  pdflatex-dev myfile
\end{verbatim}
then you will be greeted on the screen with something like \texttt{LaTeX2e
  <2019-10-01> pre-release-2} (identifying the pre-release format)
instead of the normal \texttt{LaTeX2e <2018-12-01>}. In this
pre-release you will find the latest new features that we have
developed.

\subsection{Our hopes}

We don’t expect everybody to start using the development formats to
participate in testing, but we hope that people with a strong interest
in a stable \LaTeX{} environment (especially developers and maintainers
of important packages) will use the new facilities and help us to
ensure that future public releases of \LaTeX{} do not (as has happened in
the past) require some immediate patches because of issues that were
not identified by our internal regression test suite or by other
testing
we do.

Any issue identified when using the development format should
preferably be logged as an issue on GitHub, following the procedure
outlined on our website at \url{https://www.latex-project.org/bugs/}
including the use of the \pkg{latexbug} package as described.

Our bug reporting process normally states that issues involving
third-party software are out of scope as we can’t correct external
packages; see~\cite{30:Mittelbach:TB39-1}. However, in the particular
case of the development format showing an incompatibility with a
third-party package, it is fine to open an issue with us (in addition,
please, to informing the maintainer of that package) so that we know
about the problem and can jointly work on resolving it.

\subsection{Details please \ldots}

More details and some background information about the concepts and
the process are available in an upcoming \textsl{TUGboat} article: \enquote{The
  \LaTeX{} release workflow and the \LaTeX{} dev
  formats}~\cite{devformat}.

\subsection{Setting up menu items}

While the command line call works out of the box if you have a recent
\TL{} or \MiKTeX{} installation, its use within an integrated
editing environment doesn’t at this point in time (maybe the
developers of these editors will include it in the future). However,
it is normally fairly simple to enable it as most (or even all?)\ of
them provide simple ways to call your own setup. How this works in
detail depends very much on the environment you use, so we can’t give
much help here.

But as an example: to provide an additional menu entry for
\texttt{XeLaTeX-dev} on a MacBook all that is necessary is to copy
the file \texttt{XeLaTeX.engine} to \texttt{XeLaTeX-dev.engine} and change the
call from \texttt{xelatex} to \texttt{xelatex-dev} inside.




\section{Improving Unicode handling in \pdfTeX{}}

Perhaps the most important improvement in this release is
even
better support for \acro{utf}-8 characters when using \pdfTeX{}.\footnote{The
  Japanese engines e-p\TeX{} and e-up\TeX{} can't use these features
  yet as they don't support the primitive \cs{ifincsname}. Work is
  under way to resolve this in the engines.}

When using a \enquote{Unicode engine},
any Unicode character (that is not acting as a command,
i.e., is not \enquote{active})
can be used as part of the
\cs{label}/\cs{ref} mechanism or can be displayed in a message or
written to a file. In 8-bit engines, however, this was severely
restricted:
essentially you had to limit yourself to using
\acro{ascii} letters, digits and a few punctuation symbols.  With the
new release, most of these restrictions have been removed and you now
can write labels such as
\begin{verbatim}
  \label{eq:größer}
\end{verbatim}
or use accented characters, etc., as part of a \cs{typeout} message.
The only requirement remaining is that only those \acro{utf}-8 characters
that are also available for typesetting can be used, i.e., only those
characters for
which adequate font support is loaded. Otherwise you will get an
error message stating that
the
particular Unicode character is not set
up for use with \LaTeX{}.

Note, however, that the restrictions on what characters can be
used in the names of commands have not changed.

What is not possible when using
an 8-bit engine such as \pdfTeX{} is to use
characters other than \acro{ascii} letters as part of a command
name. This is due to the fact that all other characters in such
engines are not single character tokens, but in fact consist of a
sequence of bytes and this is not supported in command names.

\section{Improving file name handling in \pdfTeX{}}

A related change is that file names used as part of \cs{input},
\cs{includegraphics}, etc., commands
can now contain any
Unicode characters allowed by the file system in use,
including spaces.
In this case,
 even characters that can't be typeset
(due to lack of font support) can be used.


\section{Improving the \env{filecontents} environment}

The \env{filecontents} environment now supports an optional argument
in which you can specify that it is allowed to \option{overwrite} an
already existing file;
 by default nothing is written if a file with the given name
exists anywhere in the search tree. An alternative name for this
option is \option{force}.
Even then the environment will refuse to write
to \cs{jobname}\texttt{.tex} to avoid clobbering its own input
file. However, if you use a different extension on your input file you
could still overwrite it (there is no way to test for that).

There is also an
option
\option{nosearch},
which specifies that only the current directory is
examined for an existing file, not the whole \TeX{} inputs tree.
This is useful if you want to write a
local copy of a standard system file.
Finally, \option{noheader} prevents writing a preamble to the file
(this
is the same as using the star form of the environment).

Another change is that this
environment is
now allowed anywhere in the document,
which means
it provides everything (and more) of what the now obsolete
\pkg{filecontents} package provided.



\section{Making more user commands robust}

In the early days of \LaTeX{} many commands were fragile, i.e., they
needed \cs{protect} in front of them when used in places such as
section headings and other \enquote{moving arguments}, etc.
In \LaTeXe{} many of these commands were made robust,
but still a fairly large number remained unnecessarily fragile.

In this release of \LaTeX{} we have now
made a lot more commands robust.
There is a very small collection of commands that must stay fragile
because their expansion (maybe partially) at just the right time is critical.
Yet others are unlikely to ever be needed in a \enquote{moving argument}.

Doing this for \cs{begin} and \cs{end} was rather tricky as the
standard mechanism with \cs{DeclareRobustCommand} doesn't work here,
at least not for \cs{end} as that needs to expand during typesetting
without generating a \cs{relax} (from the \cs{protect}). Such a token
would start a new row in table environments, such as \env{tabular},
etc. Furthermore, some packages try to look into the definition of
\cs{end} by expanding it several times. Thus expansion with
\cs{expandafter} had to produce exactly the same result as before. But
in the end we overcame that hurdle too, so now environments are
automatically robust if used in places like headings or
\verb=\typeout= and so forth.

%%CCC do we need to say something about possible problems if other packages
%%   or documents have redefined commands whose robustness has changed?

What hasn't been tackled yet is the redefinitions in \pkg{amsmath}:
this package
redefines a number of basic math constructs
that are now robust, so that
they become fragile again
once the package is loaded.
This area will be addressed in a followup release.
%
\githubissue{123}



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

\subsection{Guard against \cs{unskip} in tabular cells}

If a \env{tabular} or \env{array} cell started with a
command that started with an
\cs{unskip}
then centering the column broke
 because the stretching glue
 on the left got removed. The fix for this was to add
 a minuscule, and hence unnoticeable, additional space after the stretching space:
removing this extra space causes no problems.

This change was also applied in the \pkg{array} package.

\githubissue{102}


\subsection{Fix Unicode table data}

\texttt{U+012F} which is \enquote{i with ogonek} produced a
\enquote{dotless i with ogonek} by mistake. This has been corrected.

\githubissue{122}

The Unicode slots \texttt{27E8} and \texttt{27E9} have been mapped to
\cs{textlangle} and \cs{textrangle} which is the recommended mapping.
In the past they raised a
\\
\LaTeX{} error.
%
\githubissue{110}

When doing cut-and-paste from other documents or websites, f-ligatures and others ligatures
might end up as
single Unicode characters in your file. In the past those got rejected by \LaTeX{}.
 We
 now define those Unicode slots and map them back to the sequence of
 individual characters constituting the ligature.
If supported by the current font
(which is normally the case) they
are then reconstructed as ligatures and thus get typeset
as desired.
Otherwise they will come out as individual characters which
is still better than an error message.

\githubissue{154}


\subsection{Improve \cs{InputIfFileExists}'s handling of file names}

In rare circumstances it was possible that \cs{InputIfFileExists}
would work incorrectly, e.g., a construction such as
\begin{verbatim}
\InputIfFileExists{foo}{\input{bar}}{}
\end{verbatim}
would not load the files \file{foo.tex} and \file{bar.tex} but
would load \file{bar.tex} twice. This has been corrected.

\githubissue{109}


\subsection{Improve interface for cross-references}

%%CCC  should be 'provide' as they still exist. FMi - no they no longer do that
The packages \pkg{fncylab} and \pkg{varioref} provided
a slightly
improved definition of \cs{refstepcounter} which allowed
the internal
\cs{p@..} commands to receive the counter value as an argument,
instead of
acting as a simple prefix. This supports
more complex
formatting of the value in the reference.


These packages also provided
the command \cs{labelformat} to help in the specification of
such formatting in an easy way.  For
example, \verb=\labelformat{equation}{eq.~(#1)}= specifies that
references to equations
automatically come out as
\enquote{eq.~(5)} or similar. As such a \cs{labelformat} declaration
means a \cs{ref} command can no
longer be successfully used at the start of a sentence, the packages also
provided \cs{Ref} for such scenarios.

Both of these commands, \cs{labelformat} and \cs{Ref},
are now removed from the packages and instead made available in
the kernel so there is no
need to load additional packages.




\subsection{Improve wording of a warning message}

The kernel now says \enquote{Trying to load \ldots}
instead of \enquote{Try loading \ldots} in one of its informal
messages to match style of similar messages.
%
\githubissue{107}


\subsection{Avoid bad side-effects of \cs{DeclareErrorFont}}

As a side effect of setting up the error font for \acro{nfss}, this
declaration also changed the current font size back to 10pt.
In most
circumstances that doesn't matter, because that declaration was meant
to be used only during the format generation and not during
a \LaTeX{} run.
However, it has turned out to  be
used by some developers in other places
(incorrectly in fact:
e.g., inside some \texttt{.fd} files) where
resetting the size causes
havoc
seemingly at random.
The command has now changed to not produce such side effects.

\gnatsissue{latex}{4399}



\subsection{\pkg{nfssfont}: Make font table generation the default action}

With the small file \file{nfssfont.tex} it is possible to produce
font tables and other font tests
in the style set up by Don Knuth.
In nearly all cases
a font table is wanted,
so this action has been made the default.
Now one can simply hit enter
instead of having to write \verb=\table\bye=.


\subsection{\pkg{trace}: Add package support in the kernel}

The \pkg{trace} package implements the commands \cs{traceon}
and \cs{traceoff} that work like
\cs{tracingall} but skip
certain code blocks that produce a lot of tracing output.
%%CCC   being of no interest to anyone!! -- FMi I love your encouragement
This is useful when debugging, to suppress uninteresting tracing
from, for example, loading a font.
Code blocks that should not be traced
need to be surrounded by the commands
\cs{conditionally@traceoff} and \cs{conditionally@traceon}.

The \LaTeX{} kernel now provides dummy definitions for these two
commands so that package writers can use them in their packages
regardless of \pkg{trace} being loaded or not.




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

\subsection{\pkg{array}: Warn if primitive column specifiers are overwritten}

With \cs{newcolumntype} it is possible to define your own column
specifiers for a \env{tabular} preamble; it is also possible to
change existing ones. However, doing that for a primitive column
specifier, such as \texttt{c}, is seldom a good idea, since then its
functionality becomes unavailable.
The package was therefore supposed
to warn the user in this case, but due to a missing \cs{expandafter}
in the code it never did---now it does.
%
\githubissue{148}


\subsection{\pkg{multicol}: Introduce \texttt{minrows} counter for balancing}

When there are only a few lines of text on a page at the end of a
\env{multicols} environment,
balancing the columns often looks rather odd: such as
three columns each containing a single line. The balancing behavior
can now be controlled through the counter \texttt{minrows}
(default is~1) which specifies that,
after balancing, there must be at least that many lines in the first column.
Thus, if you set \texttt{minrows}
to \texttt{2} then you
would get a
distribution of \texttt{2+1+0} lines and if set
to three, the result
would be
\texttt{3+0+0} instead of the default \texttt{1+1+1}.

What is most appropriate really depends on the circumstances, but this
now gives you the tools to make local or global adjustments.


\subsection{\pkg{varioref}: Better support for \pkg{cleveref}}

The \pkg{varioref} package has been internally updated to provide
better interfaces for packages such as \pkg{hyperref} and
\pkg{cleveref}.

It also
has a new package option \option{nospace} that stops
\pkg{varioref} from meddling with space in front of
its commands. The
original behavior was always somewhat problematical and it is
suggested that
all new documents
use this option (which
should really have been the default).

Support was also added for the Arabic language through the option
\option{arabic}.




\subsection[\pkg{xr}: Support citations to bibliographies in\\ external documents]
{\pkg{xr}: Support citations to bibliographies in external documents}

The \pkg{xr} package can be used to cross-reference an external \LaTeX{}
document.
This means that even when a work is split over different documents (that
need to be processed separately), \cs{ref} or \cs{pageref} can use labels from
any document, creating links between them. This facility has now been extended
so that \cs{cite} commands and
their cousins can now also reference bibliographies in external
documents; this feature was first provided in the package
\pkg{xcite} by Enrico Gregorio.

Note that for technical reasons \pkg{xr} doesn't work with
\pkg{hyperref}. Use \pkg{xr-hyper} instead if you need the latter
package.


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

\subsection{\pkg{amsmath}: Introduce \cs{overunderset} command}

The \pkg{amsmath} package has always offered
the commands \cs{overset} and
\cs{underset} to produce binary operators with something set above or
below. But sometimes one needs to put something above and something below:
The newly added \cs{overunderset} makes this
easily possible.



\section{Documentation updates}

There are a number of
%small
documentation updates in files
on the documentation page of the project website~\cite{30:site-doc}.

\subsection{Highlighting the standard \texorpdfstring{\acro{nfss}}{NFSS} codes for series}

The \emph{Font Selection Guide}~\cite{fntguide} has been
updated to strongly recommend that the standard codes should be used
when providing font support.  The reason for this recommendation is explained here.


The font selection scheme uses a number of standard codes for
\cs{fontseries} and \cs{fontshape} to ensure that different fonts are
comparable, e.g., that you get a \enquote{light} weight if you specify
\texttt{l} and \enquote{extra bold} when you write \texttt{eb},
etc. Over the years people came up with a number of other creative
short codes like \texttt{k}, \texttt{j}, \texttt{t} and others with
the result that changing a font family required different codes and
thus prevented users from easily mixing and matching different
families.
Some work has been undertaken to get back to a coherent scheme and
all the font families supported through the program \texttt{autoinst}
are now producing the standard codes again.


\subsection{\LaTeX{} \textsf{base} and \textsf{doc} distribution reunited}

For a long time the \LaTeX{} distribution available from \CTAN{} was
split into several parts to allow them to be uploaded or downloaded
separately. As this is these days more confusing than helpful we have
recombined the base part with the documentation part (as both are
anyway always updated together). Thus the package \textsf{latex-doc}
is no longer separately available from \CTAN{} but contained in the
\textsf{latex-base} distribution.


\begin{thebibliography}{9}

%\fontsize{9.3}{11.3}\selectfont

\bibitem{30:Mittelbach:TB39-1} Frank Mittelbach:
  \emph{New rules for reporting bugs in the \LaTeX{} core software}.
  In: TUGboat, 39\#1, 2018.
  \url{https://latex-project.org/publications/}

\bibitem{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{fntguide} \LaTeX{} Project Team:
  \emph{\LaTeXe{} font selection}.\\
  \url{https://latex-project.org/documentation/}

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

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

\end{thebibliography}

\end{document}
