diff options
author | Karl Berry <karl@freefriends.org> | 2020-10-02 21:49:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-10-02 21:49:18 +0000 |
commit | 5255c37137345163348d22ab46af2304cf9f55a6 (patch) | |
tree | 88246497477ddcc26834e5708566ad4c1c862a19 /Master/texmf-dist/doc/latex/base/ltnews32.tex | |
parent | 1922ba4684a59cde742dcef9ed152381d2d7b110 (diff) |
latex2e (2oct20)
git-svn-id: svn://tug.org/texlive/trunk@56514 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/base/ltnews32.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/base/ltnews32.tex | 872 |
1 files changed, 872 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/base/ltnews32.tex b/Master/texmf-dist/doc/latex/base/ltnews32.tex new file mode 100644 index 00000000000..f26449af6b8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/base/ltnews32.tex @@ -0,0 +1,872 @@ +% \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$\textrm{\itshape#1}$\rangle$} +\providecommand\option[1]{\texttt{#1}} +\providecommand\env[1]{\texttt{#1}} +\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}} + + +\providecommand\eTeX{\hologo{eTeX}} +\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 + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand\tubcommand[1]{} +\tubcommand{\input{tubltmac}} + +\publicationmonth{October} +\publicationyear{2020} + +\publicationissue{32} + +\begin{document} + +\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB + +\maketitle +{\hyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} + +\setlength\rightskip{0pt plus 3em} + + +\medskip + + +\section{Introduction} + +The 2020-10-01 release of \LaTeX{} shows that work on improving +\LaTeX{} has again intensified. The two most important new features +are the kernel support for \pkg{xparse} and the introduction of the +new hook management system for \LaTeX{}, but as you can see there are +many smaller enhancements and bug fixes added to the kernel and +various packages. + + + +\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 of +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{A hook management system for \LaTeX{}} + +With the fall 2020 release of \LaTeX{} we provide a general hook +management system for the kernel and for packages. This will allow +packages to safely add code to various kernel and package hooks and if +necessary define rules to reorder the code in the hooks to resolve +typical package loading order issues. This hook system is written in +the L3 programming layer and thus forms the first larger application +within the kernel that makes use of the \LaTeX3 functionality now +available (if we discount \pkg{xparse} which has already been available for +a long time as a separate package). + +The file \texttt{lthooks.dtx} holds the core management code for hooks +and defines basic hooks for environments (as previously offered by +\pkg{etoolbox}), \texttt{ltshipout.dtx} provides kernel hooks into the +shipout process (making packages like \pkg{atbegshi}, +etc., unnecessary) and the file \texttt{ltfilehook.dtx} holds +redefinitions for commands like \cs{input} or \cs{usepackage} so that +they offer hooks in a similar fashion to what is provided by the +\pkg{filehook} package. + +At the moment the integration is lightweight, overwriting definitions +made earlier during format generation (though this will change after +more thorough testing). For that reason the documentation isn't in its +final form either and you have to read through three different +documents: +\begin{description} + \item[\texttt{lthooks-doc.pdf}] Core management interface and basic + hooks for environments provided by the kernel. + + \item[\texttt{ltshipout-doc.pdf}] Hooks accessible while a page is + being shipped out. + + \item[\texttt{ltfilehook-doc.pdf}] Hooks used when reading a file. +\end{description} +For those who wish to also study the code, replace \texttt{-doc} with +\texttt{-code}, e.g., \texttt{lthooks-code.pdf}. All documents should +be accessible via \texttt{texdoc}, e.g., +\begin{verbatim} + texdoc lthooks-doc +\end{verbatim} +should open the core documentation for you. + + + +\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}$; 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 +differently 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 trivial shorthands 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{Support \eTeX\ length expressions in \texttt{picture} coordinates} + +Picture mode coordinates specified with \texttt{(\_,\_)} previously +accepted multiples of \cs{unitlength}. They now also allow \eTeX\ length +expressions (as used by the \cs{glueexpr} primitive although all uses +in \texttt{picture} mode are non-stretchy). + +So, valid uses include \verb|\put(2,2)| as previously, + but now also uses such as\tubcommand\\\verb|\put(\textwidth-5cm,0.4\textheight)|. + +Note that you can only use expressions with lengths; \verb|\put(1+2,0)| is not +supported. + + +\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 a 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 spaces \emph{in} the file +names will remain intact. +% +\githubissue[s]{217 and 218} + + +\subsection{Avoid extra line in \cs{centering}, \cs{raggedleft} or \cs{raggedright}} + +If we aren't justifying paragraphs then a very long word (longer than a +line) could result in an unnecessary extra line in order to prevent a +hyphen in the second-last line of the paragraph. This is now avoided +by setting \cs{finalhyphendemerits} to zero in unjustified settings. +% +\githubissue{274} + +\def\negskip{\tubcommand{\vspace*{-.2pt}}} +\negskip +\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} + +\negskip +\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} environment +to the right. This has been corrected. +% +\githubissue{274} + + +\negskip +\subsection{Better support for the legacy series default interface} + +In the initial implementation of \LaTeX's font selection scheme (NFSS) +changes to any default were carried out by redefining some +commands, e.g., \cs{seriesdefault}. In 2019 we introduced various +extensions and with it new methods of customizing 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 to cover additional edge cases. +% +\githubissue[s]{306,315} + + +\negskip +\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 continue +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 +no longer easy to answer the question \enquote{am I typesetting 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 +to get an error message that option \texttt{X} is not known to the +package. This obviously incorrect error was due to a 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 parameter allowing for setting +it to a value such as \texttt{1em minus 1em}, i.e., so that 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 +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 been 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\ previously had only internal commands +(\cs{@ifpackagelater} and \cs{@ifclasslater}) for testing package or +class names, but nothing reasonable 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 were 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 problematic spaces after \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 has been +fixed and spaces directly following the command \cs{verb} or \cs{verb*} +are now ignored as elsewhere. +% +\githubissue{327} + + +\subsection{Provide a way to copy robust commands\ldots} + +With the previous \LaTeXe{} release, several user-level commands were +made robust, so the need for a way to create copies of these commands +(often to redefine them) increased, and the \LaTeXe{} kernel didn't have +a way to do so. Previously this functionality was provided in part by +Heiko Oberdiek's \pkg{letltxmacro} package, which allows a robust +command \verb=\foo= to be copied to \verb=\bar= with +\verb=\LetLtxMacro\bar\foo=. + +From this release onwards, the \LaTeXe{} kernel provides +\cs{NewCommandCopy} (and \verb=\Renew...= and \verb=\Declare...= +variants) which functions almost like +\verb=\LetLtxMacro=. To the end user, both should work the same way, +and one shouldn't need to worry about the definition of the command: +\cs{NewCommandCopy} should do the hard work. + +\cs{NewCommandCopy} knows about the different types of definitions from +the \LaTeXe{} kernel, and also from other packages, such as +\pkg{xparse}'s command declarations like \cs{NewDocumentCommand}, and +\pkg{etoolbox}'s \cs{newrobustcmd}, and it can be extended to cover +further packages. +% +\githubissue{239} + + +\subsection{\ldots\ and a way to \cs{show} them} + +It is sometimes necessary to look up the definition of a command, and often +one not only doesn't know where that command is defined, but doesn't +know if it gets redefined by some package, so often enough looking at +the source doesn't help. The typical way around this problem is to use +\TeX's \cs{show} primitive to look at the definition of a command, which +works fine until the command being \cs{show}n is robust. With +\verb=\show\frac= one sees +\begin{verbatim} +>> \frac=macro: +->>\protect \frac . +\end{verbatim} +which is not very helpful. To show the actual command the user needed to +notice that the real definition of \cs{frac} is in the \verb*=\frac = %* +macro and do \verb=\expandafter\show\csname frac\space\endcsname=. + +But with the machinery for copying robust commands in place it is +already possible to examine a command and detect (as far as a macro +expansion language allows) how it was defined. \cs{ShowCommand} knows +that and with \verb=\ShowCommand\frac= the terminal will show +\begin{verbatim} +>> \frac=robust macro: +->>\protect \frac . + +>> \frac =\long macro: +#1#2->>{\begingroup #1\endgroup \over #2}. +\end{verbatim} +% +\githubissue{373} + +\subsection{Merge \pkg{l3docstrip} into \pkg{docstrip}} + +The file \pkg{l3docstrip.tex} offered a small extension over the +original \pkg{docstrip.tex} file supporting the +\texttt{\%\string<@@=\meta{module}\string>} syntax of \pkg{expl3}. +This has been merged into \pkg{docstrip} so that it can now be +used for both traditional \texttt{.dtx} files and those containing +code written in the L3 programming layer language. +% +\githubissue{337} + + +\subsection{Support vertical typesetting with \pkg{doc}} + +The \texttt{macrocode} environment uses a \texttt{trivlist} internally +and as part of this sets up the \cs{@labels} box to contain some +horizontal skips, but that box is never used. As a result this +generates an issue in some circumstances if the typesetting direction +is vertical. This has now been corrected to support such use cases as +well. +% +\githubissue{344} + + +\subsection{Record the counter name stepped by \cs{refstepcounter}} + +\cs{refstepcounter} now stores the name of the 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{Native Lua\TeX\ behavior 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 there +\cs{-} is not affected by \cs{hyphenchar} in the first place. Therefore this +behavior 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} + +\subsection{Spacing commands moved from \pkg{amsmath} to the kernel} +Originally \LaTeX{} only provided a small set of spacing commands +for use in text and math, some of the commands like \cs{;} were +only supported in math mode. \texttt{amsmath} normalized and +provided all of them in text and math. This code has now been +moved to the kernel so that it is generally available. +% +\githubissue{303} + +\begin{tabular}{lll} +command name(s) & math & text\\\hline +\cs{,} \cs{thinspace} & $x\,x$ & x\,x\\ +\cs{!} \cs{negthinspace} \; & $x\!x$ & x\!x\\ +\cs{:} \cs{>} \cs{medspace} & $x\:x$ & x\:x\\ +\cs{negmedspace} & $x\negmedspace x$ & x\negmedspace x\\ +\cs{;} \cs{thickspace} & $x\;x$ & x\;x\\ +\cs{negthickspace} & $x\negthickspace x$ & x\negthickspace x\\ +\end{tabular} + + + +\subsection{Access raw glyphs in \LuaTeX\ without reloading fonts} + +\LaTeX's definitions for \cs{textquotesingle},\tubcommand\\ \cs{textasciigrave}, and +\cs{textquotedbl} for the TU encoding in \LuaTeX\ need special handling to +stop the shaper from replacing these characters with curly quotes. +This used to be done by reloading the current font without the \texttt{tlig} +feature, but that came with multiple disadvantages: It behaves differently +than the corresponding \XeTeX\ code and it is not very efficient. +This code has now been replaced with an implementation which injects a +protected glyph node which is not affected by font shaping. +% +\githubissue{165} + + +\subsection{Added a fourth empty argument to \cs{contentsline}} + +\LaTeX's \cs{addcontentsline} writes a \cs{contentsline} +command with three arguments to the \texttt{.toc} and similar files. +\pkg{hyperref} redefines \cs{addcontentsline} to write +a fourth argument. The change unifies the number of arguments +by writing an additional empty brace group. + + + +\subsection{Lua\TeX\ callback \texttt{new\_graf} made \texttt{exclusive}} + +Corrected an incorrect callback type which caused return values from the +\texttt{new\_graf} callback to be ignored and paragraph indentation to be +suppressed. In the new version, only one \texttt{new\_graf} callback handler +can be active at a time, which allows this handler to take full control of +paragraph indentation. +% +\githubissue{188} + + + + + +\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 ...}\ was written +to the log file, because of a typo in the check. This has been corrected. +% +\gnatsissue{graphics}{3635} + +\subsection{Specifying viewport in the \pkg{graphics} package} +Specifying a BoundingBox does not really have meaning when including non-EPS graphics in +\pdfTeX\ and \LuaTeX. For some years the \pkg{graphicx} package +\texttt{bb} key has been interpreted (with a warning) as a +\texttt{viewport} key. This feature has been added to the two-argument +form of \verb|\includegraphics|, which is mostly used in the +\pkg{\mbox{graphics}} package. \verb|\includegraphics[1,2][3,4]{file}| will +now be interpreted in \pdfTeX\ and \LuaTeX\ in the same way as +\pkg{\mbox{graphicx}}'s\tubcommand\\ +\verb|\includegraphics[viewport=1 2 3 4]{file}|. + +\subsection{Normalizing \cs{endlinechar}} +If \cs{endlinechar} is set to $-1$ so that ends of lines are ignored +in special contexts, then a low level \TeX\ error would be generated +by code parsing BoundingBox comments. The package now locally sets +\cs{endlinechar} to its standard value while reading files. +% +\githubissue{286} + +\subsection{Files with multiple parts} +Sometimes one has a graphics file, say, \texttt{file.svg}, and converts +it to another format to include it in \LaTeX{} and ends up with a file +named \texttt{file.svg.png}. In previous releases, if the user did +\verb|\includegraphics{file.svg}|, an error would be raised and the +graphics inclusion would fail due to the unknown \verb|.svg| extension. +The \pkg{graphics} package now checks if the given extension is known, and if +it doesn't, it tries appending the known extensions until it finds a +graphics file with a valid extension, otherwise it falls back to the +file as requested. +% +\githubissue{355} + + +\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 was \texttt{w}-columns (but +not \texttt{W}-columns) where it got forced to its nominal width (which +in case of \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{array}: Fix for \cs{firsthline} and \cs{lasthline}} + +Replacing \cs{hline} with \cs{firsthline} or \cs{lasthline} could lead +in some cases to an increase of the tabular width. This has now been +corrected. +% +\githubissue{322} + +\subsection{\pkg{varioref}: Support Japanese as a language option} + +The package now recognizes \texttt{japanese} as a language option. +The extra complication is that for grammatical reasons \cs{vref}, +\cs{Vref}, \cs{vrefrange} and \cs{fullref} need a structure different +from all other languages currently supported. To accommodate this, +\cs{vrefformat}, \cs{Vrefformat}, \cs{vrefrangeformat}, and \cs{fullrefformat} +have been added to all languages. +% +\githubissue{352} + + +\subsection{\pkg{xr}: Support for spaces in filenames} + +The command \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 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} + +\tubcommand\newpage +\subsection{Detect Unicode engines when setting \cs{std@minus} and \cs{std@equal}} + +\pkg{amsmath} now detects the Unicode engines and uses their extended +commands to define \cs{std@minus} and \cs{std@equal}. This avoids a +package like \pkg{unicode-math} having to patch the code in the begin +document hook to change the commands. + +\subsection{Use lua\TeX{} primitives} + +For a number of years \pkg{lualatex-math} patched \cs{frac}, +\cs{genfrac} and the \texttt{subarray} environment to make use of new +lua\TeX{} primitives. This code has now been integrated into +\pkg{amsmath}. + +\section{Changes to the \pkg{babel} package} + +Multilingual typesetting has evolved greatly in recent years, and +\pkg{babel}, like \LaTeX{} itself, has followed the footsteps of +Unicode and the W3C consortia 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, while +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 defining and +redefining locales with the help of simple \texttt{ini} files based on +key\slash value pairs. The \pkg{babel} package provides about 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}, \pkg{babel} currently provides \emph{services} for bidi +typesetting, line breaking for Southeast Asian and CJK scripts, +nonstandard hyphenation (like ff to ff-f), alphabetic and additive +counters, automatic selection of fonts and languages based on the +script, etc. This means \pkg{babel} can be used to typeset a wide variety of +languages, such as Russian, Arabic, Hindi, Thai, Japanese, Bangla, Amharic, +Greek, and many others. + +In addition, since these \texttt{ini} files are easily parsable, they can +serve as a source for other packages. + +For further details take a look at the \pkg{babel} package +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} |