summaryrefslogtreecommitdiff
path: root/macros/latex/base/ltnews37.tex
blob: 1efb0a5127cf0efc3053802b237b9969f8ebaa65 (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
% \iffalse meta-comment
%
% Copyright (C) 2021-2024
% 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: ltnews37.tex
%
% This is issue 37 of LaTeX News.

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

\documentclass{ltnews}

%%  Maybe needed only for Chris' inadequate system:
\providecommand\Dash {\unskip \textemdash}

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

\usepackage[T1]{fontenc}

\usepackage{lmodern,url,hologo}

\usepackage{csquotes}
\usepackage{multicol}
\usepackage{color}

\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}
%% But Chris has to mostly disable \href for his TEXPAD app:
%%  \def\href #1{}  % Only For Chris' deficient TeX engine

% 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
     \else
       % githubissue preceding
       \vskip-\smallskipamount
       \vskip-\parskip
     \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 >
% (we have meta variables in verbatim, so keep it.)
%\makeatletter
%\def\verbatim@font{%
%  \normalsize\ttfamily}
%\makeatother

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

% \publicationday{01} % change this if it's not released on 1st of a month
\publicationmonth{June}
%\publicationyear{2023  --- DRAFT version for upcoming release}
\publicationyear{2023}

\publicationissue{37}

\begin{document}

\tubcommand{\addtolength\textheight{4.1pc}}   % only for TUB

\maketitle
{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
\tableofcontents}

\setlength\rightskip{0pt plus 3em}

% for ltnews37, squeeze to five pages.
\tubcommand{\fontsize{9.6}{12}\selectfont}


\medskip


%\section{Introduction}


\section{New functionality offered as part of the
  \enquote{\LaTeX{} Tagged PDF} project}

We have now enabled new automatic tagging functionality for additional
\LaTeX{} elements, among them most display environments, standard
sectioning commands, content, figure and table listings, floats and graphics and
bibliographies. This can
be activated through
\begin{verbatim}
\DocumentMetadata{testphase=phase-III}
\end{verbatim}
At this point in time tagging support is only available for a
restricted set of documents, i.e., those that use one of the basic
document classes (\texttt{article}, \texttt{report}, and
\texttt{book}) and only use commands and environments described in
Lamport's \LaTeX{} manual.

Using other document classes or adding additional packages in the
preamble may work (or may partially work) but at this stage it is not
very likely, at least not for packages or classes that excessively
alter internals of \LaTeX{}.

Also note that there are still several environments and commands
described in the \LaTeX{} manual that do not have tagging support yet,
notably tabulars, \texttt{tabbing}, the various math environment and a
few others.  They will get this support as part of \texttt{phase-III},
but some of them will be delayed until after the June release.

A prototype for math tagging (including support for the \pkg{amsmath}
environments) is already available, but it is mainly intended for
experimentation and feedback and the resulting tagging is by no means
the way we envision it to be eventually. If you would like to try it out use
the following line:
\begin{verbatim}
\DocumentMetadata{testphase={phase-III,math}}
\end{verbatim}
Note that the math tagging code at this point in time will clash with
packages that redefine the \texttt{\$} character (which then may lead to strange
errors) and that packages that use math mode for non-mathematical
constructs may result in surprising output as far as tagging is
concerned. Feedback on which packages fail with the code in one or
another way would be appreciated.

The \texttt{latex-lab} bundle contains various 
(still untagged) documentation files about the new code that can
be accessed with \verb|texdoc -l latex-lab|.

