diff options
author | Karl Berry <karl@freefriends.org> | 2020-02-02 22:42:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-02-02 22:42:01 +0000 |
commit | 961f0d1df526285b3a08b8a75af7197b5e6f86b7 (patch) | |
tree | a0a096f519b75b148833f7ebd70ca5af996fa2c6 /Master/texmf-dist/doc/latex/base/ltnews31.tex | |
parent | b97aa19e35137596fcf0193abee3788b21250f32 (diff) |
l2e (2feb20)
git-svn-id: svn://tug.org/texlive/trunk@53640 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/base/ltnews31.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/base/ltnews31.tex | 768 |
1 files changed, 768 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/base/ltnews31.tex b/Master/texmf-dist/doc/latex/base/ltnews31.tex new file mode 100644 index 00000000000..5622ea103f5 --- /dev/null +++ b/Master/texmf-dist/doc/latex/base/ltnews31.tex @@ -0,0 +1,768 @@ +% \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: ltnews31.tex +% +% This is issue 31 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$\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}} + +\vbadness=1400 % accept slightly empty columns + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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 +{\hyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} + +\setlength\rightskip{0pt plus 3em} + + +\medskip + + +%\section{Introduction} +% +%This document is under construction \ldots + + +\section{Experiences with the \LaTeX\ \texttt{-dev} formats} + +As reported in the previous \emph{\LaTeX{} News}, we have made a pre-release +version of the \LaTeX{} kernel available as \LaTeX\texttt{-dev}. Overall, the +approach of having an explicit testing release has been positive: it is now +readily available in \TeX{} systems and is getting real use\\ +beyond the team. + +The current +release has been tested by a number of people, and we have had valuable feedback +on a range of the new ideas. This has allowed us to fix issues in several of the +new features, as described below. + + +We wish to thank all the dedicated users who have been +trying out the development formats, and we encourage others to do so. Pre-testing +in this way does mean that, for the vast majority of users, problems are solved +before they even appear! + + +\section{Concerning this release \ldots (Lua\LaTeX{} engine)} + +The new LuaHB\TeX{} engine is Lua\TeX{} with an embedded HarfBuzz library. +HarfBuzz can be used by setting a suitable renderer in the font +declaration. A basic interface for that is provided by \pkg{fontspec}. +This additional font renderer will greatly improve the shaping of +various scripts when using Lua\LaTeX{}, many of which are currently handled correctly only by +\XeTeX{}, which always uses HarfBuzz. + +To simplify testing of the new engine, binaries have +already been added to MiK\TeX{} and \TeX{}~Live 2019 and both distributions have already now changed +the Lua\LaTeX-dev format to use it. + +Going forward, Lua\LaTeX\ (and Lua\LaTeX-dev) will both use the LuaHB\TeX{} +engine. +The timing of the switch to the LuaHB\TeX{} engine +depends on the distribution you use +(for \TeX{}~Live this will be with \TeX{}~Live 2020). + + + + +\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}. In addition, 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 also loads a large body of Unicode data. +This means that even on a fast computer, there is a relatively large load time when +using \pkg{expl3}. + +For this release, the team have made adjustments in the \LaTeXe{} kernel to +pre-load a significant portion of \pkg{expl3} when the format is built. This is +transparent to the user, other than the significant decrease in document +processing time: there will be no \enquote{pause} whilst loading the Unicode data +files. Loading \pkg{expl3} in documents and packages can continue to 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[Improvements to \LaTeX{} font selection: NFSS] + {Improvements to \LaTeX{}'s font selection\\ mechanism (NFSS)} + + +\subsection{Extending the shape management in NFSS} + +Over time, more and more fonts have become available for use with +\LaTeX{}. Many such font families offer additional shapes such as small +caps italic (\texttt{scit}), small caps slanted (\texttt{scsl}) or +swash (\texttt{sw}). +By using \cs{fontshape} those shapes can +be explicitly selected. For the swash shapes there is also +\cs{swshape} and \cs{textsw} available. + +In the original font selection implementation a request to select a new shape +always overrode the current shape. With the 2020 release of \LaTeX{} +this has changed and \cs{fontshape} can now be used to combine small +capitals with italic, slanted or swash letters, either by explicitly +asking for \texttt{scit}, etc., or by asking for italics when typesetting +already in small caps, and so forth. + +Using \cs{upshape} will still change italics or slanted back to an +upright shape but will not any longer alter the small caps setting. To +change small capitals back to upper/lower case you can now use +\cs{ulcshape} (or \cs{textulc}) which in turn will not change the font +with respect to italics, slanted or swash. +% +There is one exception: for compatibility reasons \cs{upshape} will +change small capitals back to upright (\texttt{n} shape), if the +current shape is \texttt{sc}. This is done so that something like +\cs{scshape}\allowbreak\texttt{...}\allowbreak\cs{upshape} continues +to work as before, but we suggest that you don't use that deprecated method in +new documents. + + +Finally, if you want to +reset the shape back to normal you can use \cs{normalshape} which is a +shorthand for \cs{upshape}\cs{ulcshape}. + +The way that shapes combine with each other is not hardwired; it is +customizable and extensible if there is ever a need for this. The +mappings +are defined through \cs{DeclareFontShapeChangeRule} and the +details for developers are documented in \texttt{source2e.pdf}. + +The ideas for this interface extension have been pioneered in +\pkg{fontspec} by Will Robertson for Unicode engines, and in +\pkg{fontaxes} by Andreas Bühmann and Michael Ummels for \pdfTeX{}; +they are by now used in many font support packages. + + +\subsection{Extending the font series management in NFSS} + +Many of the newer font families also come provided with additional +weights (thin, semi-bold, ultra-bold, etc.)\ or several running widths, +such as condensed or extra-condensed. In some cases the number of +different values for series (weight plus width) is really impressive: +for example, Noto Sans +offers 36 fonts, from ultra-light extra condensed to ultra-bold medium width. + +Already in its original design, NFSS supported 9 weight levels, from +ultra-light (\texttt{ul}) to ultra-bold (\texttt{ub}), and also 9 width +levels, from ultra-condensed (\texttt{uc}) to ultra-expanded +(\texttt{ux}): more than enough, even for a font family like Noto +Sans. Unfortunately, some font support packages nevertheless invented +their own names, so in recent years you have been able to find all kinds of +non-standard series names (\texttt{k}, \texttt{i}, \texttt{j} and +others), making it impossible to combine different fonts successfully +using the standard NFSS mechanisms. + +Over the course of the last year a small number of individuals, +notably, Bob Tennent, Michael Sharpe and Marc Penninga, have worked hard to +bring this unsatisfactory situation back under control; so today we are +happy to report that the internal font support files for more than a +hundred font families are all back to following the standard NFSS conventions. +Combining them is now again rather nice and easy, and from a technical +perspective they can now be easily matched; but, of course, +there is still the task of choosing combinations that visually work +well together. + +In the original font selection implementation, a request to select a new series +always overrode the current one. This was reasonable because there +were nearly no fonts available that offered anything other than a +medium or a bold series. Now that this has changed and families such +as Noto Sans are available, combining weight and width into a single +attribute is no longer appropriate. With the 2020 release of \LaTeX{}, +the management of series therefore changed to allow independent +settings of the weight and the width attributes of the series. + +For most users this change will be largely transparent as \LaTeX{} +offers only \cs{textbf} or \cs{bfseries} to select a bolder face (and +\cs{textmd} and \cs{mdseries} to return to a medium series): there is no +high-level command for selecting a condensed face, etc. However, using +the NFSS low-level interface it is now possible to ask for, say, +\verb=\fontseries{c}\selectfont= to get a condensed +face (suitable for a marginal note) and that would still allow +the use of \cs{textbf} inside the note, which would +select a bold-condensed face (and not a rather odd-looking +bold-extended face in the middle of condensed type). + +The expectation is that this functionality will be used largely by +class and package designers but, given that the low-level NFSS +commands are usable on the document level and that they are not really +difficult to apply, there are probably also a number of users who will +enjoy using these new possibilities that bring \LaTeX{} back into the +premier league for font usage. + +The ways in which the different series values combine with each other is not +hardwired but is again customizable and extensible. The mappings are +defined through \cs{DeclareFontSeriesChangeRule} and the details for +developers are documented in \texttt{source2e.pdf}. + + +\subsection{Font series defaults per document family} + +With additional weights and widths now being available in +many font families, it is more likely that somebody will want to +match, say, a medium weight serif family with a semi-light sans serif +family, or that with one family one wants to use the bold-extended +face when \cs{textbf} is used, while with another it should be bold +(not extended) or semibold, etc. + +In the past this kind of extension was provided by Bob Tennent's +\pkg{mweights} package, which has been used in many font +support packages. +With the 2020 release of \LaTeX{} this feature is now available out +of the box. In addition we also offer a document-level interface to adjust the +behavior of the high-level series commands \cs{textbf}, \cs{textmd}, and of their +declaration forms \cs{bfseries} and \cs{mdseries}, so that they can +have different effects for the serif, sans serif and typewriter +families used in a document. + +For example, specifying +\begin{verbatim} + \DeclareFontSeriesDefault[rm]{bf}{sb} + \DeclareFontSeriesDefault[tt]{md}{lc} +\end{verbatim} +in the document preamble would result in \cs{textbf} producing +semi-bold (\texttt{sb}) when typesetting in a roman typeface. +The second line says that the +typewriter default face (i.e., the medium series \texttt{md}) should be +a light-condensed face. The optional argument here can be either +\texttt{rm}, \texttt{sf} or \texttt{tt} to indicate one of the three +main font families in a document; if omitted you will change the +overall document default instead. In the first mandatory argument you +specify either \texttt{md} or \texttt{bf} and the second mandatory +argument then gives the desired series value in NFSS nomenclature. + + +\subsection{Handling of nested emphasis} + +In previous releases of \LaTeX{}, nested \cs{emph} commands +automatically alternated between italics and upright. This mechanism +has now been generalised so that you can now specify for arbitrary nesting +levels how emphasis should be handled. + +The declaration \cs{DeclareEmphSequence} expects a comma separated +list of font declarations corresponding to increasing levels of +emphasis. For example, +\begin{verbatim} + \DeclareEmphSequence{\itshape,% + \upshape\scshape,\itshape} +\end{verbatim} +uses italics for the first, small capitals for the second, and italic +small capitals for the third level (provided you use a font that +supports these shapes). If there are more nesting levels than +provided, \LaTeX{} uses the declarations stored in \cs{emreset} (by +default \cs{ulcshape}\cs{upshape}) for the next level and then +restarts the list. + +The mechanism tries to be \enquote{smart} by verifying that the given +declarations actually alter the current font. If not, it continues and +tries the next level---the assumption being that there was already a +manual font change in the document to the font that is now supposed to +be used for emphasis. +% +Of course, this only works if the declarations in the list's entries +actually change the font and not, for example, just the color. In such +a scenario one has to add \cs{emforce} to the entry, which directs the +mechanism to use the entry, even if the font attributes appear to be +unchanged. + + +\subsection{Providing font family substitutions} + +Given that \pdfTeX{} can only handle fonts with up to 256 glyphs, a +single font encoding can only support a few languages. The \texttt{T1} +encoding, for example, does support many Latin-based scripts, +but if you want to write in Greek or Cyrillic then you will need to switch +encodings to \texttt{LGR} or \texttt{T2A}. Given that not every font +family offers glyphs in such encodings, you may end up with some +default family (e.g., Computer Modern) that doesn’t blend in well +with the chosen document font. For such cases NFSS now offers +\cs{DeclareFontFamilySubstitution}, for example: +\begin{verbatim} + \DeclareFontFamilySubstitution{LGR} + {Montserrat-LF}{IBMPlexSans-TLF} +\end{verbatim} +tells \LaTeX{} that if you are typesetting in the sans serif font +\texttt{Montserrat-LF} and the Greek encoding \texttt{LGR} is asked +for, then \LaTeX{} should use \texttt{IBMPlexSans-TLF} to fulfill +the encoding request. + +The code is based on ideas from the \pkg{substitutefont} +package by Günter Milde, but the implementation is different. + + +\subsection{Providing all text companion symbols by default} + +The text companion encoding \texttt{TS1} was originally not available +by default, but only when the \pkg{textcomp} package was loaded. The +main reason for this was limited availability of fonts with this encoding other than +Computer Modern; another was the memory restrictions back in the nineties. +These days neither limitation remains, so with the 2020 release all +the symbols provided with the \pkg{textcomp} package are available out +of the box. + +Furthermore, an intelligent substitution mechanism has been +implemented so that glyphs missing in some fonts are automatically +substituted with default glyphs that are sans serif if you typeset in +\cs{textsf} and monospaced if you typeset using \cs{texttt}. In the +past they were always taken from Computer Modern Roman if substitution +was necessary. + + +\typeout{^^J^^J***************************************} +\typeout{** This example needs LaTeX 2020-02-02} +\typeout{** to come out correctly !!} +\typeout{***************************************^^J^^J} + +\textsf{This is most noticeable with \cs{oldstylenums} which are now + taken from \texttt{TS1} so that you no longer get + \textrm{\oldstylenums{1234}} but \oldstylenums{1234} when typesetting + in sans serif fonts}\texttt{ and \oldstylenums{1234} when using + typewriter fonts.} + +If there ever is a need to use the original (inferior) definition, +then that remains available as \cs{legacyoldstylenums}; and to fully +revert to the old behavior there is also +\cs{UseLegacyTextSymbols}. The latter declaration reverts \cs{oldstylenums} +and also changes the footnote symbols, such as \cs{textdagger}, +\cs{textparagraph}, etc., to pick up their glyphs from the math +fonts instead of the current text font (this means they always keep +the same shape and do not nicely blend in with the text font). + +With the text companion symbols as part of the kernel, it is normally +no longer necessary to load the \pkg{textcomp} package, but for +backwards compatibility this package will remain available. There is, +however, one use case where it remains useful: if you load the package +with the option \texttt{error} or \texttt{warn} then substitutions +will change their behavior and result in a \LaTeX{} error or a +\LaTeX{} warning (on the terminal), respectively. Without the package +the substitution information only appears in the \texttt{.log} +file. If you use the option \texttt{quiet}, then even the information in +the transcript is suppressed (which is not really recommended). + + + +\subsection{New \texttt{alias} size function for use in \texttt{.fd} files} + +% These are really called ``size functions'' in NFSS, a bit weird I know + +Most of the newer fonts supported in \TeX{} have been set up with the +\texttt{autoinst} tool by Marc Penninga. In the past, this program +set up each font using the face name chosen by that font's designer, +e.g., \enquote{\texttt{regular}}, \enquote{\texttt{bold}}, etc. +These face names were then mapped by substitution to +the standard NFSS series names, i.e., \enquote{\texttt{m}} +or \enquote{\texttt{b}}. +As a result one got unnecessary substitution warnings such as +\enquote{\texttt{Font T1/abc/bold/n not found, using T1/abc/b/n instead}}. + +%FMi the message above is actually different and longer but ... + +We now provide a new NFSS size function, \texttt{alias}, that can +and will be used by \texttt{autoinst} in the future. It provides the +same functionality as the \texttt{subst} function but is less vocal +about its actions, so that only significant font substitutions show +up as warnings. + + +\subsection{Suppress unnecessary font substitution warnings} + +Many sans serif fonts do not have real italics but usually only +oblique/slanted shapes, so the substitution of slanted for italics is +natural and in fact many designers talk about italic sans serif faces +even if in reality they are oblique. + +With nearly all sans serif font families, the \LaTeX{} support files +therefore silently substitute slanted if you ask for \cs{itshape} or +\cs{textit}. This is also true for Computer Modern in \texttt{T1} +encoding but in \texttt{OT1} you got a warning on the terminal even +though there is nothing you can do about it. This has now been changed +to an information message only, written to the \texttt{.log} file. % +\githubissue{172} + +\vspace{-\smallskipamount} +\pagebreak + +\section{Other changes to the \LaTeX{} kernel} + + +\subsection{UTF-8 characters in package descriptions} + +In 2018 we made UTF-8 the default input encoding for \LaTeX{} but we +overlooked the case of non-ASCII characters in the short +package descriptions used in declarations, e.g., in the optional argument to +\cs{ProvidesPackage}. +They worked (sometimes) before, but the switch to UTF-8 made them always +generate an error. +This has been corrected. +% +\githubissue{52} + + +\subsection[Fix inconsistent hook setting when\texorpdfstring{\\}{} loading packages]% + {Fix inconsistent hook setting when loading packages} + +As part of loading a package, the command +\texttt{\textbackslash}\textit{package}\texttt{.sty-h@@k} gets +defined. However, attempting to load a package a second time resulted +in this hook becoming undefined again. Now the hook remains defined +so that extra loading attempts do not change the state of +\LaTeX{} (relevant only to package developers). +% +\githubissue{198} + + +\subsection{Avoid spurious warning if \texttt{LY1} is made the default encoding} + +Making \texttt{LY1} the default encoding, as is done by some font support +packages, gave a spurious warning even if \cs{rmdefault} was changed first. +This was corrected. +% +\githubissue{199} + +\enlargethispage{-\smallskipamount} +\vspace{-\medskipamount} + +\subsection{Ensure that \cs{\textbackslash} remains robust} + +In the last release we made most document-level commands robust, but +\cs{\textbackslash} became fragile again\\ +whenever \cs{raggedright} or similar typesetting\\ +was used. This has been fixed. +% +\githubissue{203} + + +\subsection{Make math delimiters robust in a different way} + +Making math delimiters robust caused an issue in some situations. This +has been corrected. This also involved a correction to \pkg{amsmath}. +% +\githubissue{251} + + +\subsection{Allow more write streams with \texttt{filecontents} in \LuaTeX} + +Most \TeX{} engines only support a maximum of sixteen concurrently +open write streams, and when those have been used up, then +\texttt{filecontents} or any other code trying to open one +will fail. +In \LuaTeX{} more write streams are available and those can +also now be utilised. +% +\githubissue{238} + +\subsection{Allow spaces in \texttt{filecontents} option list} + +Leaving spaces or newlines in the option list prevented the options +from being correctly recognized. This\\ +has been corrected. +% +\githubissue{256} + + +\subsection{New \texttt{reverselist} Lua callback type} + +A new callback type, \texttt{reverselist}, was added:\\ +\texttt{post\_mlist\_to\_hlist\_filter} and \texttt{post\_linebreak\_filter} +are now of this type. + + +\section{Changes to packages in the \pkg{graphics} category} + +\subsection[Make \pkg{color}/\pkg{graphics} user-level commands robust] + {Make \pkg{color} \& \pkg{graphics} user-level commands robust} + +Some of the user-level commands in \pkg{color}, \pkg{graphics} and +\pkg{graphicx}, +%\pagebreak +such as \cs{textcolor} or \cs{includegraphics}, were +still fragile so didn't work in moving arguments.\\ +All of these are now robust. +% +\githubissue{208} + + +\section{Changes to packages in the \pkg{tools} category} + +\subsection{Fixed column depth in boxed \texttt{multicols}} + +The \texttt{multicols} environment was setting \cs{maxdepth} when +splitting boxes; but, due to the way the internal interfaces of \LaTeX{} are +designed, it should have used \cs{@maxdepth} instead. As a result, +balanced boxed multicols sometimes ended up having different heights +even if they had exactly the same content. +% +\githubissue{190} + + +\subsection{Ensure that \texttt{multicols} does not lose text} + +The \texttt{multicols} environment needs a set of consecutively numbered boxes to +collect column material. The way those got allocated could result in +disaster if other packages allocated most boxes below box~255 (which +\TeX{} always uses for the output page). In the original +implementation that problem was avoided because one could only +allocate box numbers below~255, but nowadays the \LaTeX{} allocation routine +allows allocating box numbers both below and above~255. So the assumption that +when asking for, say, 20~boxes you always get a consecutive sequence of~20 box +register numbers became no longer true: +some of the column material could +end up in box~255, where it would get overwritten. This has now been corrected by +allocating all necessary boxes with numbers above~255 whenever there aren't enough +lower-numbered registers available. +% +\githubissue{237} + +\subsection{Allow spaces in \cs{hhline} arguments} + +The \verb|\hhline| command, which allows the +specification of rule segments in \texttt{tabular} environments, now +allows (but ignores) spaces between its tokens: so +\verb|\hhline{: = : =}| is now allowed and is equivalent to +\verb|\hhline{:=:=}|. This matches similar token arguments in \LaTeX{} +such as the \verb|[h t p]| argument on floats. A similar change has +been made to the extended \verb|\hhline| command in the +\texttt{colortbl} package. +% +\githubissue{242} + + + +\section{\LaTeX{} requirements on engine primitives} + +Since the finalization of \eTeX{} in 1999, a number of additional `utility' +primitives have been added to \pdfTeX{}. Several of these are broadly useful +and have been required by \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 already available in +\LuaTeX{}. + +A number of these additional primitives are needed to support new or improved +functionality in \LaTeX{}. This is seen for example in the 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 and core\\ +packages from the start of 2021: +% +\begingroup\setlength\columnsep{0pt} +\begin{multicols}{2} +\fontsize{9.3}{11.3}\selectfont +\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} +%\end{itemize} +%\end{multicols} +% +% very manual! multicol needs update to detect that it is used +% inside twocolumn! +% +%\begin{multicols}{2} +%\begin{itemize} + \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} +\end{multicols} +\endgroup +For ease of reference, these primitives will be referred to as the +`\pdfTeX{} utilities'. With the exception of \cs{expanded}, these have been +present in \pdfTeX{} since the release of version 1.40.0 in 2007; \cs{expanded} +was added for \TeX{}~Live 2019. Similarly, the full set of these utility primitives +has been available in \XeTeX{} from the 2019 \TeX{}~Live release, and has +always been available in \LuaTeX{} (some by Lua emulation). +% +The Japanese p\TeX{} and +up\TeX{} gained all of the above (except \cs{ifincsname}) for \TeX{}~Live +2019 and will both have that primitive also from the 2020 release onward. + +At the same time, engines which are fully Unicode-capable must provide +the following three primitives: + +\vspace{-\smallskipamount} +\begingroup\setlength\columnsep{0pt} +\begin{multicols}{2} +\fontsize{9.3}{11.3}\selectfont +\begin{itemize} + \item \cs{Uchar} + \quad \textbullet{}\hspace{\labelsep}\cs{Ucharcat} + \item \cs{Umathcode} +\end{itemize} +\end{multicols} +\vspace{-\smallskipamount} +\endgroup +% +Note that it has become standard practice to check for Unicode-aware engines +by using the existence of the \cs{Umathcode} primitive. As such, this is already +a requirement: engines lacking these primitives cannot use Unicode features +of the \LaTeXe{} kernel or \pkg{expl3}. Note also that up\TeX{} can +handling Unicode but it is not classed as a Unicode engine by the +base \LaTeX\ code. + +\enlargethispage*{\baselineskip} +\vspace{3.9pt} % manual adjustment to align the bottom + + +\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/help/documentation/fntguide.pdf} + +\bibitem{31:site-doc} + \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ + \url{https://latex-project.org/help/documentation/} + +\end{thebibliography} + + +\end{document} |