summaryrefslogtreecommitdiff
path: root/macros/latex-dev/base/ltnews34.tex
blob: 7497b71879ed504f40ea15624786464b872639f7 (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
% \iffalse meta-comment
%
% Copyright 2019-2021
% 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: ltnews34.tex
%
% This is issue 34 of LaTeX News.

\NeedsTeXFormat{LaTeX2e}[2020-02-02]

\documentclass{ltnews}

%%CCC  Temporary definitions:
\providecommand\Dash {\unskip ---}



%% NOTE:  Chris' preferred hyphens!
%%\showhyphens{parameters}
\hyphenation{because parameters parameter}

\usepackage[T1]{fontenc}

\usepackage{lmodern,url,hologo}

\usepackage{csquotes}
\usepackage{multicol}

\providecommand\hook[1]{\texttt{#1}}

\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}
\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}


\providecommand\eTeX{\hologo{eTeX}}
\providecommand\XeTeX{\hologo{XeTeX}}
\providecommand\LuaTeX{\hologo{LuaTeX}}
\providecommand\pdfTeX{\hologo{pdfTeX}}
\providecommand\MiKTeX{\hologo{MiKTeX}}
\providecommand\CTAN{\textsc{ctan}}
\providecommand\TL{\TeX\,Live}
\providecommand\githubissue[2][]{\ifhmode\unskip\fi
     \quad\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(%
       \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
          	    {github issue#1 #2}%
           )}%
     \par\smallskip}

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

\providecommand\sxissue[1]{\ifhmode\unskip\fi
     \quad\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}

\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
     \quad\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(%
       \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
          	    {gnats issue #1/#2}%
           )}%
     \par}

