summaryrefslogtreecommitdiff
path: root/macros/latex-dev/base/ltnews31.tex
blob: c365e527c00fe9f58cd6eebe55e0e05226fcf6e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
% \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.

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

\usepackage{lmodern,url,hologo}

\usepackage{csquotes}
\usepackage{multicol}

\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{February}
\publicationyear{2020}

\publicationissue{31}

\begin{document}

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

\maketitle
\tableofcontents

\setlength\rightskip{0pt plus 3em}

%\newpage

\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 users, and we have had useful feedback
on a range of new ideas. This has allowed us to fix issues in several of the
new features described below. We thank the dedicated users who have been
trying out the development formats, and 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 pre-release \ldots}

In \TeX{}Live 2020 the Lua\LaTeX{} format will use the new LuaHB\TeX{}
engine, which 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, which are currently handled correctly only by
\XeTeX{}.  To simplify the testing of the new engine, binaries have
been already added to MiK\TeX{} and \TeX{}Live 2019 and both have changed
the Lua\LaTeX-dev format to use it.



\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 loads a large body of Unicode data.
This means that even on a fast computer, there is a relatively large load time for
using \pkg{expl3}.

For this release, the team have made adjustments in the \LaTeXe{} kernel to
pre-load a significant portion of \pkg{expl3} as the format is built. This is
transparent at the user level, other than the significant decrease in document
processing time: there will be no \enquote{pause} for loading Unicode data
files. Loading of \pkg{expl3} in documents and packages can 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{}'s font selection\\ mechanism (NFSS)]
        {Improvements to \LaTeX{}'s font selection\\ mechanism (NFSS)}


\subsection{Extending the shape management of NFSS}

Over time more and more fonts have become available for use with
\LaTeX{}. Many such font families offer additional shapes, e.g., small
caps italics (\texttt{scit}), small caps slanted (\texttt{scsl} or
swash letters (\texttt{sw}). By using \cs{fontshape} those shapes can
be explicitly selected and for the swash letter 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 italics, 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, 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 but is
customizable and extensible if there is ever a need for it. 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{} and
used in many font support packages.



\subsection{Extending the series management of NFSS}

Many of the the newer font families also come provided with additional
weights (thin, semi-bold, ultra-bold, etc.\@) or several running lengths
such a condensed or extra-condensed. In some cases the number of
different series values 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}) so 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 could find all kinds of
non-standard series names like \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 worked hard to
bring this unsatisfying situation back under control and today we are
happy to report that the internal font support files for more than a
hundred font families are back to following the standard NFSS conventions
so that combining them is now again rather nice and easy (of course,
there is still the task of choosing combinations that visually work
well together, but from a technical perspective they can now easily
matched).


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 series management therefore changed to allow for independently
setting the weight and the width attribute 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) but no
high-level command for selecting a condensed face, etc. However, with
the NFSS low-level interface, it is now possible to ask for, say,
\verb=\fontseries{c}\selectfont= in a marginal note to get a condensed
face and that would still allow  using \cs{textbf} inside. This then 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 is largely used by class and package
designers, but given that the low-level NFSS commands are usable on
the document level and not really difficult to apply, there are
probably also a number of users who will enjoy using the new
possibilities that bring \LaTeX{} back into the front league when it
comes to font usage.

The way 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 available in many font families it
becomes more likely that somebody wants 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-extend 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 made available with the
\pkg{mweights} package by Bob Tennent 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 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 roman typeface and
that typewriter is by default (medium series \texttt{md}) using
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{Emphasis handling generalized}

With previous releases of \LaTeX{} nested \cs{emph} commands
automatically alternated between italics and upright.  This mechanism
has now been generalized and 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 a 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} and verifies 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 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 level, 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 of the Latin based scripts,
but if you want to write in Greek or Russian you 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
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 implemented differently.


\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 in fonts other than
Computer Modern and memory restrictions back in the nineties. These
days neither limitation exists any more 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 missing glyphs are automatically substituted with
defaults that are sans serif if you typeset in \cs{textsf} and
monospaced if you typeset using \cs{texttt} and not always serifed.


\textsf{This is most noticeable with \cs{oldstylenums} which are now
  taken from \texttt{TS1} so that you no longer get
  \textrm{\oldstylenums{123}} but \oldstylenums{123} when typesetting
  in sans serif fonts}\texttt{ and \oldstylenums{123} 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}. That declaration reverts \cs{oldstylenums}
