% \iffalse meta-comment
%
% Copyright (C) 2018-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: ltnews29.tex
%
% This is issue 29 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\XeTeX{\hologo{XeTeX}}
\providecommand\LuaTeX{\hologo{LuaTeX}}
\providecommand\pdfTeX{\hologo{pdfTeX}}

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

% simple solution right now (just link to the first issue if there are more)
\def\getfirstgithubissue#1 #2\relax{#1}

\newcommand\sxissue[1]{\ifhmode\unskip\fi
     \quad\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\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{December}
\publicationyear{2018}

\publicationissue{29}

\begin{document}

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

\maketitle
\tableofcontents

\setlength\rightskip{0pt plus 3em}

\bigskip

\section{Introduction}

The December 2018 release of \LaTeX{} is a maintenance release in
which we have fixed a few bugs in the software: some are old, some
newer, and they are mostly rather obscure.

\section[Bug reports for core \LaTeXe{} and packages]
        {Bug reports for core \LaTeXe{} and packages maintained by the Project Team}

In Spring 2018 we established a new issue tracking system
(Github issues at \url{https://github.com/latex3/latex2e/issues}) for both
the \LaTeX{} core and the packages maintained by the
\LaTeX{} Project Team, with an updated procedure for how to report a
bug or problem.

Initial experience with this system is good, with people who report
problems following the guidelines and including helpful working
examples to show the problem---thanks for doing this.

The detailed requirements and the workflow for reporting a bug in the
core \LaTeX{} software is documented at
\begin{quote}
\url{https://www.latex-project.org/bugs/}
\end{quote}
with further details and discussion in~\cite{29:Mittelbach:TB39-1}.


\section{Changes to the \LaTeX{} kernel}

\subsection{UTF-8:\ updates to the default input encoding}

In the April 2018 release of \LaTeX{} we changed the default encoding
from 7-bit \acro{ascii} to \acro{utf}-8 when using classic \TeX\ or
\hologo{pdfTeX}; see \textit{\LaTeX{} News~28}~\cite{29:ltnews28} for
details.

Now, after half a year of experience with
this new default,
we have
made a small number of adjustments to further improve the user experience.
These include:
\begin{itemize}
\item
  Some improvements when displaying error messages about \acro{utf}-8
  characters that have not been set up for use with \LaTeX{},
  or are invalid for some other reason;
%
\githubissue[s]{60, 62 and 63}
%
\item
  The addition of a number of previously missing declarations for
  characters that are in fact available with the default fonts, e.g.,
  \cs{j} \enquote{\j} (0237), \cs{SS} \enquote{\SS} (1E9E),
  \verb=\k{}= \enquote{\k{ }} (02DB) and \verb=\.{}= \enquote{\.{ }}
  (02D9);
\item
   Correcting the names for \cs{guillemetleft}
   \enquote{\guillemotleft} and \cs{guillemetright}
   \enquote{\guillemotright} in all encoding files.  These correct
   names are in addition to the old (but wrong) Adobe names: Adobe
   mistakenly called them Guillemot, which is a sea bird.
%
  \githubissue{65}
%
\item
   Added \cs{Hwithstroke} (\enquote{\Hwithstroke}) and \cs{hwithstroke}
   (\enquote{\hwithstroke}) necessary for typesetting Maltese.
%
   \sxissue{q/460110}
\end{itemize}



\subsection{Fixed \cs{verb*} and friends in \texorpdfstring{\XeTeX}{XeTeX} and \LuaTeX{}}


The original \cs{verb*} and \texttt{verbatim*} in \LaTeX{} were coded
under the assumption that the position of the space character (i.e.,
\acro{ascii} 32) in a typewriter font contains a visible space glyph
``\verb*= =''. This is correct for \pdfTeX{} with the most used font
encodings \texttt{OT1} and \texttt{T1}.  However, this unfortunately
does not work for Unicode engines using the \texttt{TU} encoding since
the space character slot (\acro{ascii} 32) then usually contains a real
(normal) space, which has the effect that \cs{verb*} produces the same
results as \cs{verb}.

The \cs{verb*} code now always uses the newly introduced command
\cs{verbvisiblespace} to produce the visible space character and this
command will get appropriate definitions for use with the different
engines.  With \pdfTeX{} it will simply use \cs{asciispace}, which is
a posh name for ``select character 32 in the current font'', but with
Unicode engines the default definition is
\begin{verbatim}
 \DeclareRobustCommand\verbvisiblespace
    {\leavevmode
     {\usefont{OT1}{cmtt}{m}{n}\asciispace}}
\end{verbatim}
which uses the visible space from the font Computer Modern Typewriter,
regardless of the currently chosen typewriter font.  Internally the
code ensures that the character used has exactly the same width as the
other characters in the current (monospaced) font; thus, for example,
code displays line up properly.

It is possible to redefine this command to select your own character,
for example
\begin{verbatim}
 \DeclareRobustCommand\verbvisiblespace
    {\textvisiblespace}
\end{verbatim}
will select the ``official'' visible space character of the
current font. This may look like the natural default, but it wasn't
chosen as our default because many fonts just don't have that Unicode
character, or they have one with a strange shape.
%
\githubissue[s]{69 and 70}


\subsection{Error message corrected}
Trying to redefine an undefined command could in a few cases generate
an error message with a missing space, e.g.,
\verb=\renewcommand\1{...}= gave
\begin{verbatim}
   LaTeX Error: \1undefined.
\end{verbatim}
This is now fixed.
%
\githubissue{41}


\subsection{Fixed fatal link error with \pkg{hyperref}}

If an \cs{href} link text gets broken across pages, \pdfTeX{} and
\LuaTeX{} will generate a fatal error unless both parts of the link
are internally at the same boxing level. In two-column mode that was
not the case if one of the pages had spanning top floats. This has now
been changed so that the error is avoided.
%
\githubissue{94}


\subsection{Avoid page breaks caused by invisible commands}

Commands like \cs{label} or \cs{index} could generate a potential page
break in places where a page break was otherwise prohibited, e.g.,
when used between two consecutive headings. This has now been
corrected. If for some reason you really want a break and you relied
on this faulty behavior, you can always add one using \cs{pagebreak},
with or without an optional argument.
%
\githubissue{81}



\subsection{Prevent spurious spaces when reading table of contents data}

When table of contents data is read in from a \texttt{.toc} file, the
new-line character at the end of each line is converted by \TeX{} to a
space. In normal processing this is harmless (as \TeX{} is doing this
input reading whilst in vertical mode and each line in the file
represents a single line (paragraph) in the table of contents. If,
however, this is done in horizontal mode, which is sometimes the case,
then these spaces will appear in the output. If you then omit some of
the input lines (e.g., because you do not display \acro{toc} data below a
certain level), then these spaces accumulate in the typeset output and
you get surprising, and unwanted, gaps inside the text.

The new code now adds a \texttt{\%} sign at the end of problematic
lines in the \texttt{.toc} file so that \TeX{} will not generate such
spaces that may survive to spoil the printed result. As some third
party packages have augmented or changed the core \LaTeX{}
functionality in that area (for example, by adding additional
arguments to the commands in \acro{toc} files) the code uses a conservative
approach and the \texttt{\%} signs are added only when certain
conditions are met.  Therefore some packages might require updates if
they want to benefit from this correction, especially if they
unconditionally overwrite \LaTeX{}'s \cs{addcontentsline} definition.
%
\githubissue{73}


\subsection{Prevent protrusion in table of contents lines}

In \TeX{}'s internal processing model,
paragraph data is one of the
major data structures. As a result,
many things are internally modeled
as paragraphs even if they are not conceptually
``text paragraphs'' in
the traditional sense.
In a few cases this has some surprising effects
that are not always
for the better. One example is
standard \acro{toc} entries,
where you have
heading data followed by some dot leaders and a page
number at the right, produced, for example, from this:
\begin{quote}
  \contentsline {subsection}{Error message corrected}{2}{section*.7}
\end{quote}
The space reserved for the page number is of a fixed width, so that
the dots always end in the same place. Well, they did end in the same
place until the advent of protrusion support in the \TeX{} engines.
Now, with the \pkg{microtype} package loaded, it is possible that the
page number will protrude slightly into the margin (even though it’s
typeset inside a box) and as a result this page number box gets
shifted. With enough bad luck this can get you another dot in the
line, sticking out like the proverbial sore thumb, as exhibited in the
question on StackExchange that triggered the correction.

\LaTeX{} now takes care that there will be no protrusion happening on
such lines, even if it is generally enabled for the whole document.
%
\sxissue{q/172785}



\subsection{Start L-R mode for \cs{thinspace} and friends}

In \LaTeX{}, commands that are intended only for paragraph (L-R) mode
are generally careful to start paragraph mode if necessary; thus they
can be used at the start of a paragraph without surprising and
unwanted consequences.  This important requirement had been overlooked
for a few horizontal spacing commands, such as \cs{thinspace}
(a.k.a.\ ``\cs{,}''), and for some other support commands such as
\cs{smash} or \cs{phantom}.  Thus they ended up adding vertical space
when used at the beginning of a paragraph or, in the case of
\cs{smash}, creating a paragraph of their own. This has now been
corrected, and a corresponding update has been made to the
\pkg{amsmath} package, in which these commands are also defined.
%
\githubissue[s]{49 and 50}



\subsection{Guarding \cs{pfill} in \pkg{doc}}

For presenting index entries pointing to
code fragments and the like,
the \pkg{doc} package has a \cs{pfill} command that
generates within the index a line of dots leading from
the command name to the page or code line numbers.
If necessary it would automatically split the entry
over two lines. That worked well enough for a quarter century, but we
discovered recently that it is broken inside
the \cls{ltugboat} class,
where it sometimes produces
bad spacing within continuation lines.

The reason turned out to be a redefinition of the \LaTeX{} command
\cs{nobreakspace} (\verb=~=) inside the class \cls{ltugboat}, which
removed any preceding space (and thus unfortunately also removed the
dots on the continuation line).  While one can argue that this is a
questionable redefinition (if only done by a single class and not generally),
it has been in the class so long that changing it would
certainly break older documents.  So instead we now guard against that
removal of space.
%
\githubissue[s]{25 and 75}





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

\subsection{Sometimes the \pkg{trace} package turned off too much}

The \pkg{trace} package is a useful little tool for tracing macro
execution: it hides certain lengthy and typically uninteresting
expansions resulting from font changes and similar activities.
However, it had the problem that it also reset other tracing settings
such as \cs{showoutput} in such situations, so that you couldn't use
\cs{showoutput} in the preamble to get symbolic output of all the
pages in the document.  This has now been corrected.




\subsection{Update to \pkg{xr}}

The \pkg{xr} package has been updated so that the code that reads the
\texttt{.aux} file has been made more robust. It now correctly
ignores conditionals (added by \pkg{hyperref} and other packages)
rather than generating low level parsing errors.
\sxissue{a/452321}


\subsection{Column data for \env{multicols*} sometimes vanished}

In certain situations involving \env{multicols*}, when there are more
explicit \cs{columnbreak} requests than there are columns on the
current page, data could vanish due to the removal of an internal
penalty marking the end of the environment. This has been corrected by
explicitly reinserting that penalty if necessary.
%
\githubissue{53}

\subsection{Extension to \cs{docolaction} in \pkg{multicol}}

The \cs{docolaction} command can be used to carry out actions
depending on the column you are currently in, i.e., first, any inner
one (if more than two) or last. However, if the action generates text
then there is the question: is this text part of the current column or
the one after?  That is, on the next run, do we test before  or after it,
to determine in which column we are?

This is now resolved as follows: if you use \cs{docolaction*} any
generated text by the chosen action is considered to be after the test
point.  But if you use the command without the star then all the material
it generates will be placed before the test point to determine the
current column, i.e., the text will become part of the current column
and may affect the test result on the next run.



\subsection{Prevent color leak in \pkg{array}}

In some cases the color used inside a \env{tabular} cell could ``leak
out'' into the surrounding text. This has been corrected.
%
\githubissue{72}

\subsection{Support fragile commands in \env{array} or \env{tabular} column templates}

The preamble specifiers \texttt{p}, \texttt{m} and \texttt{b} each receives
a user supplied argument: the width of the paragraph column. Normally
that is something harmless, like a length or a simple length
expression. But in more complicated settings involving the \pkg{calc}
package it could break with a low-level error message.  This has now
been corrected.
%
\sxissue{q/459285}



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

The changes in the kernel made for \cs{thinspace}, \cs{smash},
etc.\ (see above) have been reflected in the \pkg{amsmath} package
code, so that loading this package doesn't revert them.
%
\githubissue[s]{49 and 50}





\section{Website updates}

\subsection{Publications area reorganized and extended}

To help readers to find relevant information in more convenient and
easy ways, the area of the website covering publications by the
\LaTeX{} Project Team was reorganized and extended (many more
abstracts added). We now provide the articles, talks and supplementary
data structured both by year and also by major
topics~\cite{29:site-pub}. Feel free to take a look.

\subsection{Japanese translations of the user's guide}

Yukitoshi Fujimura has kindly translated
into Japanese two documents that are
distributed with standard \LaTeX{}.
These are:
\begin{itemize}
\item
    \LaTeXe{} for authors;
\item
    User's Guide for the \pkg{amsmath}~Package~\cite{29:amsldoc}.
\end{itemize}
They can be found on the website documentation page~\cite{29:site-doc}.
You will now also find there a typeset version of the full \LaTeXe{}
source code (with index etc.\@) and a number of other goodies.




\begin{thebibliography}{9}

\bibitem{29: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{29:ltnews28}
  \emph{\LaTeX{} News, Issue 28}.
  In: TUGboat, 39\#1, 2018.\\
  \rlap{\url{https://latex-project.org/news/latex2e-news/}}

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

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

\bibitem{29:amsldoc} American Mathematical Society and The \LaTeX\ Project:
  \emph{User's Guide for the \texttt{amsmath} Package} (Version 2.1).
  April 2018.
  Available from
  \url{https://www.ctan.org}
  and distributed as part of every \LaTeX{} distribution.

\end{thebibliography}

\end{document}
