summaryrefslogtreecommitdiff
path: root/macros/latex/base/ltnews32.tex
blob: 01bc515db50e1dac3c2865d3194d24101caaa06d (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
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
% \iffalse meta-comment
%
% Copyright 2019-2020
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
% This file is part of the LaTeX base system.
% -------------------------------------------
%
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%    https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This file has the LPPL maintenance status "maintained".
%
% The list of all files belonging to the LaTeX base distribution is
% given in the file `manifest.txt'. See also `legal.txt' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
%
% \fi
% Filename: 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\file[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 \file{lthooks.dtx} holds the core management code for hooks
and defines basic hooks for environments (as previously offered by
\pkg{etoolbox}), \file{ltshipout.dtx} provides kernel hooks into the
shipout process (making packages like \pkg{atbegshi},
etc., unnecessary) and the file \file{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[\file{lthooks-doc.pdf}] Core management interface and basic
    hooks for environments provided by the kernel.

  \item[\file{ltshipout-doc.pdf}] Hooks accessible while a page is
    being shipped out.

  \item[\file{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., \file{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 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 \env{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 \env{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}

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

\subsection{Spacing issues when using \cs{linethickness}}

In some circumstances the use of \cs{linethickness} introduced a
spurious space that shifted objects in a \env{picture} environment
to the right. This has been corrected.
%
\githubissue{274}


\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 and 315}


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

\tubcommand{\vspace*{-6pt}\break}

\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 \option{fleqn}}

In \pkg{amsmath} the \cs{mathindent} parameter used with the
\option{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 \env{equation} environment got added when the \option{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 \env{macrocode} environment uses a \env{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. \pkg{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.
\begin{center}
\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}
\end{center}
%
\githubissue{303}


\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.
%
\githubissue{370}


\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, \file{file.svg}, and converts
it to another format to include it in \LaTeX{} and ends up with a file
named \file{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 \option{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 \env{aligned} and \env{gathered}}

The environments \env{aligned} and \env{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}

\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
\tubcommand{\parfillskip=0pt\par\newpage\noindent}%
\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 where applicable}

For a number of years \pkg{lualatex-math} patched \cs{frac},
\cs{genfrac} and the \env{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}.

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