and also changes the footnote symbols, such as \cs{textdagger},
\cs{textparagraph}, etc.\ pick up their glyphs again 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{quit}, then even the information in
the transcript is suppressed (which is not really recommended).

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

\subsection{New \texttt{alias} size function for use in \texttt{.fd} files}

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 did
set up the font faces using the face names chosen by its designer,
e.g., \enquote{\texttt{regular}}, \enquote{\texttt{bold}}, etc., and
then mapped those via substitution to the standard NFSS shape 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}}.

We now provide a new NFSS \texttt{alias} size function 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, such that only relevant font substitutions show up as
warnings.





\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 package descriptions in declarations such as
\cs{ProvidesPackage} which worked (sometimes) before but now died
always. This has been corrected.
\githubissue{52}


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


\subsection{Fix inconsistent hook setting when loading packages}

When a package is loaded
\texttt{\textbackslash}\textit{package}\texttt{.sty-h@@k} is set, but
it was loaded several times it was unset again. 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 done by some font support
packages gave a spurious warning even if \cs{rmdefault} was changed
first. This was corrected.
%
\githubissue{199}



\subsection{Ensure that \cs{\textbackslash} remains robust}

In the last release we made most document-level commands robust, but
\cs{\textbackslash} became fragile again if \cs{raggedright}
typesetting was used.
%
\githubissue{203}


\subsection{Allow more write streams with \texttt{filecontents} in \LuaTeX}

Most \TeX{} engines only support a maximum of sixteen concurrently
open write streams and if those have been used up, then
\texttt{filecontents} or any other code trying to open another one
will fail. In \LuaTeX{} more write streams are available and those can
now be utilized as well.
%
\githubissue{238}




\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 of \pkg{color}, \pkg{graphics} and
\pkg{graphicx} such as \cs{textcolor} or \cs{includegraphics} were
still fragile, so didn't work in moving arguments without extra
protection. All of them have now been made 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 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 height
even if they had exactly the same content.
%
\githubissue{190}


\subsection{Ensure that \texttt{multicols} is not losing text}

The \texttt{multicols} environment needs a set of consecutive 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 identified because one could only
allocate boxes below 255, but nowadays the \LaTeX{} allocation routine
allows allocating boxes below and above 255. So the assumption that
asking for, say 20 boxes you get a consecutive sequence of box
registers was no longer true and so some of the column material could
end in box 255 and be overwritten. This has now been corrected by
allocating all necessary boxes above 255 if there aren't enough
registers available.
%
\githubissue{237}

\subsection{Allow spaces in \cs{hhline} arguments}

The verb \verb|\hhline| command which allows
specification of rule segments in \texttt{tabular} environments now
allows (and ignores) spaces between its tokens so
\verb|\hhline{: = : =}| is now allowed and 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{Primitive requirements}

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 requirements for \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 available in
\LuaTeX{} already.

A number of the additional primitives are needed to support new or improved
functionality in \LaTeX{}. This is seen for example in 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 from the start of 2021:
%
\begingroup\setlength\columnsep{0pt}
\begin{multicols}{2}
\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}
  \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 utility primitives have been
available in \XeTeX{} from the 2019 \TeX{}~Live release, and have
always been available in \LuaTeX{} (some by Lua emulation). p\TeX{}
and up\TeX{} gained all of the above bar \cs{ifincsname} for
\TeX{}~Live 2019, and will have that primitive from the 2020 release.

At the same time, engines which are fully Unicode-capable must all
provide the following primitives
%
\begingroup\setlength\columnsep{0pt}
\begin{multicols}{2}
\begin{itemize}
  \item \cs{Uchar}
  \item \cs{Ucharcat}
  \item \cs{Umathcode}
\end{itemize}
\end{multicols}
\endgroup
%
Note that it has become standard practice to check for Unicode-aware
engines with the existence of the \cs{Umathcode} primitive. As such,
this is already a requirement: engines lacking these primitives cannot
access Unicode features of the \LaTeXe{} kernel or of
\pkg{expl3}. Note that up\TeX{} has facilities for handling Unicode
but is not classed as a Unicode engine by the base LaTeX code.

\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/documentation/}

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

\end{thebibliography}

\end{document}