\let\cls\pkg
\providecommand\env[1]{\texttt{#1}}
\providecommand\acro[1]{\textsc{#1}}

\vbadness=1400  % accept slightly empty columns


\makeatletter
% maybe not the greatest design but normally we wouldn't have subsubsections
\renewcommand{\subsubsection}{%
   \@startsection      {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
      {-1em}{\@subheadingfont\colonize}%
}
\providecommand\colonize[1]{#1:}
\makeatother

\let\finalvspace\vspace          % for document layout fixes

% Undo ltnews's \verbatim@font with active < and >
\makeatletter
\def\verbatim@font{%
  \normalsize\ttfamily}
\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}

\publicationmonth{November}
\publicationyear{2021 --- Draft Version (with many unfinished blocks)} 

\publicationissue{34}

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

\emph{write}

\section{???}

\emph{write}




\section{Hook business}

After the introduction of the hook management system in the 2020
release of \LaTeX{}~\cite{34:ltnews32} package developers have started
to make more and more use of the new functionality. This resulted in a
number of queries showing that some of the documentation was not
precise enough and that one or the other clarification was
needed. This has now been addressed in the documentation. The extended
usage also showed a small number of deficiencies that we thought
should be corrected now while the adoption rate is still relatively
small. These are addressed in this release and documented below.


\subsection{Providing \cs{ActivateGenericHook}}

The hook management system offers a number of generic hooks, i.e.,
hooks whose names contain a variable component, for example the name
of an environment. Predeclaring such hooks as not really feasible
which is why these hooks use a different mechanism: they are
implicitly available end spring into life the moment a package or the
user in the preamble adds code to them using \cs{AddToHook}.  The
kernel offers such hooks for environments \texttt{env/...}, commands
\texttt{cmd/...}, and files, package or classes, \texttt{file/...},
\texttt{include/...}, \texttt{package/...}, and \texttt{class/...}.

It is possible to offer generic hooks in packages, e.g., if you have
hooks that depend on the current language and therefore need the
language name as part of the hook name and you don't know all possible
names beforehand.

If you want to offer your generic hooks you do this by using
\cs{UseHook} or \cs{UseOneTimeHook} in your (package) code, but
\emph{without declaring the hook} with \cs{NewHook}. Without any
further work a call to \cs{UseHook} with an undeclared hook name does
nothing. So as an additional setup step, it is necessary to explicitly
activate the generic hook with \cs{ActivateGenericHook}.\footnote{Note
  that in the previous release we offered \cs{ProvideHook} as a means
  to achieve this effect, but the name was badly chosen so we decided
  to deprecate it and now offer \cs{ActivateGenericHook} instead
  because that is what it is meant for.}

Assuming
that you don't know all the different hook names up front it will
remain the task of the users of your package to activate the hook
themselves before adding code to it. For example, Babel offers hooks
such as \texttt{babel/afterextras/\meta{language}} enabling the user
to add language specific declarations there. They can then write
\begin{verbatim}
\ActivateGenericHook
          {babel/afterextras/ngerman}
\AddToHook{babel/afterextras/ngerman}
          {\color{blue}}
\end{verbatim}
after which all German words would be colored blue in the text.

Note that a generic hook produced in this way is always a normal hook.




\subsection{Clear extra hook code for next invocation}

There are a few use cases where it would be helpful if one can cancel
an earlier use of \cs{AddToHookNext}, for example, when a page is
discarded with \cs{DiscardShipoutBox} because only some pages of the
document are printed. For such situations the new command
\cs{ClearHookNext} is provided.
%
\githubissue{565}



\subsection{Clean up after \cs{UseOneTimeHook}}

Some hooks are meant to be used only once in a document, and any
further attempt to add code to them causes the code to be executed
immediately instead of being added to the hook.  The initial implementation of
this concept was very simple and didn't anticipate that packages may try to
execute a one-time hook several times resulting in the hook code
being executed repeatedly.  Thus, the implementation was fine for
simple usages (e.g., the \hook{begindocument} hook), but caused
trouble if the one-time hook was intended, for example, as an
initialization hook that is used once when a command is first
called, but then ignored in further calls.

This deficiency has been addressed, and now a one-time hook will only be executed once
and the hook code is removed after usage to free up the memory.
%
\githubissue{565}



\subsection{Class, package, and include hook improvements}

Classes, packages and include files can only be loaded once in a
\LaTeX{} document. For that reasons hooks that are specific to such
files have been made one-time hooks. Beside being more efficient this
supports the following important use case
\begin{verbatim}
\AddToHook{package/varioref/after}
  { ... apply my customizations if the package
      gets loaded (or was loaded already) ... }
\end{verbatim}
without the need to first test if the package was already loaded
before.
%
\githubissue{623}


\subsection{Standardizing generic hook names}

The initial set of generic hooks provided by the \LaTeXe{} kernel had
two patterns of hook names:  ones like
\verb|env/|\meta{name}\verb|/after|, with the variable (\meta{name})
part in the middle position, and ones like
\verb|file/after/|\meta{name}, with the variable part in the third
position.  The coexistence of these two types caused confusion, because
the user had to remember in which position was the variable part
supposed to go, and made the code more complicated and slower.

The file-related hooks have been renamed so that the variable part of
their is in the middle, as with other hooks.  The changes were:
\begin{center}
  \small\ttfamily
  \begin{tabular}{l@{\;$\rightarrow$\;}l}
    \hline
    \multicolumn{1}{l}{Old name} & \rmfamily New name \\
    \hline
    file/before/\meta{name}    & file/\meta{name}/before \\
    file/after/\meta{name}     & file/\meta{name}/after \\
    package/before/\meta{name} & package/\meta{name}/before \\
    package/after/\meta{name}  & package/\meta{name}/after \\
    class/before/\meta{name}   & class/\meta{name}/before \\
    class/after/\meta{name}    & class/\meta{name}/after \\
    include/before/\meta{name} & include/\meta{name}/before \\
    include/end/\meta{name}    & include/\meta{name}/end \\
    include/after/\meta{name}  & include/\meta{name}/after \\
    \hline
  \end{tabular}
\end{center}

Since this is a breaking change, the old names will still work for a
while, so that users and package authors have enough time to adjust, and
a warning will be issued when the old names are used.  Eventually the
deprecated names will be turned into errors and then removed completely.
%
\githubissue{648}



\subsection{Changed how \cs{RemoveFromHook} treats code that isn't in the hook}

In the first version of \cs{RemoveFromHook}, in case the code label
being removed didn't exist in the hook, a ``removal order'' would be
queued, and the next time something tried to add that label to the hook,
the \cs{AddToHook} would be cancelled by the removal order, and no code
would be added that once.  This was so that in principle package loading
order wouldn't matter.  However this implementation didn't work quite as
intended, because while two \cs{AddToHook} to a given label would be
removed by a single \cs{RemoveFromHook}, one \cs{RemoveFromHook} could
not cancel two \cs{AddToHook} to that label, and this asymmetry caused
confusion and was a recipe for further problems.

The implementation was changed and now \cs{RemoveFromHook} only removes
labels that already exist in a hook, and will display a warning if they
don't.  For usage across packages, for removing code in a hook, the
\texttt{voids} relation should be used instead:  this relation is
non-destructive (meaning it can be later reverted with another one), and
it is truly independent of package loading order, so it should be
preferred.
%
\githubissue{625}




\subsection{???}

%
\githubissue{000}




\section{New or improved commands}


\subsection{Added \cs{PackageNote} and \cs{ClassNote}}

\LaTeX{} offers \cs{PackageError} to signal errors that stop
processing, \cs{PackageWarning} that generates a warning message on the
terminal, but continues with the processing and also \cs{PackageInfo}
to provide some information that is only written to the \texttt{.log}
file. What hasn't existed up to now is a way to provide some
information on the terminal that is identifying itself as coming from
a specific package but which isn't claiming to be a warning. Thus,
packages that wanted to write to the terminal used \cs{PackageWarning}
even though the information wasn't really warning the user.  For this
we now have \cs{PackageNote} and \cs{PackageNoteNoLine}, that identify
themselves as \enquote{informational}, but still go to the terminal and
not only to the transcript.

Similar commands exist for classes and there we have added the missing
\cs{ClassNote} and \cs{ClassNoteNoLine} as well.
%
\githubissue{613}


\subsection{New implementation for \cs{counterwithin}}

New implementation for \cs{counterwithout} and \cs{counterwithin} with
an additional optional arg so it becomes a drop-in replacement for
amsmath \cs{numberwithin}.

\emph{write appropriate description}



\subsection{New default for \cs{tracinglostchars}}

In 2021 the \TeX{} engines got enhanced so that \cs{tracinglostchars}
is now also supporting the value \texttt{3}, turning missing
characters into errors and not just warnings. This change made us
realize that \LaTeX{} should use a better default for this parameter
(so far the warning was only written to the transcript file).
Using the now available \texttt{3} would really be the best, but for
compatibility reasons we only set it to \texttt{2} in the kernel.
However, we recommend adding \cs{tracinglostchars}\texttt{=3} to the
preamble of documents, because missing glyphs in the output are an
error and should therefore be properly looked at.






\subsection{Provide tests for package and class loading}

To test if a package was loaded you can now use \cs{IfPackageLoadedTF}
\Arg{package} \Arg{true} \Arg{false} and based on the result execute
different code. It is also possible to check if the package was loaded
with certain options. This is done with
\cs{IfPackageLoadedWithOptionsTF}. It takes four arguments:
\Arg{package}\Arg{option-list}\Arg{true}\Arg{false}. It uses the
\meta{false} code if at least one option in the \meta{option-list} has
not been used during loading or if the package hasn't been loaded at
all.
%
Both commands can be used anywhere in the document, i.e., they are not
restricted to the preamble.\footnote{This is now also true for the
  corresponding internal commands, e.g., \cs{@ifpackageloaded}, that
  had this restriction in the past.}

For classes similar commands (\texttt{Package} replaced by
\texttt{Class} in the name) are provided.
%
\githubissue{621}









\subsection{New \cs{ShowFloat} command}

The package \pkg{fltrace} offers a (fairly low-level but very
detailed) way to trace \LaTeX's float mechanism. This can help to
understand why a certain float is placed into a certain region or why
it shows up unexpectedly on a later page.  \LaTeX{} stores floats in
registers named \cs{bx@A}, \cs{bx@B}, etc., and these names show up in
the tracing information.
%
To display their contents you can now say
\verb=\ShowFloat{=\textit{identifier}\verb=}= where
\textit{identifier} is the uppercase letter (or letters) after
\texttt{bx@} in the register name shown in the tracing.  If additional
registers have been allocated with \cs{extrafloats}, the
\textit{identifier} can also be a number. The command is generally
available, whether or not you have loaded \pkg{fltrace}, because it is
also useful when interpreting the tracing output of the
\pkg{fewerfloatpages} package.


\subsection{Add \pkg{ltcmd} support for \cs{NewCommandCopy} and \cs{ShowCommand}}

Since the 2020-10-01 release (see~\cite{34:ltnews32}), \LaTeX{} provides
\cs{NewCommandCopy} to copy robust commands, and \cs{ShowCommand} to
show their definition in the terminal.  In the same release, the
\pkg{xparse} package was integrated in the kernel (now called
\pkg{ltcmd}).  However, the extended support for \cs{NewCommandCopy} and
\cs{ShowCommand} was not implemented in \pkg{ltcmd}.  The present
\LaTeX{} release ships with that support implemented, so now commands
defined with \pkg{xparse}/\pkg{ltcmd} can be copied and their definition
can be easily shown in the terminal without \cs{csname} gymnastics.
%
\githubissue{569}





\subsection{???}

%
\githubissue{000}




\section{Code improvements}

\subsection{Detect ``\cs{endfoo}'' when using \cs{NewDocumentEnvironment}}

The \cs{newenvironment} command has always checked that both \cs{foo} and
\cs{endfoo} do not exist before creating a \texttt{foo} environment. In
contrast, \cs{NewDocumentEnvironment} has only to date checked for \cs{foo};
this reflects the fact that historically the code was designed around the
target of an entirely new format. The behavior of \cs{NewDocumentEnvironment}
now aligns with \cs{newenvironment}, except that it gives separate errors
for the existence of \cs{foo} and \cs{endfoo}.

\subsection{Improve ``\cs{begin} ended by'' error message}

In the past it was possible to get an error message stating something
like \verb=\begin{foo} ended by \end{foo}=. This could happen when the
environment name was partly hidden inside a macro, because the test was
comparing the literal strings while the error message expanded the
strings fully. This has now been changed to show a more sensible error
message in this instance.
%
\githubissue{587}



\subsection{Additional Extended Latin characters predefined}
Some additional characters such as \'k (U+1E131) are now pre-defined and
will work without needing \verb|\DeclareUnicodeCharacter| declarations.
%
\githubissue{593}


\subsection{Use OpenType version of Latin Modern Upright Italic}
When Latin Modern is used with the TU encoding under \XeTeX\ or \LuaTeX\
and fontshape \texttt{ui} is requested, \LaTeX\ now uses the OpenType
version instead of substituting the (T1 encoded) Type 1 version.


\subsection{Pick up all arguments to \cs{contentsline}}

The \cs{contentsline} commands in the TOC file are always followed by
four arguments, the last one being empty by default and only used by
\pkg{hyperref}. The \cs{contentsline} command itself only used the
first three arguments and relied on the fourth being empty (and thus
doing no harm). But this assumption is not always correct, e.g., if
you use \pkg{hyperref} and then remove it from the preamble.

So now we pick up all four arguments and save the last one away, so
that it can be used by \pkg{hyperref}.
%
\githubissue{633}


\subsection{Fix dropping math lists in \LuaTeX\ callbacks}

The \LuaTeX\ callbacks \texttt{pre\_mlist\_to\_hlist\_filter}
and \texttt{post\_mlist\_to\_hlist\_filter} no longer create an error if
the callback handler indicates to remove the entire math block.
%
\githubissue{644}




\subsection{???}

%
\githubissue{000}




\section{Bug fixes}

\subsection{Replicate argument processors for all embellishments}

There was a bug in \pkg{ltcmd} (former \pkg{xparse}) that caused
commands to misbehave if they were defined with embellishments and
argument processors.  In that case, only one (possibly void) argument
processor would be added to the full set of embellishment arguments,
resulting in too few processors in some cases, leading to unpredictable
behavior.  This bug has been fixed by applying the same argument
processors to all the embellishments in a set, so a declaration like:
\begin{verbatim}
\NewDocumentCommand\foo{>{\TrimSpaces}e{_^}}
  {(#1)[#2]}
\foo^{ a }_{ b }
\end{verbatim}
will now correctly apply \cs{TrimSpaces} to both arguments.
%
\githubissue{639}



\subsection{Correct case changes for \cs{ij} and \cs{IJ}}


The ligatures \enquote{\ij} and \enquote{\IJ}, as used in Dutch,
are only available in most \TeX{} fonts, if the commands \cs{ij} or
\cs{IJ} are used or when you enter them as UTF-8 characters U+0133 or
U+0132.
%
However, when using \texttt{OT1} or \texttt{T1} encoded fonts in
\pdfTeX, the upper or lower casing with \cs{MakeUppercase} and
\cs{MakeLowercase} would always fail regardless of the input method.
This has now been corrected. At the same time we improved the
hyphenation results for words containing this ligature (when
typesetting is done in \texttt{OT1} encoding).
%
\githubissue{658}



\subsection{Improve handling of legacy \cs{bfdefault} changes}

In the past, changes to the font series defaults were made by directly
altering \cs{bfdefault} or \cs{mddefault}.  Since 2020 there is now
\cs{DeclareFontSeriesDefault} that allows more granular control,
i.e., with that declaration you can alter the default for individual meta
font families, for example, by only altering the bold settings for the
sans serif family without changing it for \cs{rmfamily} or \cs{ttfamily}.
See~\cite{34:ltnews31} for more details.

For backwards compatibility, changing \cs{bfdefault} with
\cs{renewcommand} remained possible. If used, it alters the setting
for all meta families in one go. This cannot be done when the
\cs{renewcommand} happens and was therefore delayed until the next
time \cs{bfseries} or \cs{mdseries} was executed.

However, the problem with that
approach was that any call to \cs{DeclareFontSeriesDefault} that
happened in the mean time was overwritten---the two approaches didn't
work well side by side.  This is a problem because older font packages
use the legacy method while newer ones use
\cs{DeclareFontSeriesDefault}. This has now been corrected by changing
\cs{DeclareFontSeriesDefault} to do any necessary resetting prior to
setting new defaults.
%
\githubissue{663}


\subsection{Use of \# in \cs{textbf} and similar commands}
Previously you could not use the macro parameter character \# in inline functions
in the argument of \cs{texbf} and similar text font commands.
An internal definition is now guarded with \cs{unexpanded}
so that \# does not generate an error.
%
\githubissue{665}


\subsection{???}

%
\githubissue{000}






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


\subsection{Key for alt text}
A new key \texttt{alt} has been added to \verb|\includegraphics| allowing specification
of an alternative text for accessibility.
This is unused by default but may be used by extension packages and possible future use.
%
\githubissue{651}



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

\subsection{\pkg{varioref}: Improve missing label handling}

If an undefined label is referenced, \pkg{varioref} makes a default
definition so that later processing finds the right structure (two
brace groups inside \cs{r@}\meta{label}) However, if \pkg{nameref} or
\pkg{hyperref} is loaded, the data structure changes to five
arguments, resulting in low-evel errors in some cases. The code has
been changed to avoid these errors.
%
\sxissue{603948}


\subsection{\pkg{array}: Cancel  \cs{mathsurround} for \env{tabular}}

A \env{tabular} environment is internally typeset as an \env{array}
environment with special settings and therefore in math mode. This
math group should not get any \cs{mathsuround} added as it isn't a
real formula because otherwise the spacing around the \env{tabular}
changes. This bug has been there forever (which means not many people
use \cs{mathsurround} or noticed the difference). Anyhow, this now got
fixed.
%
\githubissue{614}

\subsection{\pkg{longtable}: Improve behavior after a section heading}
The \env{longtable} environment now sets the \cs{@nobreakfalse} flag so that
spacing and indentation changes after a section heading are not triggered by
a paragraph which follows a table which starts a section. Similarly a test for
\cs{if@noskipsec} added so that a table follows a run-in heading
rather than appearing before it.
%
\githubissue[s]{131 and 173}

\subsection{???}

%
\githubissue{000}


\section{Changes to packages in the \pkg{amsmath} category}
\subsection{Improve compability with hyperref}

When \pkg{hyperref} is used, incrementing a counter creates anchors and this can affect spacing.
For a long time \pkg{hyperref} patched the \env{equation} environment to 
avoid some of the side effects. This patch has now been moved directly into \pkg{amsmath}.
Additionally,
a \cs{mathopen} has been added to avoid that the anchor affects a following unary symbol.
%
\githubissue{652}

\subsection{???}

%
\githubissue{000}




\medskip

\begin{thebibliography}{9}

\fontsize{9.3}{11.3}\selectfont

\bibitem{34:blueprint} Frank Mittelbach and Chris Rowley:
  \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
  \url{https://latex-project.org/publications/indexbyyear/2020/}

\bibitem{34:source2e}
  \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
  \url{https://latex-project.org/help/documentation/}

\bibitem{34:ltnews31} \LaTeX{} Project Team:
  \emph{\LaTeXe{} news 31}.\\
  \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}

\bibitem{34:ltnews32} \LaTeX{} Project Team:
  \emph{\LaTeXe{} news 32}.\\
  \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}

\end{thebibliography}



\end{document}