Feedback is welcome! 
Please use \url{https://github.com/latex3/latex2e/discussions/1010}.



\section{New or improved commands}

\subsection{Extending hooks to take arguments}

Hooks have always been containers for code whose outcome was entirely
dependent on the contents of the hook alone.  If any type of contextual
information had to be passed to the hook, it had to be done by setting
some variable before the hook so that the code in the hook could use
that.  But this is somewhat hard to keep track of, clumsy to implement,
and it required the programmer to have some kind of \enquote{hook before
the hook} to do that setup.

To make things a bit easier, \pkg{lthooks} was enhanced to support hooks
with arguments.  Hooks can now be declared and used with arguments, then
the code added to these hooks can reference the hook's arguments using
\verb|#1|, \verb|#2|, etc., so now hooks can behave more like macros
than like \emph{token lists} (using \pkg{expl3} terminology).  Regular
argument-less hooks continue to work exactly like they did before:  this
extension is completely compatible with older documents and packages.

\AddToHook{cmd/verbatim@font/after}[hack]{\small}
To declare a hook with arguments, use
\begin{verbatim}
\NewHookWithArguments {<hook>} {<num-args>}
\end{verbatim}
then, similarly, to use the code in the hook, supposing a hook declared
with 2 arguments, write
\begin{verbatim}
\UseHookWithArguments {<hook>} {2} {<arg1>} {<arg2>}
\end{verbatim}

Or, if you want to add some code to a hook that takes arguments, write
\begin{verbatim}
\AddToHookWithArguments {<hook>} [<label>] {<code>}
\end{verbatim}
exactly like you would for regular hooks, except that the \meta{code}
can use the arguments by referencing \verb|#1|, \verb|#2|, etc.  In this
case, if you want to add an actual parameter token (\verb|#|) to the
\meta{code}, you have to double it, as usual.
\RemoveFromHook{cmd/verbatim@font/after}[hack]

Additionally, if you want to add \enquote{regular} code to a hook with
arguments, you can still use \cs{AddToHook} --- in that case \verb|#|
tokens are \emph{not} doubled.  This means that a package author can
decide to add arguments to an existing hook without worrying about
compatibility: \cs{AddToHook} will do the right thing and will not
mistakenly reference the newly added arguments.

The commands \cs{NewReversedHookWithArguments}, \cs
{NewMirroredHookPairWithArguments}, \cs
{AddToHookNextWithArguments}, \cs{UseOneTimeHookWithArguments}, and
the \pkg{expl3} counterparts of the commands discussed in this section
were also added.  The complete documentation can be found in the
\pkg{lthooks} documentation \cite{37:lthooks-doc}.

\subsubsection{Generic \texttt{cmd} hooks with arguments}

Along with the possibility of passing arguments to a regular hook as
discussed above, generic \hook{cmd} hooks can now access the arguments
of the command they are patched into, using the interface described in
the previous section.

For example, if you were to add some code to the \cs{title} command
using hooks, you could access the actual title given in the argument.
Thus, to write the title of the document in the terminal you
could use:
\begin{verbatim}
  \AddToHookWithArguments{cmd/title/before}
    {\typeout{Document title: #1}}
\end{verbatim}

As with regular hooks, code added to a \hook{cmd} hook using
\cs{AddToHook} will not be able to access the command's arguments.  This
means that, as with regular hooks, this change is completely backwards
compatible, so previous usages of \hook{cmd} hooks will work exactly as
they did before.

\subsection{Providing copy and show functions for environments}

To copy a command definition we introduced \cs{NewCommandCopy} in
2022.  This even allows you to copy commands that consist of several internal
components, such as robust commands or those with a complex signature.
To do the same with environments, e.g., to define the environment
\env{myitemize} to be equivalent to \env{itemize}, you can now write
\begin{verbatim}
  \NewEnvironmentCopy{myitemize}{itemize}
\end{verbatim}
There are also \cs{Renew...}\ and \cs{Declare...}, which may be useful
depending on the circumstances.

In addition, we offer a \cs{ShowEnvironment} command, which displays the
\cs{begin} and \cs{end} code of the environment passed as an
argument. E.g., \verb=\ShowEnvironment{center}= results in the
following output:
\begin{verbatim}
  >> \begin{center}=environment:
  >> ->>\trivlist \centering \item \relax .
  <<recently read>> }
  l. ...\ShowEnvironment{center}
  >> \end{center}:
  >> ->>\endtrivlist .
  <<recently read>> }
  l. ...\ShowEnvironment{center}
\end{verbatim}
%
\githubissue{963}

\subsection{\cs{IfFileAtLeastTF}}

The 2020-10-01 \LaTeX{} release introduced the CamelCase tests
\cs{IfClassAtLeastTF} and \cs{IfPackageAtLeastTF} for checking class
and package dates. We have now added \cs{IfFileAtLeastTF} to allow the
same to happen for generic files which contain a \cs{ProvidesFile}
line.
%
\githubissue{1015}

\subsection{\cs{DeclareLowercaseMapping}, \cs{DeclareTitlecaseMapping}
  and \cs{DeclareUppercaseMapping}\texorpdfstring{\raggedright}{}}

The move from a case-changing approach using \cs{lccode} and \cs{uccode} data
to one where information is stored by a kernel-managed structure left a gap in
the ability of the user to \emph{tune} the case changing outcomes. This has now
been addressed by the addition of three commands
\begin{itemize}\tubcommand{\setlength{\parskip}{0pt}}%
  \item \cs{DeclareLowercaseMapping}
  \item \cs{DeclareTitlecaseMapping}
  \item \cs{DeclareUppercaseMapping}
\end{itemize}
which can be used to customise the outcome for codepoints. This can be applied
generally or to a specific locale (see also the next section). A small number
of pre-defined customisations have been set up in the kernel where the outcomes
for \pdfTeX{} should be different for those from Unicode engines. For
example
\begin{verbatim}
  \DeclareUppercaseMapping{"01F0}{\v{J}}
\end{verbatim}
allows \v{J} to be produced in 8-bit engines: without this customisation,
an error would occur as there is no pre-composed \v{J} in Unicode. More detail
is given in \texttt{usrguide}.
%
\githubissue{1033}

\subsection{\cs{BCPdata}}

Improvements in the Unicode handling for case changing have highlighted that
the kernel has not to-date been locale-aware. The packages \pkg{babel} and
\pkg{polyglossia} provide comprehensive locale support, but did not have
an agreed unified interface to pass that information back to other code.
Following discussion with the maintainers of those two bundles, the kernel
now defines \cs{BCPdata} as a stub (so it is always defined), and \pkg{babel}
and \pkg{polyglossia} will redefine it to provide the locale data. An agreed
set of keywords mean that \cs{BCPdata} can be queried in a structured way
by both the kernel and any other \enquote{consumer} packages.
%
\githubissue{1035}

\subsection{Improve \cs{samepage}}

The \cs{samepage} declaration sets various parameters to
\texttt{10000} to prevent undesired page breaks.  The
\cs{predisplaypenalty} parameter has already by default a value of
\texttt{10000}, and to save space in the past it was therefore not
explicitly set. However, there are a few classes that change the
parameter and as result the user might experience a page break in
front of a display formula within the scope of \cs{samepage} when
using such classes. This has now been corrected and
\cs{predisplaypenalty} is also explicitly set to \texttt{10000}.
%
\githubissue{1022}

\subsection{Groups in \cs{MakeUppercase}}
%
Prior to 2022, \cs{MakeUppercase} and \cs{MakeLowercase} used a brace
group around their argument so providing a scope for any declarations
within the argument. This grouping has been restored (also
for \cs{MakeTitlecase}), although the underlying L3 text case commands do
not use grouping.
%
\githubissue{1021}

\subsection{Extension of the \cs{label} command}

Previously, in standard \LaTeX{}, the \cs{label} command wrote a \cs{newlabel} declaration into
the \texttt{.aux} file and stored two values in
the second argument of this \cs{newlabel} command:
\cs{@currentlabel}, which normally contains the state of the current 
counter and \cs{thepage} for the current page number.

The packages \pkg{hyperref} and 
\pkg{nameref} then patched the \cs{label} command to store five values instead.
In addition to the above they saved \cs{@currentlabelname}, which normally contains the 
current title text and can be retrieved with \cs{nameref}, and 
\cs{@currentHref}, which is the name of the destination needed to create an 
active link. The fifth argument was only used if external 
references were loaded with the \pkg{xr-hyper} package. 

Starting with this release, the number of values stored in \cs{newlabel} has been unified. 
\cs{label} now writes a
\cs{newlabel} command that always contains five values in the second argument (each in a brace group):
\cs{@currentlabel}, \cs{thepage}, \cs{@currentlabelname}, 
\cs{@currentHref}, and \cs{@kernel@reserved@label@data} (which is reserved for the kernel).

Additionally, a hook with the name \texttt{label} has been 
added. It takes one argument: the label string.
Code added to the hook can refer to this argument with~\verb+#1+. 
The hook is executed directly before the \cs{label} command writes to the \texttt{.aux} file
but \emph{after} the \cs{@bsphack} command has done its spacing magic, and it is located \emph{inside} a group; thus, its code only affects the write operation. 

\section{Code improvements}

\subsection{Performance in checking file existence}

The addition of hooks, etc., to file operations had a side effect of making
multiple checks that the file existed. In larger documents using
many files, these file system operations caused non-trivial performance
impact. We now cache the existence of files, such that these repeated filesystem
calls are avoided.

\subsection{\pkg{doc}: Handle \texttt{\textbackslash\textvisiblespace} correctly in the index}

Due to some problems in the code it wasn't possible to prevent
\verb*=\ = from showing up in the index\Dash \verb=\DoNotIndex{\ }=, etc.\ had no effect. This has now been corrected.
%
\githubissue{943}


\subsection{\pkg{doc}: Support the \pkg{upquote} package}

The default quote and backquote characters in typewriter fonts are
typographical quotes, e.g., the input
\begin{verbatim}
   \verb/`prog 'my input'`/
\end{verbatim}
 is rendered as \verb/`prog 'my input'`/ and not as
%
\begingroup              % code to mimic upquote.sty
\catcode`'=\active
\catcode``=\active
\makeatletter
\g@addto@macro\@noligs
   {\let'\textquotesingle
    \let`\textasciigrave
    \ifx\encodingdefault\upquote@OTone
    \ifx\ttdefault\upquote@cmtt
    \def'{\char13 }%
    \def`{\char18 }%
    \fi\fi}
\endgroup
%
\verb/`prog 'my input'`/ as preferred by many programmers.

This can be adjusted, for example, with the \pkg{upquote} package,
which results in the second output. However, for historical reasons
\pkg{doc} had its own definition of \cs{verb} and \env{verbatim} and
as a consequence the two packages did not cooperate.  This has now
been fixed and loading \pkg{upquote} together with \pkg{doc} has the
desired effect.
%
\githubissue{953}


\subsection{Default definition for \cs{do}}

The command \cs{do} with its nice public name is in reality an
internal command inherited from plain \TeX{} for list
processing. However, it only got a definition when
\verb=\begin{document}= was executed, with a result that a user
definition in the preamble was unconditionally overwritten at this
point. To properly alert the user that this command is not freely
available we now make a definition in the format, so that
\cs{newcommand} and friends produce a proper error message instead of
allowing a definition that doesn't last.
%
\githubissue{975}




\subsection{New key for \env{filecontents}}

The \env{filecontents} environment warns on the terminal if a file
gets overwritten even if that is intentional,
e.g., when you write a temporary file over and over again.  To make
the warning less noisy in this case we added a new \texttt{nowarn} key
that redirects the overwriting warning to the transcript file. We
think that some record of the action is still required to help with
debugging, thus it is not completely silenced. The warning that
nothing gets written, because the file already exists (and the
\texttt{force} key was not used), is not altered and still shows up on
the terminal.
%
\githubissue{958}


\subsection{A further hook for shipping out pages}

Since October 2020 the shipout process offers a number of hooks to
adjust what is happening before, during, and after the
\cs{shipout}. For example, with the \hook{shipout/before} hook, packages
can reset code they have altered (e.g., \cs{catcode}s during
verbatim-like processing) and with \hook{shipout/background} and
\hook{shipout/foreground} material can be added to the pages.
Details are given in \cite{37:ltshipout-doc}.

However, still
missing was a hook that allows a package writer to manipulate the
completed page (with foreground and background attached) just before
the actual shipout happens.
For this we now provide the additional hook \hook{shipout}. One
use case (sometimes needed in print production) is to mirror the
whole page via \cs{reflectbox} including all the extra data that may
have been added into the fore- or background.
%
\githubissue{920}



\subsection{Displaying release information in the \texttt{.log}}

\LaTeX{} displays its release information at the very beginning of the
\LaTeX{} run on the terminal, and also writes it to the transcript file
if that is already opened at this point. While this is normally true,
it is not the case if the \LaTeX{} run was started passing additional
\TeX{} code on the command line, e.g.,
\begin{verbatim}
pdflatex '\PassOptionsToClass{11pt}{article}
              \input{myarticle}'
\end{verbatim}
In this case the release information is displayed when
\cs{PassOptionsToClass} is processed but the transcript file is only
opened when the output file name is known, i.e., after \cs{input} has
been seen, and as a result the release information is only shown on
the terminal.

To account for this scenario, we now repeat the release information
also at the very end of the transcript file where we can be sure that
it is open and ready to receive material.
%
\githubissue{944}





\section{Bug fixes}

\subsection{Incompatibility between \pkg{doc} and \pkg{unicode-math}}

The \pkg{unicode-math} package alters the catcode of \verb=|= but does
not adjust its value for use in \pkg{doc}, with the result that
\enquote{or} modules, i.e., $\langle A | B \rangle$ are displayed in a
strange way. This is now fixed with some firstaid code that will
eventually be moved into \pkg{unicode-math}.
%
\githubissue{820}


\subsection{A fix for \cs{hspace}}

The change to \cs{hspace}, done in 2020 to make it \pkg{calc}-aware,
had the unfortunate side effect that starting a paragraph with
\cs{hspace} would result in the execution of \cs{everypar} inside a
group (i.e., any local changes would immediately be revoked, breaking,
for example, \pkg{wrapfig} in that special situation).
%
This got fixed with the 2022-11 PL1 hotfix, so was already corrected in
the previous release, but is only now documented in the newsletter.
%
\githubissue{967}

\subsection{Ensure that \cs{cs} is defined in \cls{ltxdoc}}

The class \cls{ltxdoc} defined the command \cs{cs} to typeset a
command name with a backslash in front. This definition was moved to
the \pkg{doc} package itself. This meant that it was suddenly missing
when reverting to the old \pkg{doc} package implementation via the
class option \texttt{doc2}. This has now been corrected.
%
\githubissue{981}



\subsection{Improve spacing at top of \env{minipage}s}

A list and several other document elements add some vertical space in
front of them. However this should not happen at the beginning of a
box (such as a \env{minipage}) and normally it doesn't, because
\TeX{} automatically drops such space at the start of a vertical
list. However, if there is some invisible material, such as a
\cs{color} command, a \pkg{hyperref} anchor, a \cs{write} or
other such items, then the list is no longer empty and \TeX{} no longer
drops the vertical space.

With the new paragraph handling introduced in 2021 it is now finally
possible to detect and avoid this problem and apply appropriate
counter measures so that from now on the spacing will always be
correct.
%
\githubissue{989}


\subsection{A fix for \cs{NewCommandCopy} and \cs{ShowCommand}}

When copying and showing definitions of (non-expandable) document commands
(a.k.a.\ commands defined by \cs{NewDocumentCommand} and friends) containing empty
or only \texttt{m}-type arguments, these commands were wrongly recognized as
expandable ones.
This is fixed in the present \LaTeX{} release.
%
\githubissue{1009}

\subsection{Corrections for switching math version}
Some internal code improvements improve support for switching math version
when nested within an outer math expression.
This will improve \cs{boldsymbol} and \cs{bm} and similar commands.
%
\githubissue{1028}

\subsection{Allow par as a filename}
\verb|\input{par}| or \verb|\includegraphics{par}| could give spurious
errors. This has been fixed by making an internal command \cs{long}.
%
\githubissue{942}

\subsection{Correct setting of \cs{endlinechar} in \texttt{+v} arguments}
In the particular case of a document command with a \texttt{+v}-type
argument used inside \cs{ExplSyntaxOn}\texttt{/Off}, newlines would be
misinterpreted as spaces because the value of \cs{endlinechar} was
set too late.  This has been fixed, and now newlines are correctly
translated to ``\verb|the character ^^M|''.
%
\githubissue{876}

\subsection{Correct handling of hooks with only `next' code}
When \cs{AddToHookNext} was used on a not-yet-declared hook, that hook
would be incorrectly identified as empty by \cs{ShowHook}.  Also, if
that hook was later declared, that `next' code would not be executed.
This has been fixed by correctly initializing the hook structure when
\cs{AddToHookNext} is used.
%
\githubissue{1052}

\subsection{Ignoring space after \texttt{\$\$}}
Space is normally ignored after a closing \texttt{\$\$},
but internal \LaTeX{} font handling code could interfere if
\cs{eqno} was used. \cs{eqno} and \cs{leqno} have been redefined
to add \cs{ignorespaces} after the math group.
%
\githubissue{1059}

\section{Documentation improvements}

\subsection{Updates to the guides}

When \LaTeXe{} was released, the team provided documentation for both document
authors and package/class developers in the two files \texttt{usrguide} and
\texttt{clsguide}. Over time, the team have augmented these documents as new
methods have been added to the kernel. However, they retained their structure
as assuming familiarity with \LaTeX{}~2.09. This meant that for new users,
there was material which is no longer relevant, and less clarity than desirable
regarding the approaches that are recommended today.

The two files have now been (partially) re-written, with the versions available
previously now frozen as \texttt{usrguide-historic} and \texttt{clsguide-historic}.
More material has been carried forward in the class/package guide than in the
user guide, but both are worth a re-read by experienced \LaTeX{} users.



\subsection{Displaying the exact release dates for \LaTeX{}}

In some situations it is necessary to find out the exact release dates
for older versions of the \LaTeX{} format, for example, when you need
to use different code in a package depending on the availability of a
certain feature and you therefore want to use
\cs{IfFormatAtLeastTF}\texttt\{\meta{date}\texttt\} or the
rather horrible construction \verb/\@ifl@t@r\fmtversion{/\meta{date}\texttt\},
if you
want to cater for formats that are older than 2020.

Or you know that your package is definitely not going to work with a
format before a certain \meta{date}, in which case you could use
\verb/\NeedsTeXFormat{LaTeX2e}[/\meta{date}\texttt] to ensure that
users are alerted if their format is too old.

The big problem is knowing the exact \meta{date} to put into such
commands; in the past, that was not that easy to find. You could have 
looked in the file \file{changes.txt}, but that is hidden somewhere
in your installation and if you try
\verb/texdoc -l changes.txt/ you get more than thirty results and the %*
right file is by no means the first.

Yukai Chou (\textsf{@muzimuzhi}) kindly provided a patch for this, so that we now have
the exact dates for each \LaTeX{} format listed in an easy to remember
place: in \file{ltnews.pdf} and that file conveniently also contains all major
features and changes to \LaTeX{} over the years\Dash one of which is
most likely the reason you need the \meta{date} in the first
place.

The date is now given in parentheses in the newsletter title, thus this
newsletter tells you that on
%
\makeatletter
\mbox{\expandafter\@gobblenonyear\@year\@nil
  -\@julianmonthtonum\@month-\two@digits\@day}
\makeatother
%
the command
\cs{NewEnvironmentCopy}, a new \texttt{shipout} hook, etc.\ was made
available.  And looking into \file{ltnews.pdf} you can now easily find
out that the \LaTeX3 programming layer was added on 2020-02-02
(because the date was so nice) and not on the first of the month.
%
\githubissue{982}

\subsection{Fresh from the press:\ \enquote{The \LaTeX{} Companion, third~edition} is now in print}

The third edition of \emph{The \LaTeX{} Companion} is now
available. This is the result of five years of careful work and we hope
that it will provide our readers with all the information they need to
successfully navigate the \LaTeX{} ecosystem and efficiently produce
beautiful documents.

Since the publication of the last edition (2004), a lot has happened in
the \LaTeX{} world and thus a complete rewrite was necessary.  All
chapters have been thoroughly revised, and in many cases significantly
extended, to describe new important functionality and features. More
than 5,000 add-on packages have been analyzed in detail, out of which
roughly 10\% have been chosen for inclusion in \emph{The \LaTeX{}
Companion}. All important aspects of these packages are described to
provide the user once again with a satisfying one-stop–shop experience
for the decade to come.

To cover what we thought worth describing today, the book nearly
doubled in size. The print edition is therefore produced as a
two-volume set and sold as a bundle. Both volumes come as hardcover
with ribbons to easily mark pages in the book.

To give you an idea of what is covered in the third edition you can
find some excerpts at
\begin{quote}
\url{https://www.latex-project.org/news/2023/03/17/TLC3}
\end{quote}

The edition is also available as an eBook (Parts~I and~II combined)
consisting of PDF and ePub format, without DRM\@. Finally, the publisher
offers the combination of the printed books and the digital versions at
a very attractive price not available anywhere else.

%% bb -- add reference to TUGboat review here


%\section{Changes to packages in the \pkg{amsmath} category}

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

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


\subsection{\pkg{multicol}: Better support for CJK languages}

The default minimum depth of each column in a \env{multicols}
corresponds to the depth of a \enquote{p} in the current font. This
helps to get some uniformity if rules are used between the columns and
makes sense for Latin-based languages.  Until now it was hard-wired,
but for CJK (Chinese/Japanese/Korean) languages it is better to use a zero depth, because there
all characters have the same height and depth.  And even with
Latin-based languages one might want to use the depth of a \cs{strut}
or that of a parenthesis. So we now offer a way to adjust this while
maintaining backward compatibility: redefine
\cs{multicolmindepthstring} to hold whatever you want to get measured
for its depth (the width is not relevant).
%
\githubissue{698}


\subsection{\pkg{multicol}: Fix handling of nested environments}

If \env{multicols} environments have been nested into each other (the
inner one boxed) it could fail if the boxed environment appeared near a
page break. The problem was that the output routine was called while
the \cs{hsize} was still altered to fit the column width of the inner
\env{multicols} --- thereby messing up the placement of columns of the
page. This has now been fixed.
%
\githubissue{1002}



%\medskip

\begin{thebibliography}{9}

%\fontsize{9.3}{11.3}\selectfont

\bibitem{37:ltshipout-doc} Frank Mittelbach, \LaTeX{}~Project~Team:
  \emph{The~\texttt{\upshape ltshipout} documentation}.\\
  Run \texttt{texdoc} \texttt{ltshipout-doc} to view.

\bibitem{37:lthooks-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
 \emph{\LaTeX's hook management}.\\
 Run \texttt{texdoc} \texttt{lthooks-doc} to view.

%\bibitem{37: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{37:source2e}
%  \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
%  \url{https://latex-project.org/help/documentation/}

%\bibitem{37:Lamport}
%Leslie Lamport.
%\newblock {\LaTeX}: {A} Document Preparation System: User's Guide and Reference
%  Manual.
%\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
%\newblock ISBN 0-201-52983-1.
%\newblock Reprinted with corrections in 1996.
%
%\bibitem{37:ltnews32} \LaTeX{} Project Team:
%  \emph{\LaTeXe{} news 32}.\\
%  \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
%
%\bibitem{37:ltnews34} \LaTeX{} Project Team:
%  \emph{\LaTeXe{} news 34}.\\
%  \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf}
%
%\bibitem{37:ltnews35} \LaTeX{} Project Team:
%  \emph{\LaTeXe{} news 35}.\\
%  \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf}
%
%\bibitem{37:fntguide} \LaTeX{} Project Team:
%  \emph{\LaTeXe{} font selection}.\\
%  \url{https://latex-project.org/help/documentation/}
%
%\bibitem{37:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
%  \emph{The \texttt{\upshape ltfilehook} documentation}.\\
%  Run \texttt{texdoc} \texttt{ltfilehook-doc} to view.
\end{thebibliography}



\end{document}