LATEX News, Issues 1–39
Contents
Issue 1, June 1994 (1994-06-01)
Welcome to LATEX News . . . . . . . . . . . . .
LATEX 2ε —the new LATEX release . . . . . . . .
Why a new LATEX? . . . . . . . . . . . . . . . .
Processing documents with LATEX 2ε . . . . . .
New packages . . . . . . . . . . . . . . . . . . .
Further information . . . . . . . . . . . . . . .

5
5
5
5
5
5
5

Issue 2, December 1994 (1994-12-01)
Welcome to LATEX News 2 . . . . . . . . . . . .
December 1994 release of LATEX . . . . . . . . .
Accented input . . . . . . . . . . . . . . . . . .
AMS-LATEX . . . . . . . . . . . . . . . . . . . .
LATEX on the internet . . . . . . . . . . . . . .
Further information . . . . . . . . . . . . . . .

6
6
6
6
6
6
6

Issue 3, June 1995 (1995-06-01)
Welcome to LATEX News 3 . . . . . . . . . . . .
June 1995 release of LATEX . . . . . . . . . . . .
Additional input encodings . . . . . . . . . . .
LATEX getting smaller . . . . . . . . . . . . . .
Distribution and modification . . . . . . . . . .
AMS-LATEX full release . . . . . . . . . . . . . .
PostScript fonts . . . . . . . . . . . . . . . . . .
Further information . . . . . . . . . . . . . . .

7
7
7
7
7
7
7
7
7

Issue 4, December 1995 (1995-12-01)
Welcome to LATEX News 4 . . . . . . . . . . . .
LATEX getting smaller . . . . . . . . . . . . . .
New ‘concurrent’ docstrip . . . . . . . . . . . .
New T1 encoded fonts . . . . . . . . . . . . . .
More robust commands . . . . . . . . . . . . .
New Interface to building ‘extension’ classes . .
More Input Encodings . . . . . . . . . . . . . .
Further information . . . . . . . . . . . . . . .

8
8
8
8
8
8
8
8
8

Issue 5, June 1996 (1996-06-01)
Welcome to LATEX News 5 . . . . . . . . . . . .
Extra possibilities for section headings . . . . .
The ‘openany’ option in the ‘book’ class . . . .
More font (output) encodings . . . . . . . . . .
More input encodings supported . . . . . . . .
Fixes and improvements . . . . . . . . . . . . .
Changes to the ‘tools’ packages . . . . . . . . .
New copy of the LATEX bug database . . . . . .

9
9
9
9
9
9
9
9
9

Issue 6, December 1996 (1996-12-01)
Welcome to LATEX News 6 . . . . . . . . . . . .
Mono-case file names . . . . . . . . . . . . . . .
Another input encoding . . . . . . . . . . . . .
Better user-defined math display environments
Docstrip improvements . . . . . . . . . . . . . .
AMS LATEX update . . . . . . . . . . . . . . . .
Graphics package update . . . . . . . . . . . .
EC Fonts released . . . . . . . . . . . . . . . .

11
11
11
11
11
11
11
11
11

Issue 7, June 1997 (1997-06-01)
T1 encoded Computer Modern fonts . . . . . .
T1 encoded Concrete fonts . . . . . . . . . . .
Further input encodings . . . . . . . . . . . . .
Normalising spacing after punctuation . . . . .
Accessing Bold Math Symbols . . . . . . . . . .
Policy on standard classes . . . . . . . . . . . .
New addresses for TUG . . . . . . . . . . . . .

12
12
12
12
12
12
12
12

Issue 8, December 1997 (1997-12-01)
New supported font encodings . . . . . . . . . .
New input encodings . . . . . . . . . . . . . . .
Tools . . . . . . . . . . . . . . . . . . . . . . . .
Graphics . . . . . . . . . . . . . . . . . . . . . .
LATEX3 experimental programming conventions

13
13
13
13
13
13

Issue 9, June 1998 (1998-06-01)
New math font encodings . . . . . . . . . . . .
A new math accent . . . . . . . . . . . . . . . .
Extended \DeclareMathDelimiter . . . . . . .
Tools distribution . . . . . . . . . . . . . . . . .
Support for Cyrillic encodings . . . . . . . . . .
Default docstrip header . . . . . . . . . . . . .

14
14
14
14
14
14
14

Issue 10, December 1998 (1998-12-01)
Five years of LATEX 2ε . . . . . . . . . . . . . .
Restructuring the LATEX distribution . . . . . .
LATEX Project on the Internet . . . . . . . . . .
Restructuring the LATEX package licenses . . .
Support for Cyrillic encodings . . . . . . . . . .
Tools distribution . . . . . . . . . . . . . . . . .

15
15
15
15
15
15
15

Issue 11, June 1999 (1999-06-01)
Back in sync . . . . . . . . . . . . . . . . . . .
Yearly release cycles . . . . . . . . . . . . . . .
LPPL update . . . . . . . . . . . . . . . . . . .
The future of SliTEX . . . . . . . . . . . . . . .
Fontenc package peculiarities . . . . . . . . . .
New math font encodings . . . . . . . . . . . .
Tools distribution . . . . . . . . . . . . . . . . .
Coming soon . . . . . . . . . . . . . . . . . . .

16
16
16
16
16
16
16
16
16
–1

Issue 12, December 1999 (1999-12-01)
LPPL update . . . . . . . . . . . . . . . . . . .
fixltx2e package . . . . . . . . . . . . . . . . . .
Outcome of TUG ’99 (Vancouver) . . . . . . .

17
17
17
17

Issue 13, June 2000 (2000-06-01)
Yearly release cycle . . . . . . . . . . . . . . . .
PSNFSS: Quote of the Month . . . . . . . . . . .
New AMS-LATEX . . . . . . . . . . . . . . . . .
New input encoding latin4 . . . . . . . . . . .
New experimental code . . . . . . . . . . . . .

18
18
18
18
18
18

Issue 14, June 2001 (2001-06-01)
Future releases . . . . . . . . . . . . . . . . . .
New release of Babel (required) . . . . . . . . .
New input encoding latin9 . . . . . . . . . . .
New tools . . . . . . . . . . . . . . . . . . . . .
New experimental code . . . . . . . . . . . . .

19
19
19
19
19
19

Issue 15, December 2003 (2003-12-01)
Anniversary release . . . . . . . . . . . . . . . .
LPPL – new version . . . . . . . . . . . . . . .
Small updates to varioref . . . . . . . . . . . .
New and more robust commands . . . . . . . .
Fixing font sizes . . . . . . . . . . . . . . . . .
Font encodings . . . . . . . . . . . . . . . . . .
Displaying font tables . . . . . . . . . . . . . .
New input encodings . . . . . . . . . . . . . . .
Unicode input . . . . . . . . . . . . . . . . . . .
And finally . . . pict2e . . . . . . . . . . . . . .

20
20
20
20
20
20
20
20
20
20
20

Issue 16, December 2003 (2003-12-01)
Anniversary news . . . . . . . . . . . . . . . . .
TLC2: The LATEX Companion – 2nd edition! .
Future maintenance . . . . . . . . . . . . . . .
LPPL certification . . . . . . . . . . . . . . . .
Use of ε-TEX/pdfTEX . . . . . . . . . . . . . .
End of ‘autoload’ support . . . . . . . . . . . .
New models, new code . . . . . . . . . . . . . .

21
21
21
21
21
21
21
21

Issue 17, December 2005 (2005-12-01)
Project licence news . . . . . . . . . . . . . . .
New guide on font encodings . . . . . . . . . .
Robust commands in math . . . . . . . . . . .
Updates of required packages . . . . . . . . . .
Work on LATEX fixes . . . . . . . . . . . . . . .
The graphics bundle . . . . . . . . . . . . . . .
Future development . . . . . . . . . . . . . . .

22
22
22
22
22
22
23
23

Issue 18, December 2007 (2007-12-01)

24

Issue 19, September 2009 (2009-09-24)
New LATEX release . . . . . . . . . . . . . . . .
New code repository . . . . . . . . . . . . . . .
Babel . . . . . . . . . . . . . . . . . . . . . . .
The future . . . . . . . . . . . . . . . . . . . . .

25
25
25
25
25

Issue 20, June 2011 (2011-06-27)
Scheduled LATEX bug-fix release . . . . . . . . .
Continued development . . . . . . . . . . . . .
Release notes . . . . . . . . . . . . . . . . . . .

26
26
26
26

Issue 21, May 2014 (2014-05-01)
Scheduled LATEX bug-fix release . . . . . . . . .
Standard LATEX (LATEX 2ε ) and expl3 . . . . . .

28
28
29

Issue 22, January 2015 (2015-01-01)
New LATEX 2ε bug-fix policy . . . . . . . . . . .
Updates to the kernel . . . . . . . . . . . . . .
l3build . . . . . . . . . . . . . . . . . . . . . . .
Hyperlinked documentation and TDS zip files .

30
30
31
31
31

Issue 23, October 2015 (2015-10-01)
Enhanced support for LuaTEX . . . . . . . . .
More Floats and Inserts . . . . . . . . . . . . .
Updated Unicode data . . . . . . . . . . . . . .
Support for Comma Accent . . . . . . . . . . .
Extended inputenc . . . . . . . . . . . . . . . .
Pre-release Releases . . . . . . . . . . . . . . .
Updates in tools . . . . . . . . . . . . . . . . .

32
32
33
33
33
33
33
33

Issue 24, February 2016 (2016-02-01)
LuaTEX support . . . . . . . . . . . . . . . . .
Unicode data . . . . . . . . . . . . . . . . . . .
More support for east European accents . . . .
Changes in Graphics . . . . . . . . . . . . . . .
Changes in Tools . . . . . . . . . . . . . . . . .
Improving support for Unicode engines . . . . .

34
34
34
35
35
35
35

Issue 25, March 2016 (2016-03-01)
LuaTEX . . . . . . . . . . . . . . . . . . . . . .
Documentation checksums . . . . . . . . . . . .
Updates to inputenc . . . . . . . . . . . . . . .
Updates in Tools . . . . . . . . . . . . . . . . .
amsmath . . . . . . . . . . . . . . . . . . . . .
Related updates . . . . . . . . . . . . . . . . .

36
36
36
36
36
36
36

Issue 26, January 2017 (2017-01-01)
ε-TEX . . . . . . . . . . . . . . . . . . . . . . .
Default encodings in XELATEX and LuaLATEX .
\showhyphens in XELATEX . . . . . . . . . . . .
The fixltx2e package . . . . . . . . . . . . . . .
The latexbug package . . . . . . . . . . . . . . .
Updates to amsmath . . . . . . . . . . . . . . .
Updates to tools . . . . . . . . . . . . . . . . .

37
37
37
38
38
38
38
38
–2

An addendum to the release changes in 2015:
page breaks and vertical spacing . . . . .

38

Issue 27, April 2017 (2017-04-15)
ISO 8601 Date format . . . . . . . . . . . . . .
Further TU encoding improvements . . . . . .
Disabling hyphenation . . . . . . . . . . . . . .
Discretionary hyphenation . . . . . . . . . . . .
Default document language . . . . . . . . . . .
Line spacing in parboxes . . . . . . . . . . . . .

39
39
39
39
39
39
39

Issue 28, April 2018 (2018-04-01)
A new home for LATEX 2ε sources . . . . . . . .
Bug reports for core LATEX 2ε . . . . . . . . . .
UTF-8: the new default input encoding . . . .
A general rollback concept . . . . . . . . . . . .
Integration of remreset and chngcntr packages .
Testing for undefined commands . . . . . . . .
Changes to packages in the tools category . . .
Changes to packages in the amsmath category .

40
40
40
40
41
42
42
42
42

Issue 29, December 2018 (2018-12-01)
Introduction . . . . . . . . . . . . . . . . . . . .
Bug reports for core LATEX 2ε and packages . .
Changes to the LATEX kernel . . . . . . . . . . .
Changes to packages in the tools category . . .
Changes to packages in the amsmath category .
Website updates . . . . . . . . . . . . . . . . .

43
43
43
43
45
45
45

Issue 30, October 2019 (2019-10-01)
LATEX-dev formats now available . . . . . . . .
Improving Unicode handling in pdfTEX . . . .
Improving file name handling in pdfTEX . . . .
Improving the filecontents environment . . .
Making more user commands robust . . . . . .
Other changes to the LATEX kernel . . . . . . .
Changes to packages in the tools category . . .
Changes to packages in the amsmath category .
Documentation updates . . . . . . . . . . . . .

47
47
48
48
48
48
49
50
50
50

Issue 31, February 2020 (2020-02-02)
Experiences with the LATEX -dev formats . . .
Concerning this release . . . (LuaLATEX engine) .
Improved load-times for expl3 . . . . . . . . . .
Improvements to LATEX font selection: NFSS .
Other changes to the LATEX kernel . . . . . . .
Changes to packages in the graphics category .
Changes to packages in the tools category . . .
LATEX requirements on engine primitives . . . .

51
51
51
51
52
54
55
55
55

Issue 32, October 2020 (2020-10-01)
Introduction . . . . . . . . . . . . . . . . . . . .
Providing xparse in the format . . . . . . . . .
A hook management system for LATEX . . . . .
Other changes to the LATEX kernel . . . . . . .
Changes to packages in the graphics category .
Changes to packages in the tools category . . .
Changes to packages in the amsmath category .
Changes to the babel package . . . . . . . . . .

56
56
56
57
57
60
61
61
62

Issue 33, June 2021 (2021-06-01)
Introduction . . . . . . . . . . . . . . . . . . . .
Extending the hook concept to paragraphs . . .
Extending the hook concept to commands . . .
Other hook business . . . . . . . . . . . . . . .
Improved handling of file names . . . . . . . . .
Updates to the font selection scheme . . . . . .
Glyphs, characters & encodings . . . . . . . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Changes to packages in the graphics category .
Changes to packages in the tools category . . .
Changes to packages in the amsmath category .

63
63
63
64
64
64
65
65
66
67
68
68
68

Issue 34, November 2021 (2021-11-15)
Introduction . . . . . . . . . . . . . . . . . . . .
Hook business . . . . . . . . . . . . . . . . . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Bug fixes . . . . . . . . . . . . . . . . . . . . .
Changes to packages in the amsmath category .
Changes to packages in the graphics category .
Changes to packages in the tools category . . .

69
69
69
71
72
73
73
74
74

Issue 35, June 2022 (2022-06-01)
Introduction . . . . . . . . . . . . . . . . . . . .
Document metadata interface . . . . . . . . . .
The latex-lab bundle . . . . . . . . . . . . . . .
A new mark mechanism for LATEX . . . . . . .
A key/value approach to option handling . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Bug fixes . . . . . . . . . . . . . . . . . . . . .
Changes to packages in the amsmath category .
Changes to packages in the graphics category .
Changes to packages in the tools category . . .

75
75
75
76
76
77
77
78
80
81
81
81

Issue 36, November 2022 (2022-11-01)
Introduction . . . . . . . . . . . . . . . . . . . .
Auto-detecting key/value arguments . . . . . .
A note for font package developers . . . . . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Bug fixes . . . . . . . . . . . . . . . . . . . . .
Changes to packages in the graphics category .

83
83
83
83
84
84
85
85
–3

Changes to packages in the tools category . . .

85Issue 37, June 2023 (2023-06-01)
New functionality offered as part of the “LATEXTagged PDF” project . . . . . . . . . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Bug fixes . . . . . . . . . . . . . . . . . . . . .
Documentation improvements . . . . . . . . . .
Changes to packages in the tools category . . .

87Issue 38, November 2023 (2023-11-01)
News from the “LATEX Tagged PDF” project .
Hooks, sockets and plugs . . . . . . . . . . . . .
Document properties and cross-referencing . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Removed kernel commands . . . . . . . . . . .
Changes to packages in the tools category . . .

93
93
93
94
95
95
96
96

Issue 39, June 2024 (2024-06-01)
Introduction . . . . . . . . . . . . . . . . . . . .
News from the “LATEX Tagged PDF” project .
Enhancements to the new mark mechanism . .
Providing xtemplate in the format . . . . . . . .
New or improved commands . . . . . . . . . . .
Code improvements . . . . . . . . . . . . . . .
Documentation improvements . . . . . . . . . .
Bug fixes . . . . . . . . . . . . . . . . . . . . .
Changes to packages in the amsmath category .
Changes to packages in the tools category . . .
Changes to files in the cyrillic category . . . . .

97
97
97
98
98
99
99
101
101
102
102
102

87
88
89
90
91
92

–4

LATEX News
Issue 1, June 1994 (LATEX release 1994-06-01)

Welcome to LATEX News
An issue of LATEX News will accompany every future
release of LATEX. It will tell you about important
events, such as major bug fixes, newly available
packages, or any other LATEX news.

Unfortunately, this will not always work, because some
LATEX 2.09 packages will only work in LATEX 2εcompatibility mode. You should find out if there is a
LATEX 2ε version of the package available.
LATEX 2ε native mode also gives access to the newfeatures of LATEX 2ε , described in LATEX 2ε for authors.

LATEX 2ε —the new LATEX release

New packages

The most important news is the release of LAT X 2
E

ε , thenew version of the LAT X software. This version has

Ebetter support for fonts, graphics and colour, and will
be actively maintained by the LATEX Project team.
Upgrades will be issued every six months, in June andDecember.

Why a new LAT X?
EOver the years many extensions have been developed for
LATEX. This is, of course, a sure sign of its continuing
popularity but it has had one unfortunate result:incompatible LATEX formats came into use at different
sites. Thus, to process documents from various places, asite maintainer was forced to keep LATEX (with andwithout NFSS), SliTEX, AMS-LATEX, and so on. In
addition, when looking at a source file it was not always
clear for which format the document was written.
To put an end to this unsatisfactory situation a newrelease of LATEX was produced. It brings all suchextensions back under a single format and thus prevents
the proliferation of mutually incompatible dialects of
LATEX 2.09. The new release was available for several
months as a test version, and the final release of 1 June
officially replaces the old version.

Processing documents with LATEX 2εDocuments written for LATEX 2.09 will still be read by
LATEX 2ε . Any such document is run in LATEX 2.09
compatibility mode.
Unfortunately, compatibility mode comes with aprice: it can run up to 50% slower than LATEX 2.09 did.
If you want to run your document in the faster nativemode, you should try replacing the line:\documentstyle[options,packages]{class}with:\documentclass[options]{class}\usepackage{latexsym,packages}

LATEX 2ε has much better support for graphics, colour,
fonts, and multi-lingual typesetting. The following
software should be available from the distributor who
brought you LATEX 2ε :babel, for typesetting in many languages.
color, for colour support.
graphics, for including images.
mfnfss, for using bitmap fonts.
psnfss, for using Type 1 fonts.
tools, other packages by the LATEX Project team.
The packages come with full documentation, and arealso described in LATEX: A Document Processing Systemor The LATEX Companion.

Further information
More information about LATEX 2ε is to be found in:
LATEX: A Document Preparation System, Leslie
Lamport, Addison Wesley, 2nd ed, 1994.
The LATEX Companion, Goossens, Mittelbach andSamarin, Addison Wesley, 1994.
The LATEX distribution comes with documentation on
the new features of LATEX:LATEX 2ε for authors, describes the new features of
LATEX documents, in the file usrguide.tex.
LATEX 2ε for class and package writers, describes the
new features of LATEX classes and packages, in thefile clsguide.tex.
LATEX 2ε font selection, describes the new features of
LATEX fonts for class and package writers, in the filefntguide.tex.
For more information on TEX and LATEX, get in touchwith your local TEX Users Group, or the international
TEX Users Group, P. O. Box 869, Santa Barbara,
CA 93102-0869, USA, Fax: +1 805 963 8358,
EMail: tug@tug.org.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1994, all rights reserved.

–5

LATEX News
Issue 2, December 1994 (LATEX release 1994-12-01)

Welcome to LATEX News 2
An issue of LATEX News will accompany every future
release of LATEX. It will tell you about important
events, such as major bug fixes, newly available
packages, or any other LATEX news.

December 1994 release of LATEX
December 1994 sees the second release of LATEX 2ε . We
are on schedule to deliver a release of LATEX every six
months, in December and June.
This release has seen quite a lot of activity, which is
not too surprising as it’s only been a year since the firsttest release of LATEX 2ε . We don’t expect so much
activity in the next six months.
Many of the changes are minor improvements andbug-fixes—see LATEX 2ε for authors (usrguide.tex),
LATEX 2ε font selection (fntguide.tex) and our changelog (changes.txt) for more details.
However, there are two important new packages
available for LATEX: inputenc and AMS-LATEX.

Accented input
One of the problems with writing non-English
documents in LATEX is the accent commands. Reading
documents containing text like na\"\i ve is frustrating,especially if your keyboard allows you to type naïve.
In the past, LATEX has not supported input
containing accented characters such as ï, because
Windows, Macintosh and Unix all have different ways ofdealing with accented input, called input encodings.
However, the inputenc package allows you to specify
which input encoding your document is written with,for example to use the ISO Latin-1 encoding, you type:\usepackage[latin1]{inputenc}
At the moment, inputenc supports the ascii andlatin1 input encodings, but more will be added with
future releases.
The inputenc package is currently a test release.
The user interface for the full release will be upwardly
compatible with the test version.

AMS-LATEXAMS-LATEX is a set of miscellaneous extensions for
LATEX distributed by the American MathematicalSociety. They provide superior information structureand superior printed output for mathematical
documents.
There are far too many features of AMS-LATEX to list
here. AMS-LATEX is described in the accompanying
documentation, and in The LATEX Companion.
Version 1.2beta of AMS-LATEX was released fortesting by intrepid users in October 1994. The full
release of AMS-LATEX 1.2 is expected in early January
1995.
It will be divided into two bundles:• the amsfonts packages, which give access tohundreds of new mathematical symbols, and newmath fonts such as blackboard bold and fraktur.
• the amsmath packages, which provide finer control
over mathematical typesetting, such as multi-line
subscripts, enhanced theorem and proof
environments, and improved displayed equations,
For compatibility with older documents, an amstex
package will be provided.

LATEX on the internet
LATEX has its own home page on the World Wide Web,
with the URL:
http://www.tex.ac.uk/CTAN/latex/
This page describes LATEX and the LATEX3 project, andcontains pointers to other LATEX resources, such as theuser guides, the TEX Frequently Asked Questions, andthe LATEX bugs database.
The electronic home of anything TEX-related is theComprehensive TEX Archive Network (CTAN). This isa network of cooperating ftp sites, with over a gigabyteof TEX material:
ftp://ftp.tex.ac.uk/tex-archive/
ftp://ftp.shsu.edu/tex-archive/
ftp://ftp.dante.de/tex-archive/
For more information, see the LATEX home page.

Further information
For more information on TEX and LATEX, get in touchwith your local TEX Users Group, or the international
TEX Users Group, P. O. Box 869, Santa Barbara,
CA 93102-0869, USA, Fax: +1 805 963 8358,
EMail: tug@tug.org.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1994, all rights reserved.

–6

LATEX News
Issue 3, June 1995 (LATEX release 1995-06-01)

Welcome to LATEX News 3
An issue of LATEX News will accompany every future
release of LATEX. It will tell you about important
events, such as major bug fixes, newly available
packages, or any other LATEX news.

experimenting with an option to remove the picture
and tabbing environments from the LATEX kernel, andto load them from a file the first time they are used.
This should help LATEX to run on machines with limited
memory. See autoload.txt for details.

June 1995 release of LATEXDistribution and modification

June 1995 sees the third release of LATEX 2ε . We are onschedule to deliver a release of LATEX every six months,
in December and June.
In the last LATEX News, we said “we don’t expect somuch activity in the next six months,” which hasturned out not to be true!

One topic of discussion that has kept us busy is the
distribution and modification conditions of LATEX. We
are committed to keeping LATEX as free reliable
software, and ensuring that (as far as possible) LATEX
documents will produce the same results on all systems.
The modification conditions are currently underdiscussion, and we would like to hear from anyone
interested. Please read modguide.tex for more
information.

Additional input encodings
In the last release of LATEX we distributed a test versionof the inputenc package which allows the use of input
characters other than just a–z and A–Z. The package
has proved to be robust, so we are now distributing an
expanded version. The new release comes with anumber of input encodings:• ascii the standard encoding,• latin1 the ISO Western European alphabet,• latin2 the ISO Eastern European alphabet,• cp437 the IBM codepage 437,
• cp850 the IBM codepage 850, and• applemac the Apple Macintosh encoding.
These can be used by specifying an option to the
inputenc package, for example:\usepackage[latin1]{inputenc}
The new input encodings are currently being tested, but
we don’t expect any major changes.

LATEX getting smaller
In the past releases of LATEX 2ε , the amount of memory
LATEX requires has increased, but we are pleased to saythat this trend has been reversed. We hope that future
releases of LATEX will continue to get smaller.
For example, on this document, the December 1994
release used 52,622 words of memory, and the June 1995
release uses 51,216 words of memory, which is a 2.7%
reduction.
We are currently experimenting with other ways of
reducing the size of LATEX. For example, we are

AMS-LATEX full release
The AMS-LATEX packages were still in beta test in the
December 1994 release of LATEX, and the full releasecame out in January 1995.
AMS-LATEX is described in the User’s Guide(amsldoc.tex) and in The LATEX Companion.

PostScript fonts
There is a new test release of the PSNFSS packages foraccessing PostScript fonts in LATEX 2ε . This includes an
update to all of the fonts, to remove many of theunderfull and overfull \hbox warnings, and improve thesetting of non-English languages.
The new release of LATEX removes all of the ‘hidden’uses of Computer Modern mathematics. For example,
the footnote markers used to use math mode, so always
used Computer Modern digits rather than ones fromthe current text font. This has now been fixed.

Further information
For more information on TEX and LATEX, get in touchwith your local TEX Users Group, or the international
TEX Users Group, P. O. Box 869, Santa Barbara,
CA 93102-0869, USA, Fax: +1 805 963 8358,
EMail: tug@tug.org.
The LATEX home page is
http://www.tex.ac.uk/ctan/latex/ and contains
links to other WWW resources for LATEX.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1995, all rights reserved.

–7

LATEX News
Issue 4, December 1995 (LATEX release 1995-12-01)

Welcome to LATEX News 4
An issue of LATEX News will accompany every future
release of LATEX. It will tell you about important
events, such as major bug fixes, newly available
packages, or any other LATEX news. This issue
accompanies the fourth release of LATEX 2ε .

LATEX getting smaller
The last release in June started a trend of LATEX
becoming smaller, we are pleased to announce that thishas continued with this release. In particular theexperimental ‘autoload’ version described in
autoload.txt is much smaller as more parts of LATEX
are autoloaded.

New ‘concurrent’ docstrip
The time taken to ‘unpack’ this release from the
documented sources should be much reduced (roughly
half the time, depending on installation conditions).
This is due to an improved version of the docstrip
program that has been contributed by Marcin Woliński.
This can write up to 16 files at once. The previous
version could only write one file at a time which meantthat it was very slow when producing many small files
from the same source file as the source needed to be
re-read for each file written.

New T1 encoded fontsThis year Jörg Knappen has completed a new release ofthe ‘Cork’ (T1) encoded Computer Modern fonts: thedc fonts release 1.2.
This release of the dc fonts fixes many bugs
(including the missing ?‘ (¿) and !‘ (¡) ligatures) and
improves the fonts in many other ways. It is strongly
recommended that you upgrade as soon as possible if
currently you are using the old dc fonts, release 1.1 or
earlier. The new fonts are available from the CTAN
archives, in tex-archive/fonts/dc.
The names of the font files are different. This does
not affect LATEX documents but does affect the
installation procedure as it assumes that you have the
new fonts, and will write suitable ‘fd’ files for those
fonts. If you have not yet upgraded your dc fonts then,after unpacking the distribution, you must
latex olddc.ins to produce ‘fd’ files for the old dc
fonts. This must be done before the format is made.
Running the test document at ltxcheck.tex the end of

the installation will inform you if the wrong set of ‘fd’
files has been installed.
Note that this change does not affect the standard‘OT1’ Computer Modern fonts that LATEX uses bydefault.

More robust commands
The commands \cite and \sqrt are now robust.
Although most commands with optional arguments
are fragile, as documented, such commands definedusing the second optional argument of \newcommandand its derivatives are now robust.

New Interface to building ‘extension’ classes
The mechanism provided by \DeclareOption,\ProcessOptions and \LoadClass has proved to be a
powerful and expressive means of defining one class interms of another ‘base’ class. However there have beensome requests to simplify the declaration of thecommon case where you want the ‘base’ class to becalled with all the options that were specified to theextension class. This is now provided by the newcommand \LoadClassWithOptions. A similarcommand \RequirePackageWithOptions is provided
for package use. More details of this feature areprovided in clsguide.tex and ltclass.dtx.

More Input Encodings
The experimental inputenc package allows a morenatural style of input of accented and other characters.
Three new input encodings are now supported.
• ansinew the Windows ansi encoding, as used in
Microsoft Windows 3.x.
• cp437de a variant of cp437, which uses ß rather
than β in the appropriate slot.
• next the encoding used on Next computers.

Further information
For more information on TEX and LATEX, get in touchwith your local TEX Users Group, or the international
TEX Users Group, 1850 Union Street, #1637, San
Francisco, CA 94123, USA, Fax: +1 415 982 8559,
EMail: tug@tug.org. The LATEX home page is
http://www.tex.ac.uk/ctan/latex/ and contains
links to other WWW resources for LATEX.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1995, all rights reserved.

–8

LATEX News
Issue 5, June 1996 (LATEX release 1996-06-01)

Welcome to LATEX News 5More input encodings supported

This issue of LATEX News accompanies the fifth releaseof the new standard LATEX, LATEX 2ε .

The inputenc package now supports the IBM
codepage 852 used in Eastern Europe, with theoption [cp852] contributed by Petr Sojka.
Also, the inputenc package now activates most‘control codes’ with ascii values below 32. Currently
none of the encodings in the standard distribution
makes use of these positions.

Extra possibilities for section headings
Most LATEX sectioning commands are defined using\@startsection. For example, the article classdefines:\newcommand\section{\@startsection{section}{1}{0pt}{-3.5ex plus-1ex minus-.2ex}%{2.3ex plus.2ex}{\normalfont\Large\bfseries}}

The last argument specifies the style in which thesection heading is to be typeset.
The new feature added at this release is that at theend of this argument you may specify a command thattakes an argument. This command will be applied tothe section number and heading. For example, one
could use the \MakeUppercase command to produce
uppercase headings. A package or class file could
contain:\renewcommand\section{\@startsection{section}{1}{0pt}{-3.5ex plus-1ex minus-.2ex}%{2.3ex plus.2ex}{\normalfont\Large\MakeUppercase}}to produce section headings using uppercase medium
weight text, rather than the bold text used by article.
Note that, like the font choice, the uppercasing applies
only to the actual heading (including any automaticallygenerated section number), not to the text as it may
appear in the running head or table of contents.

The ‘openany’ option in the ‘book’ class
The openany option allows chapter and similar openings
to occur on left hand pages. Previously this option only
affected \chapter and \backmatter. It now also affects\part, \frontmatter and \mainmatter.

More font (output) encodings
The font encoding name T3 has been allocated to theencoding used in the new 256-character IPA fonts (forthe phonetic alphabet) produced by Rei Fukui. His
package, tipa, gives access to these fonts and should
soon be available. (The encoding named OT3 is the
128-character encoding used in the IPA fonts producedby Washington State University.)

Fixes and improvements
The LATEX kernel has only had minor changes, apartfrom \@startsection mentioned above. However, somesmall fixes have been incorporated removing thefollowing problems:• In tabular and array, previous versions of LATEX‘lost’ the inter-column space from an ‘l’-column,
when that column was completely empty.
• Previously, the use of the \nofiles command
could change the vertical spacing in a document.
A side effect of fixing this is that when \nofiles isused, \label puts a blank line in the log file.
• LATEX often loads fonts ‘on demand’. Previously,
this could happen inside the argument of an accentcommand and this would cause the accent toappear in the wrong place.

Changes to the ‘tools’ packages• The longtable package now uses a modified
algorithm, contributed by David Kastrup, to alignthe ‘chunks’ of a table. It is now unnecessary toedit the document to add \setlongtables before
the final run of LATEX. In certain cases ofoverlapping \multicolumn entries, the newalgorithm will produce better column widths thanthe old (at the price of extra passes through
LATEX).
• The dcolumn package now has the extra possibilityof specifying the number of digits both before andafter the ‘decimal point’. This makes it easy tocentre the column of numbers under a wide
heading.

New copy of the LATEX bug database
http://www.tex.ac.uk/ctan/latex/bugs.html willsoon have links to a copy of the searchable LATEX bugs

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1996, all rights reserved.

–9

database at Mainz (Germany) as well as the original
copy at Sussex (England).

–10

LATEX News
Issue 6, December 1996 (LATEX release 1996-12-01)

Welcome to LATEX News 6
This issue of LATEX News accompanies the sixth releaseof the new standard LATEX, LATEX 2ε .

Mono-case file names
Previously LATEX has used some files with ‘mixed-case’
file names such as T1cmr.fd and T1enc.def.
These file names cause problems on some systems (inparticular they are illegal on the ISO 9660 CDROM
format) and so in this release all file names have been
made lowercase (for example t1cmr.fd and t1enc.def).
This change should not affect any document. Within
LATEX, encodings still have the usual uppercase names
in uses such as \usepackage[T1]{fontenc} and\fontencoding{T1}. LATEX will automatically convert
to the lowercase form while constructing the file name.
LATEX will input the ‘fd’ file under the old name if it
fails to find the file with the new name, so existingcollections of fd files should still work with this newrelease.
The change does affect the configuration files that
may be used to make the LATEX format with initex. For
example, the file fonttext.ltx previously specified\input{T1cmr.fd}. It now has \input{t1cmr.fd}. If
you use a local file fonttext.cfg you will need to makesimilar changes, as \input{T1cmr.fd} will not work as
T1cmr.fd is no longer in the distribution.
The files affected by this change all have names of theform *.fd or *enc.def.

Another input encoding
Thanks to work by Søren Sandmann, the inputenc
package now supports the IBM codepage 865 used in
Scandinavia.

Better user-defined math display environments
Suppose that you want to define an environment for
displaying text that is numbered as an equation. A
straightforward way to do this is as follows:\newenvironment{texteqn}{\begin{equation}\begin{minipage}{0.9\linewidth}}{\end{minipage}\end{equation}}
However, if you have tried this then you will probably
have noticed that it does not work perfectly when usedin the middle of a paragraph because an inter-word
space appears at the beginning of the first line after theenvironment.
There is now an extra command (with a very longname) available that you can use to avoid this problem;
it should be inserted as shown here:\newenvironment{texteqn}{\begin{equation}\begin{minipage}{0.9\linewidth}}{\end{minipage}\end{equation}\ignorespacesafterend}

Docstrip improvements
The docstrip program that is used to unpack the LATEX
sources has undergone further development. The newversion should be able to process all old ‘batchfiles’ but
it allows a simpler syntax in new ‘batchfiles’ (no need todefine \def\batchfile{. . . ).
It also allows ‘target’ directories to be specified whenwriting files. This directory support is disabled bydefault unless activated in a local docstrip.cfg
configuration file. See docstrip.dtx for details.

AMS LATEX update
Since the last LATEX release in June, the American
Mathematical Society have re-issued the ‘AMSLATEX’classes and packages, fixing several reported problems.

Graphics package update
The LATEX color and graphics packages have been
updated slightly, principally to support more dvi
drivers, see the readme file in the graphics distribution.

EC Fonts released
The first release of the Extended Computer Modern
fonts has just been made. (In January 1997.)
This release of LATEX does not default to these ‘ec’
fonts as its T1 encoded fonts. By default it will use the‘dc’ fonts if the T1 encoding is requested.
As noted in install.txt you may run TEX on the
install file ec.ins after unpacking the base distribution
but before making the LATEX format. This will produce
suitable ‘fd’ files making LATEX (including, for the firsttime, the slides class) use the ‘ec’ fonts as the default
T1 encoded font set.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1996, all rights reserved.

–11

LATEX News
Issue 7, June 1997 (LATEX release 1997-06-01)

T1 encoded Computer Modern fonts
As in the last release the base LATEX distribution
contains three different sets of ‘fd’ files for T1 encoded
fonts.
In this release the default installation uses ec.ins
and so installs files suitable for the current ‘EC fonts’
distribution. If you have still not updated to the EC
fonts and are using the earlier test versions, known as
DC then you should unpack newdc.ins (for DC release
1.2 or later) or olddc.ins (for the original releases of
the DC fonts). This should be done after unpacking
unpack.ins but before making the format by running
iniTEX on latex.ltx. There are further details ininstall.txt.

T1 encoded Concrete fonts
The Metafont sources for T1 encoded ‘Concrete’ fonts
have been removed from the mfnss distribution as they
were based on the now obsolete DC fonts release 1.1.
Similarly the cmextra.ins install file in the basedistribution no longer generates fd files for the‘Concrete’ fonts. To use these fonts in either T1 or OT1
encoding it is recommended that you obtain Walter
Schmidt’s ccfonts package and fonts from CTAN
macros/latex/contrib/supported/ccfonts.

Further input encodings
Two more inputenc packages have been added: forlatin5, thanks to H. Turgut Uyar; and for latin3, thanks
to Jörg Knappen.

Normalising spacing after punctuation
The command \normalsfcodes was introduced at thelast patch release. This is normally given the correct
definition automatically and so need not be explicitlyset. It is used to correct a problem, reported by Donald
Arseneau, that punctuation in page headers has always(in all known TEX formats) been potentially incorrect if
the page break happens while a local setting of thespace codes (for instance by the command\frenchspacing) is in effect. A common example ofthis happening in LATEX is in the verbatim
environment.

Accessing Bold Math Symbols

bold symbols to be accessed within a math expression(in contrast to \boldmath which makes whole mathexpressions default to bold fonts). It is more generalthan the existing amsbsy package; however, to ease thetranslation of documents between these two packages,
bm makes \boldsymbol an alias for \bm.
This package was previously made available from the‘contrib’ area of the CTAN archives, and as part of
Y&Y’s LATEX support for the MathTime fonts.

Policy on standard classes
Many of the problem reports we receive concerning thestandard classes are not concerned with bugs but aresuggesting, more or less politely, that the design
decisions embodied in them are ‘not optimal’ andasking us to modify them.
There are several reasons why we have decided not tomake such changes to these files.
• However misguided, the current behaviour isclearly what was intended when these classes were
designed.
• It is not good practice to change such aspects of‘standard classes’ because many people will be
relying on them.
We have therefore decided not to even consider
making such modifications, nor to spend time justifyingthat decision. This does not mean that we do not agree
that there are many deficiencies in the design of theseclasses, but we have many tasks with higher priority
than continually explaining why the standard classes for
LATEX cannot be changed.
We would, of course, welcome the production of
better classes, or of packages that can be used toenhance these classes.

New addresses for TUG
For information about joining the TEX Users Group,
and about lots of other LATEX-related matters, pleasecontact them at their new address:
TEX Users Group, P.O. Box 1239,
Three Rivers, CA 93271-1239, USA
Fax: +1 209 561 4584
E-mail: tug@mail.tug.org
URL: http://www.tug.org/

The tools distribution contains a new package, bm,
which defines a command \bm that allows individual
LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1997, all rights reserved.

–12

LATEX News
Issue 8, December 1997 (LATEX release 1997-12-01)

New supported font encodings

Graphics

Two new font encodings are supported as options to thefontenc package:

The special oztex.def driver file has been removed, andOzTEX support has been merged with dvips, following
advice from Andrew Trevorrow about OzTEX 3.x.
The keyval package has had some internal
improvements: to use LATEX format error messages; andto avoid ‘# doubling’. This latter change means that thecommand key for the graphicx version of\includegraphics should now be used with one #rather than two. For example, command = ‘gunzip #1.
Fortunately this key is almost never used in practice, so
few if any documents should be affected by this change.

OT4 This is a seven-bit encoding designed for Polish.
The LATEX support was developed by Mariusz Olko.
TS1 This is the ‘Text Companion Encoding’; it
contains symbols designed to be used in text, as opposed
to mathematical formulas, and some accents designed
for uppercase letters. It is currently supported by the‘tc’ fonts, which match the T1 encoded ‘ec’ text fonts.
A subset of the glyphs in this encoding is supported byvirtual fonts distributed with the PostScript fontmetrics on the ctan archives. (This is the ‘8c’ encodingin Karl Berry’s fontname scheme.) The textcomp
package provides access to this encoding but here is awarning to current users of that package: some of theinternal names for the characters have changed.

New input encodings
These additions to the inputenc package are decmulti(the DEC Multinational Character Set, contributed by
M. Y. Chartoire) and cp1250 (an MS-Windows
encoding for Central and Eastern Europe, contributedby Marcin Woliński). There is also a cp1252 encodingthat is identical to ansinew.

Tools
The calc package (used in many examples in The LATEXCompanion) has been contributed to this distribution
by Kresten Krab Thorup and Frank Jensen. This isessentially the same as the version that has been
available from the ctan archives for some time, with
one minor change: to use LATEX-style error messages. It
enables the use of arithmetic expressions withinarguments to standard LATEX commands where a length
or a counter value is required. For example:\setcounter {page} { \value{page} * 2 + 1 }\parbox { 3in - ( 2mm + \textwidth / 9 ) }There have also been some improvements to several
other packages in this collection. In particular, bm now
works correctly with constructions such as \bm{f’}involving ’ or other characters which use TEX’s special“\mathcode"8000” feature. Also, multicol sets thelength \columnwidth to an appropriate value; thisenables it to work with classes that support two-column
setting, e.g., the AMS classes.

LATEX3 experimental programming conventions
As announced at the TEX Users Group meeting(Summer 1997), a group of highly experimental
packages will soon be released to allow experienced
TEX programmers to experiment with, and comment
on, a proposed set of syntax conventions and basic
data-types that might form the basis for programminglarge scale projects in TEX. They will be located inthis CTAN directory:
CTAN:macros/latex/packages/expl3
The documentation of this material is as follows:
individual package files provide outline, draft
documentation; there is an article that gives an
overview of the syntax and related concepts; there is areadme.txt file containing a brief description of thecollection.
All aspects of these packages are liable, indeed likely,
to change. They should not be used at this stage foranything that requires a stable system. However, we do
encourage people to experiment with these packages,
and to send comments on them to the LaTeX-L mailinglist. To subscribe to this list, mail to:listserv@urz.uni-heidelberg.de
the following one line message:
subscribe LATEX-L <first-name> <second-name>

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1997, all rights reserved.

–13

LATEX News
Issue 9, June 1998 (LATEX release 1998-06-01)

New math font encodings

Tools distribution

A joint working group of the TEX Users Group and the
LATEX Project is developing a new 8-bit math fontencoding for TEX. It is designed to overcome several
limitations and implementation problems of the oldmath font encodings and to simplify switching between
different sets of math fonts, much as the LATEX fontselection interface has simplified switching between text
fonts.
Since the work on this project relies entirely on
volunteer work, we cannot give a specific release dateyet. However, a prototype implementation alreadyexists. This contains several sets of virtual fonts, some
LATEX packages and a kernel module; we hope to
integrate it into the main LATEX distribution for the
next release.
Documents using only standard LATEX commands formath symbols should not be affected by switching to
the new math font encodings However, documents,
classes or packages making specific assumptions about
the encoding of math symbol fonts are likely to break.
Further information about the Math Font Groupmay be found on the World Wide Web at
http://www.tug.org/twg/mfg/.

The multicol package now supports the production ofmultiple columns without balancing the last page. To
get this effect use the multicols* environment.
The layout package was partly recoded by Hideo
Umeki to display page layout effects in a better way.
As suggested by Donald Arseneau, the calc package
was extended to support the new commands\widthof{text}, \heightof{text}, and \depthof{text}
within a calc-expression. At the same time we modified
a few kernel commands so that calc-expressions can now
be used in various useful places such as the dimension
arguments to the tabular environment and the \rulecommand. For many other standard LATEX commands
this was already possible.

A new math accent
A new math accent, \mathring, has been added. Thisis a math mode version of the ring accent (˚) which isavailable in text mode with the command \r.

Extended \DeclareMathDelimiter
The command \DeclareMathDelimiter has been
extended. Normally this command takes six arguments.
Previously, when being used to declare a character(such as [) as a delimiter, a variant form was used with
only five arguments. The argument specifying thedefault ‘math class’ was omitted. Now the fullsix-argument form may be used in this case. The extra
information is used to implicitly declare the character
via \DeclareMathSymbol for use when the symbol is
not used with \left or \right.
The old five-argument form is detected and will work
as before.

Support for Cyrillic encodings
We are very pleased that, after a lengthy period ofdevelopment, a set of fonts, encodings and support files
for using LATEX with Cyrillic characters will soon beavailable.
Test versions of the ‘LH’ fonts for these Cyrillic
encodings, based on the Computer Modern design, areavailable from CTAN archives in the directory
fonts/cyrillic/lh-test. The LATEX support files (byWerner Lemberg and Vladimir Volovich) are alsoavailable from CTAN archives inmacros/latex/contrib/supported/t2

Default docstrip header
Many LATEX users now distribute packages indocumented source form using the docstrip system.
Docstrip allows a header to be placed on generated
package files, suitable for giving copyright information,or distribution conditions.
We have changed the default version of this header sothat it allows stripped files to be distributed inready-to-run installations such as the TEXLive CD. If
you use the default header for distributing your files you
should check that the new copyright text is acceptable
to you. The file docstrip.dtx explains how to produce
your own header if you wish to do so.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1998, all rights reserved.

–14

LATEX News
Issue 10, December 1998 (LATEX release 1998-12-01)

Five years of LATEX 2εSince this is the 10th edition of LATEX News, the (nolonger) New Standard LATEX must have hit the streets
almost this long ago. In fact it was only thebeta-version that some people got just in time for
Christmas 1993, and since then there has been a lot oftidying-up and smoothing of rough edges (not tomention a few bug fixes!).
Maybe it is time for something more radicallydifferent to emerge and be hungrily adopted by theworld; but don’t panic, we shall be maintaining what
you have now for a long time yet. Amongst the morepolite things that have been written about our efforts,
we found that this quote (somewhat censored to protect
the guilty) well reflects some of our feelings about
working on LATEX over the years: the mere existence of
LATEX 2ε is a great miracle.

Restructuring the LATEX distribution
Since the (once) ‘new’ standard LATEX has reached sucha venerable age, we are reviewing the way in which thesystem is presented to the world.
An early intention is to define, given the wide varietyof good packages now available, what now constitutes a
useful installation of LATEX. We also hope that such a
definition will help document portability if it leads to afuture in which a LATEX class designer can reasonably
assume that a known list of facilities will be there for allusers (so that each class need not supply them).
As a first small step towards this definition, we shall
replace the latex/packages subdirectory on CTAN.
This directory was a curious mixture of the important,such as the LATEX tools, that any self-respecting LATEX
installation ought to have, and the esoteric orexperimental.
The esoterica from packages will be moved to new
locations, as follows:
expl3 to latex/exptl/project
mfnfss to latex/contrib/supported/mfnfss
The subdirectory that replaces packages will be called
latex/required; all the other sub-directories of
packages will be moved there.

LATEX Project on the Internet
A new latex-project.org domain has been registered.
The web site is not yet fully functional but the old
LATEX pages from CTAN are available at
http://www.latex-project.org/ and the LATEX bug
reporting address has been changed tolatex-bugs@latex-project.org.

Restructuring the LATEX package licenses
Several people have requested an easy mechanism forthe distribution of LATEX packages and other software“under the same conditions as LATEX”. The oldlegal.txt file was unsuitable as a general licence as it
referred to specific LATEX authors, and to specific files.
Therefore, in this release legal.txt contains just the
copyright notice and a reference to the new LATEX
Project Public License (LPPL) for the distribution andmodification conditions. The tools, graphics, and mfnfss
packages also now refer to this license in theirdistribution notices.

Support for Cyrillic encodings
Basic Cyrillic support, as announced in LATEX News 9,
is now finally an official part of LATEX. It includes
support for the following standard Cyrillic fontencodings (this list may grow): T2A T2B T2C X2.
It also includes various Cyrillic input encodings (20 intotal, including commonly used variants and Mongolian
Cyrillic encodings). This provides platform independentand sophisticated basic support for high-quality
typesetting in various Cyrillic-based languages.
For further information see the file cyrguide.tex.

Tools distribution
The varioref package has been extended to support
textual page references to a range of objects: e.g., if
eq-first and eq-last are the label names for the firstand last equation in a sequence, then you can now write
see~\vrefrange{eq-first}{eq-last}This results in different text depending on whether bothlabels fall on the same page.
Some additional user commands, as well asbuilding-blocks for writing private extensions, aredescribed in the accompanying documentation.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1998, all rights reserved.

–15

LATEX News
Issue 11, June 1999 (LATEX release 1999-06-01)

Back in sync
The last release of LATEX was delayed even longer thanyou have come to expect. We hope that it proved worth
waiting for. It required a major integration of the codefrom several people and, independently, theintroduction of the LPPL (see LATEX News 10) plus
several related changes to our internal systems. It
therefore seemed sensible to wait until everything wascomplete rather than do things in too much hurry.
This seem to have been a successful strategy as therecent patch release was related to an isolated changethat was done many months previously. If this release
does not appear a lot closer to its nominal date then
. . . well, you will not be reading this sentence!

Yearly release cycles
With the year 2000 rapidly approaching, we intend toswitch to a release frequency of just one per year (withpatches if necessary) for the core of LATEX 2ε . Thesedays the system is sufficiently stable that the original
update policy is costing everybody more time than is
now warranted.

LPPL update
Thanks to extensive and valuable input from Matt
Swift (swift@alum.mit.edu) we now have a clearer andmore detailed form of the LATEX Project Public Licence.
This release contains both the original version (inlppl-1-0.txt) and the updated version, LPPL 1.1.

The future of SliTEX
We still get a very small trickle of reports about thispart of the system (if you are no longer able to recall
LATEX 2.09 then you will know it as the slides class).
We have not classified them (in our minds at least) as
bugs since we have always known that there are many
problems with this class. It is clear to us that the only
sensible action would be to redesign the systemcompletely; in particular, to remove much of its
complexity whose purpose is to support 10-year-old
overlay technology. However, this would take a lot too
much time and would be completely out of proportion
to its current usage.
We are therefore planning to make the slides classunsupported in the sense that any problem related tothe use of invisible fonts is considered to be a feature(The LATEX 2ε manual by Leslie Lamport doesn’t evendescribe this part of the class any more). Of course, if it
still has its enthusiasts then we are happy to cede it totheir loving care (somewhat like a preserved steam
locomotive, in some parts of the world).

Fontenc package peculiarities
The \usepackage interface normally ensures that apackage is loaded only once. The fontenc package has
become an exception to this rule: it can be loaded
several times using different options, e.g., allowing theuser to add a font encoding in the preamble. This
comes at a price for package writers: the low-levelcommands (see ltclass.dtx) used to check if apackage was loaded, and with which options, do notwork for the fontenc package.

New math font encodings
As we announced in LATEX News 9, a joint working
group of the TEX Users Group and the LATEX Project
has developed a new 8-bit math font encoding for TEX.
The reason why this work is not yet released is becauseof other exciting developments in the world of mathfonts and math characters. It is obviously wise toensure that the encoding work is fully integrated withthe available fonts.
Those interested are reminded that further
information about the Math Font Group may be foundon the World Wide Web at:
http://www.tug.org/twg/mfg/.

Tools distribution
The multicol package has now got a small but usefulextension which allows you to force a column breakwhere this is really necessary. This is done with thecommand \columnbreak, which can be used like
\pagebreak (e.g., within paragraphs) except that it
cannot have an optional argument and thus it always
forces a new column.

Coming soon
Major work on a new class file structure to support
flexible designs is well under way; some of this work will
be presented at the TUG’99 conference in Vancouver,
Canada. With a bit of luck much of this work could beready for integration into the next release—so watch
this space!

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1999, all rights reserved.

–16

LATEX News
Issue 12, December 1999 (LATEX release 1999-12-01)

LPPL update
Since the release of the LATEX Project Public Licenceversion 1.1, we have received a small number of queries
which resulted in some minor changes to improve thewording or explain the intentions better. As aconsequence this release now contains LPPL 1.2 in thefile lppl.txt and the previous versions as
lppl-1-0.txt and lppl-1-1.txt.

fixltx2e package
This package provides fixes to LATEX 2ε which aredesirable but cannot be integrated into the LATEX 2εkernel directly as they would produce a version
incompatible to earlier releases (either in formatting orfunctionality).
By having these fixes in the form of a package, users
can benefit from them without the danger that their
documents will fail, or produce unexpected results, atother sites; this works because a document will containa clear indication (the \usepackage line, preferablywith a required date) that at least some of these fixes
are required to format it.

Outcome of TUG ’99 (Vancouver)
The slides from the tug’99 presentation we gave on a
new interface for LATEX class designers are available
from the LATEX Project website; look for the filetug99.pdf at:
http://www.latex-project.org/talks/
Please note that this document was intended only to
be informal “speaker’s notes” for our own use. We
decided to make them available (the speaker’s notes aswell as the slides that were presented) because several
people requested copies after the talk. However, they
are not in a polished copy-edited form and are notintended for publication.
Prototype implementations of parts of this interface
are now available from:xparse Prototype implementation of the interface fordeclaring document command syntax. See the .dtx files
for documentation.
template Prototype implementation of the templateinterface (needs parts of xparse).
The file template.dtx in that directory has a large
section of documentation at the front describing thecommands in the interface and giving a ‘worked
example’ building up some templates for caption
formatting.
xcontents Interface description for table of contents
data (no code yet). Coding examples have beenthoroughly discussed on the latex-l list.
xfootnote Working examples for generating footnotes,
etc. Needs xparse and template.
All examples are organised in subdirectories andadditionally available as gzip tar files.
Please remember that this material is intended only
for experimentation and comments; thus any aspect ofit, e.g., the user interface or the functionality, maychange and, in fact, is very likely to change. For thisreason it is explicitly forbidden to place this material on
cd-rom distributions or public servers.
These concepts, as well as their implementation, areunder discussion on the list LATEX-L. You can join thislist, which is intended solely for discussing ideas andconcepts for future versions of LATEX, by sending mail tolistserv@URZ.UNI-HEIDELBERG.DE containing the line
SUBSCRIBE LATEX-L Your Name
This list is archived and, after subscription, you canretrieve older posts to it by sending mail to the above
address, containing a command such as:
GET LATEX-L LOGyymm
where yy=Year and mm=Month, e.g.
GET LATEX-L LOG9910
for all messages sent in October 1999.

http://www.latex-project.org/code/
experimental/
We are continuing to add new material at thislocation so as to stimulate further discussion of theunderlying concepts. As of December 1, 1999 thefollowing parts can be downloaded.
LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 1999, all rights reserved.

–17

LATEX News
Issue 13, June 2000 (LATEX release 2000-06-01)

Yearly release cycle
We announced in LATEX News 11 that we intended toswitch to a 12-monthly release schedule. With thepresent (June 2000) release, this switch is being made:thus the next release of LATEX will be dated June 2001.
We shall of course continue, as in the past, to releasepatches as needed to fix significant bugs.

PSNFSS: Quote of the Month
You should say in the LATEX News that Walter
Schmidt has taken over PSNFSS from me. It
gives me a certain pleasure to be able to draw
a line under that part of my life. . .
Sebastian Rahtz
The PSNFSS material, which supports the useof common PostScript fonts with LATEX, has beenthoroughly updated. Most noticeably, the mathpple
package, which used to be distributed separately, is now
part of the basic PSNFSS bundle; this package provides
mathematical typesetting with the Palatino typeface
family. In addition, numerous bugs and flaws have been
fixed and the distribution has been ‘cleaned up’. The filechanges.txt contains a detailed list of these changes.
The documentation (in psnfss2e.pdf) has been
completely rewritten to provide a comprehensive
introduction to the use of PostScript fonts.
Notice that the new PSNFSS needs updated files for
font metrics, virtual fonts and font definitions. If you
received the new version (8.1) as part of a complete TEX
system then these new font files should also have been
installed. However, if you intend to install or update
PSNFSS yourself, please read the instructions in thefile 00readme.txt of the new PSNFSS distribution.
Support for commercial PostScript fonts, such as
Lucida Bright, has been removed from the basic
distribution; it is now available from CTAN:
http://mirror.ctan.org/macros/latex/
contrib/supported/psnfssx.

New AMS-LAT X
E

Version 2.0 of AMS-LATEX was released on
December 1, 1999. It can be obtained
via ftp://ftp.ams.org/pub/tex/ or
http://www.ams.org/tex/amslatex.html,
as well from CTAN:
http://mirror.ctan.org/macros/latex/
required/amslatex.
This release consists chiefly of bug fixes andconsolidation of the existing features. The division of

AMS-LATEX into two main parts (the math packages;
the AMS document classes) has been made more
pronounced. The files diffs-m.txt, diffs-c.txt,
amsmath.faq, and amsclass.faq describe thechanges and address some common questions.
The primary documentation files remain
amsldoc.tex, for the amsmath package, andinstr-l.tex, for the AMS document classes.
The documentation for the amsthm package,
however, has been moved from amsldoc.tex
to a separate document amsthdoc.tex.

New input encoding latin4
The package inputenc has, thanks to Hana Skoumalová,been extended to cover the latin4 input encoding; thiscovers Baltic and Scandinavian languages as well asGreenland Inuit and Lappish.

New experimental code
In LATEX News 12 we announced some ongoing work
towards a ‘Designer Interface for LATEX’ and we
presented some early results thereof. Since then, at
Gutenberg 2000 in Toulouse and TUG 2000 in Oxford,
we described a new output routine and an improved
method of handling vertical mode material between
paragraphs. In combination these support higher
quality automated 1 page-breaking and page make-up
for complex pages—the best yet achieved with TEX!
A paper describing the new output routine is at
http://www.latex-project.org/papers/xo-pfloat.pdf
All code examples and documentation are available at
http://www.latex-project.org/code/experimental/.
This directory has been extended to containgalley Prototype implementation of the interface
for manipulating vertical material in galleys.
xinitials Prototype implementation of the interface
for paragraph initials (needs the galley package.
xtheorem Contributed example using the template
package to provide a designer interface for theorem
environments.
xoutput A prototype implementation of the new
output routine as described in the xo-pfloat.pdf
paper. Expected availability: at or shortly after
the TUG 2000 conference.
1 The stress here is on automated!

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2000, all rights reserved.

–18

LATEX News
Issue 14, June 2001 (LATEX release 2001-06-01)

Future releases
We are currently exploring how to best support the verylarge community of individuals, organisations andenterprises that depend on the robustness andavailability of the current standard LATEX distribution.
The results of this may lead to some changes in theregular release schedule and the handling of bug reports
during the next year.

It offers the command \traceon, which is similar to\tracingall but suppresses uninteresting stuff such as
font loading by NFSS (which can go on for pages if you
are unlucky). It also offers \traceoff to . . . guess
what! Full details are in the documented source file,
trace.dtx.
In the base ifthen package we have added theuppercase synonyms \NOT \AND and \OR.

New release of Babel (required)

New experimental code

Earlier this year a new release of Babel (3.7) became
available. You can read about its new features in
http://www.ctan.org/tex-archive/macros/
latex/required/babel/announce.txt
One of the bugs that got fixed in this release deals
with how labels are handled by LATEX. Because thispart of the kernel is modified by babel, the relevantchanges need to be coordinated. Therefore to use Babelwith this release of LATEX you will need to update yourversion of babel to at least 3.7.

In LATEX News 12 we announced some ongoing work
towards a ‘Designer Interface for LATEX’ and we
presented some early results thereof. Since then, at
Gutenberg 2000 in Toulouse and TUG 2000 in Oxford,
we described a new output routine and an improved
method of handling vertical mode material between
paragraphs. In combination these support higher
quality automated 1 page-breaking and page make-up
for complex pages—the best yet achieved with TEX!
More recently we have added material to handle thecomplex front matter requirements of journal articles;
this was presented at Gutenberg 2001 in Metz.
A paper describing the new output routine is at

New input encoding latin9
The package inputenc has, thanks to Karsten Tinnefeld,
been extended to cover the latin9 input encoding. The
ISO-Latin 9 encoding is a useful modern replacement for
ISO-Latin 1 that contains a few characters needed forFrench and Finnish. Of wider interest, it also contains
the euro currency sign; this could be the killer argument
for many 8-bit texts to use Latin-9 in the future.
According to a Linux manpage, ISO Latin-9 supports
Albanian, Basque, Breton, Catalan, Danish, Dutch,
English, Estonian, Faroese, Finnish, French, Frisian,
Galician, German, Greenlandic, Icelandic, Irish Gaelic,
Italian, Latin, Luxembourgish, Norwegian, Portuguese,
Rhaeto-Romanic, Scottish Gaelic, Spanish and Swedish.
The characters added in latin9 are (in LATEX notation):\texteuro

\v S

\v s

\v Z

\v z

\OE

\oe

\" Y

They displace the following characters from latin1:\textcurrency \textbrokenbar\textonequarter \textonehalf

\"{}
\’{}
\c{}
\textthreequarters

http://www.latex-project.org/papers/xo-pfloat.pdf

All code examples and documentation are available at
http://www.latex-project.org/code/experimental

This directory has been extended to contain thefollowing.
galley Prototype implementation of the interface
for manipulating vertical material in galleys.
xinitials Prototype implementation of the interface
for paragraph initials (needs the galley package).
xtheorem Contributed example using the template
package to provide a designer interface for theorem
environments.
xor A prototype implementation of the new output
routine as described in the xo-pfloat.pdf paper.
xfrontm A prototype version of the new font matterinterface.

New tools
The new package trace provides many commands tocontrol LATEX’s tracing and debugging output, including
the excellent new information available with ε-TEX suchas the extremely useful tracing of local assignments.
You will find it in the tools distribution.

1 The stress here is on automated!

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2001, all rights reserved.

–19

LATEX News
Issue 15, December 2003 (LATEX release 2003-12-01)

Anniversary release

Fixing font sizes

Yes, it’s now 10 years since the first release in this series
and, for Knuthists, this release also contains Issue 16 !
Meanwhile this Issue 15 describes the major new
features in the current release whilst Issue 16 looks
a little way into the future of LATEX.

The new fix-cm package, by Walter Schmidt, changes
the CM font definition (.fd) files so that similar design
sizes are used in both the OT1 and T1 encodings.

LPPL – new version
Most importantly, there is now a new version, 1.3, of
the LATEX Project Public Licence. Many of you willbe thrilled to know that, following the exchange of over
1600 e-mail messages dissecting various aspects of its
philosophy such as ‘how many angels can appear in thename of a file before it becomes non-free’, this version
is now officially a DFSG (Debian Free Software
Guidelines) approved license. The discussions start at
http://lists.debian.org/debian-legal/2002/
debian-legal-200207/threads.html with hightraffic throughout August to October 2002
and further heated discussions starting in
April 2003 and concluding around June at
http://lists.debian.org/debian-legal/2003/
debian-legal-200306/msg00206.html.
The important features of the new version are usefulclarifications in the wording, and revised procedures
for making a change to the Current Maintainer of a
package. Special thanks to all those people from
Debian Legal who worked constructively with uson this onerous task, especially but not exclusively
Jeff Licquia and Branden Robinson.

Small updates to varioref
The English has been corrected in \reftextbefore (anincompatible change). There are other extensions such
as \labelformat, \Ref, \Vref and \vpagerefnum.
Some Dutch text has also been changed and two
new options added: slovak and slovene.

New and more robust commands
Many of the math mode commands for compound
symbols have been made robust and a new robustcommand has been added: \nobreakdashes. This lastis a low-level command, borrowed from the amsmathpackage, for use only before hyphens or dashes. It
prevents the line break that is normally allowed
after the following sequence of dashes.

Font encodings
A number of options have been added to the textcomp
package, enabling only available glyphs to be used.
Also, the ‘NFSS font families’ are now divided into fivedifferent groups according to the subset of glyphs eachprovides from the full collection of symbols in the TS1
encoding. Given sufficient information about a fontfamily textcomp will use this in order to limit thetypesetting to those glyphs that are available.
Use of this mechanism has also enhanced\oldstylenums to use the current font if possible.

Displaying font tables
With the nfssfont package you can now specify the font
to display by giving its ‘NFSS classification’, rather
than needing to know its external font file’s name. It isalso now possible to generate large collections of font
tables in batch mode by providing a suitable input file.

New input encodings
The inputenc package has been extended as follows:
macce input encoding (Apple Central European),thanks to Radek Tryc and Marcin Wolinski; cp1257
for Baltic languages; latin10, thanks to Ionel Ciobîcă.
The euro symbol has by now been added to several
encodings: ansinew, cp1250 and cp1252 (which also
has another addition), whilst cp858 adds it to cp850.

Unicode input
Partial, experimental support for text files that use theUnicode encoding form UTF-8 is now provided by the
option utf8 for the inputenc package.
The only Unicode text file characters supported by
the current version are those based on the mostcommon inputs for glyphs from the small collectionof standard LATEX Latin encodings.

And finally . . . pict2e
The old, non-functional version of this package has been
removed as there is now a fully working version from
Hubert Gäßlein and Rolf Niepraschk. It is described in
The LATEX Manual.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2003, all rights reserved.

–20

LATEX News
Issue 16, December 2003 (LATEX release 2003-12-01)

Anniversary news

LPPL certification

This anniversary Issue 16 takes a brief look into the
future work of the LATEX Project Team, both short andlonger range. Please let us know if you want to get
involved with us in any of this work (see below).
An overview of the 10th Anniversary Release, dated
2003/12/01, is can be found in Issue 15.

There are still some outstanding diplomatic tasks
around the LATEX Project Public Licence: these include
e.g., getting it ‘OSF certified’ and ensuring that it gains
more support and wider use, even in the FSF world
where it has long been tolerated.

TLC2: The LAT X Companion – 2nd edition!

We expect that within the next two years, releases of
LATEX will change modestly in order to run best underan extended TEX engine that contains the ε-TEX
primitives, e.g., ε-TEX or pdfTEX. The details of thispossible upgrade need further work so we are notmaking a definite announcement yet.
Although the current release does not require ε-TEX
features, we certainly recommend using an extended
TEX, especially if you need to debug macros.

E

Since you are reading this newsletter, there is a goodchance that you, or a friend, has already bought thisencyclopedic volume: the incomparable Second
Edition of this work that is every LATEXie’s
ultimate lucky charm.
If by some chance you have not yet purchased yourown copy then get into training, get shopping, and get
flexing your muscles (both physical—it’s 1100+ pages,
and intellectual) by using it to discover masses ofinvaluable ‘insider information’ about:• the latest release of Standard LATEX;• over 200 extension packages;• plus related software and systems.
For more information on this all new (??. . . OK,
not all, but over 90%!!), all accurate (we hope!)
10th Anniversary Edition, check out
http://www.awprofessional.com/titles/0201362996.

Future maintenance
We are currently exploring how best to support the verylarge and rapidly growing community of individuals,organisations and enterprises that depend on therobustness and availability of the current standard
LATEX distribution. Although we remain firmly
resolved not to make changes in the base distribution(the kernel) of Standard LATEX, there is still much thatneeds doing to maintain its reliability and utility and tokeep up the necessary level of communication with users
and supporters. Also, as with all advanced softwaresystems, bugs are still turning up occasionally so somefixes are still essential.
One major impediment to providing adequate service
levels in this area is, of course, the difficulties inherent
in obtaining the time and commitment of skilled
minds—hence the appeal above to anyone interested ingetting involved.

Use of ε-TEX/pdfTEX

End of ‘autoload’ support
As computer systems generally grow in capacity,requirements change and so we believe that the
autoload variant of LATEX is no longer required. Thus,
although the code remains it is no longer supported.
We hope this does not cause any problems.

New models, new code
In the period 1999–2001 we published many results of
our work over the previous decade on the developmentof new concepts and models for automated typesetting
based on TEX as the underlying platform. These can befound at http://www.latex-project.org/papers/ andhttp://www.latex-project.org/code/experimental/.
Since then a very large proportion of The Team’s
efforts have been diverted to provide the core author
team for TLC2, which provides over 1000 pages ofcarefully researched and tested documentation of many
aspects of the vast world of LATEX related software thatwas developed over that same time period and that
continues to grow and improve prodigiously.
Completion of that task . . . until TLC3!! . . . presents
the possibility of getting back to this more exciting
development work, or even to more radical work on
non-TEX-based models and implementations.
Of course, any such ideas are predicated on ourability to organise (with you, we hope) an efficient
but responsive maintenance and support system
for Standard LATEX.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2003, all rights reserved.

–21

LATEX News
Issue 17, December 2005 (LATEX release 2005-12-01)

Project licence news

Updates of required packages

The LATEX Project Public License has been updated
slightly so that it is now version 1.3c. In the warranty
section the phrase “unless required by applicable law”
has been reinstated, having got lost at some point.
Also, it now contains three clarifications: ofthe difference between “maintained” and“author-maintained”; of the term “Base Interpreter”;
and when clause 6b and 6d shall not apply.
Following requests, we now also provide the text ofthe licence as a LATEX document (in the file lppl.tex).
This file can be processed either as a stand-alone
document or it can be included (without any
modification) into another LATEX document, e.g., as anappendix, using \input or \include.

Several of the packages in the tools bundle have been
updated for this release.
The xspace package has some new features. One is aninterface for adding and removing the exceptions it
knows about and another is that it works with active
characters. These remove problems of incompatibility
with the babel system.
In LATEX News 16 we announced that some packages
might begin to take advantage of ε-TEX extensions on
systems where these are available: and the latest
version of xspace does just that. Note also that fixltx2e
will make use of the facilities in ε-TEX whenever theseare present (see below).
The calc package has also been given an update witha few extra commands. The commands \maxof and\minof, each with two brace-delimited arguments,
provide the usual numeric max and min operations. The
commands \settototalheight and \totalheightof
work like \settoheight and \heightof. There are also
some internal improvements to make calc work withsome more primitive TEX constructs, such as \ifcase.
The varioref package has acquired a few more default
strings but there are still a number of languages forwhich good strings are still missing.
The showkeys package has also been updated slightly
to work with more recent developments in varioref.
Also, it now provides an easy way to define the lookof the printed labels with the command\showkeyslabelformat.

New guide on font encodings
Way back in 1995 work was started on a guide to
document the officially allocated LATEX font encoding
names. However, for one reason or another this guide(named LATEX font encodings) was, until now, notadded to the distribution. It describes the major 7-bit
and 8-bit font encodings used in the LATEX world andexplains the restrictions required of conforming text
font encodings. It also lists all the ‘encoding specificcommands’ (the LICR or LATEX Internal Character
Representation) for characters supported by theencodings OT1 and T1.
When the file encguide.tex is processed by LATEX, it
will attempt to typeset an encoding table for each
encoding it describes. For this to be possible, LATEX
must be able to find .tfm files for a representative
example font for each encoding. If LATEX cannot findsuch a file then a warning is issued and thecorresponding table is omitted.

Robust commands in math
The font changing commands in text-mode have been
robust commands for years, but the same has not beentrue for the math versions such as \mathbf. While themath-mode commands worked correctly in section
heads, they could cause problems in other places suchas index entries. With this release, these math-mode
commands are now robust in the same way as theirtext-mode counterparts.

Work on LATEX fixes
The package known as fixltx2e has three new additions.
A new command \textsubscript has been added as acomplement to the command \textsuperscript in the
kernel. Secondly, a new form of \DeclareMathSizes
that allows all of its arguments to have a dimension
suffix. This means you can now use expressions such as\DeclareMathSizes{9.5dd}{9.5dd}{7.4dd}{6.6dd}.
The third new addition is the robust command\TextOrMath which takes two arguments and executes
one of them when typesetting in text or math mode
respectively. This command also takes advantage of
ε-TEX extensions if available; more specifically, whenthe ε-TEX extensions are available, it does not destroy
kerning between previous letters and the text to be

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2005, all rights reserved.

–22

typeset. The command is also used internally in fixltx2e
to resolve a problem with \fnsymbol.
Also, further work has been done on reimplementing
the command \addpenalty, which is used internally inseveral places: we hope it is an improvement!

The graphics bundle
The graphics bundle now supports the dvipdfmx
post-processor and Jonathan Kew’s XETEX program.
By support we mean that the graphics packages
recognize the new options xetex and dvipdfmx but we
do not distribute the respective driver files.
This leads elegantly to a description of the new policy
concerning such driver files in the graphics bundle. Most
driver files for our graphics packages are maintained by
the developers of the associated post-processor or TEX
programs. The teams developing these packages areworking very hard: their rapid development offers astark contrast to the current schedule of LATEX releases.
It is therefore no longer practical for the LATEX Team tobe responsible for distributing the latest versions ofthese driver files.
Therefore the installation files for graphics have been
split: there is now graphics.ins to install the package
files and graphics-drivers.ins for the driver files(located in drivers.dtx). There is no need to install
all those provided in the file drivers.dtx.
Please also note that, as requested by the maintainers
of PStricks, we have removed the package pstcol ascurrent versions of PSTricks make it obsolete.

Future development
The title of this section is a little misleading as it
actually describes current development. In 1998 theexpl3 bundle of packages was put on CTAN todemonstrate a possible LATEX3 programming
environment. These packages have been lying dormant
for some time while the LATEX Project Team werepreoccupied by other things such as developing theexperimental packages xor, template, etc., (and also
writing that indispensable and encyclopaedic volume,
The LATEX Companion – 2nd edition).
In October 2004 work on this code base was resumed
with the goal of some day turning it into a kernel for
LATEX3. This work can now also make full use of thewidely accepted ε-TEX extensions. Currently two areas
are central to this work.
• Extending the kernel code of LATEX3.
• Converting the experimental packages such as xor,
template to use the new syntax internally.
Beware! Development of expl3 is happening so fastthat the descriptions above might be out of date when
you read this! If you wish to see what’s going on then
go to http://www.latex-project.org/code.html
where you can download fully working code (we hope!).

–23

LATEX News
Issue 18, December 2007 (LATEX release 2007-12-01)

This news never existed.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2007, all rights reserved.

–24

LATEX News
Issue 19, September 2009 (LATEX release 2009-09-24)

New LATEX release

BabelThis issue of LATEX News marks the first release of a
new version of LATEX 2ε since the publication of The
LATEX Companion in 2005–2006.
Just in time for TEX Live 2009, this version is amaintenance release and introduces no new features. A
number of small changes have been made to correct
minor bugs in the kernel, slightly extend the Unicode
support, and improve various aspects of some of thetools packages.

One area of the LATEX 2ε code base that is still receiving
feedback to be incorporated into the main distribution
is the Babel system for multilingual typesetting. While
the Babel sources have already been added to the svn
repository the integration of the test system for Babel isstill outstanding.

New code repository
Since the last LATEX release, the entire code base has
been moved to a public svn repository1 and the entire
build architecture re-written. In fact, it has only beenpossible for us to consider a new LATEX release sinceearlier this year when the test suite was finally set up
with the new system. In the process, a bug in the LATEX
picture fonts distributed with TEX Live was discovered,proving that the tests are working and are still very
valuable.
Now that we can easily generate new packaged
versions of the LATEX 2ε distribution, we expect to beable to roll out bug fixes in a much more timely mannerthan over the last few years. New versions should be
distributed yearly with TEX Live. Having said this, themaintenance of the LATEX 2ε kernel is slowing down as
the bugs become fewer and more subtle. Rememberthat we cannot change any of the underlyingarchitecture of the kernel or any design decisions of thestandard classes because we must preserve backwards
compatibility with legacy documents at all costs.
Even new features cannot be added, because any new
documents using them will not compile in systems (suchas journal production engines) that are generally not
updated once they’ve been proven to work as necessary.
None of this is to say that we consider LATEX 2ε to be
any less relevant for document production than in years
past: a stable system is a useful one. Moreover, thepackage system continues to provide a flourishing andstable means for the development of a wide range ofextensions.

The future
While work on LATEX 2ε tends to maintenance overactive development, the LATEX3 project is seeing newlife. Our goals here are to provide a transition from the
LATEX 2ε document processing model to one with amore flexible foundation. Work is continuing in theexpl3 programming language and the xpackages for
document design. Future announcements about LATEX3
will be available via the LATEX Project website and in
TUGboat.

1 http://www.latex-project.org/svnroot/latex2e-public/

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2009, all rights reserved.

–25

LATEX News
Issue 20, June 2011 (LATEX release 2011-06-27)

Scheduled LATEX bug-fix release
This issue of LATEX News marks the first bug-fix releaseof LATEX 2ε since shifting to a new build system in 2009.
Provided sufficient changes are made each year, we
expect to repeat such releases once per year to stay insync with TEX Live. Due to the excitement of TEX’s
25 -th birthday last year, we missed our window ofopportunity to do so for 2010. This situation has been
rectified this year!

Continued development
The LATEX 2ε program is no longer being actively
developed, as any non-negligible changes now could
have dramatic backwards compatibility issues with old
documents. Similarly, new features cannot be added to
the kernel since any new documents written now would
then be incompatible with legacy versions of LATEX.
The situation on the package level is quite different
though. While most of us have stopped developing
packages for LATEX 2ε there are many contributing
developers that continue to enrich LATEX 2ε byproviding or extending add-on packages with new or
better functionality.
However, the LATEX team certainly recognises that
there are improvements to be made to the kernel code;over the last few years we have been working on
building, expanding, and solidifying the expl3
programming layer for future LATEX development. We
are using expl3 to build new interfaces for package
development and tools for document design. Progress
here is continuing.

Release notes
In addition to a few small documentation fixes, thefollowing changes have been made to the LATEX 2ε code;in accordance with the philosophy of minimising
forwards and backwards compatibility problems, mostof these will not be noticeable to the regular LATEX user.
Font subsets covered by Latin Modern and TEX
Gyre The Latin Modern and TEX Gyre fonts are amodern suite of families based on the well-known
Computer Modern and ‘PostScript 16’ families withmany additional characters for high-quality multilingualtypesetting.1
1 See their respective TUGboat articles for more information:
http://www.tug.org/TUGboat/tb24-1/jackowski.pdf

Information about their symbol coverage in the TS1
encoding is now included in textcomp’s default fontdefinitions.
Redefinition of \enddocument Inside the definitionof \end{document} the .aux file is read back in toresolve cross-references and build the table of contents
etc. From 2.09 days this was done using \input without
any surrounding braces which could lead to some issues
in boundary cases, especially if \input was redefined bysome package. It was therefore changed to use
LATEX 2ε ’s internal name for this function. As a result,packages that modify \enddocument other than throughthe officially provided hooks may need to get updated.
Small improvement with split footnotes in
ftnright If in the first column there is more than a fullcolumn worth of footnote material the material will be
split resulting in footnotes out of order. This issue is
now at least detected and generates an error but thealgorithm used by the package is unable to gracefully
handle it in an automated fashion (some alternatives forresolving the problem if it happens are given in the
package documentation).
Improvement in xspace and font-switching The
xspace package provides the command \xspace whichattempts to be clever about inserting spaces
automatically after user-defined control sequences. An
important bug fix has been made to this command tocorrect its behaviour when used in conjunction with
font-switching commands such as \emph and \textbf.
Previously, writing\newcommand\foo{foo\xspace}... \emph{\foo} bar baz... \emph{\foo}, bar baz
would result in an extraneous space being inserted after‘foo’ in both cases; this has now been corrected.
RTL in multicol The 1.7 release of multicol adds
support for languages that are typeset right-to-left. For
those languages the order of the columns on the pagealso needs to be reversed—something that wasn’t
possible in earlier releases.
http://www.tug.org/TUGboat/tb27-2/tb87hagen-gyre.pdf

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2011, all rights reserved.

–26

The new feature is supported through the commands\RLmulticolcolumns (switching to right-to-left
typesetting) and \LRmulticolcolumns (switching toleft-to-right typesetting) the latter being the default.
Improve French babel interaction with varioref
Extracting and saving the page number turned out tobe a source of subtle bugs. Initially it was done throughan \edef with a bunch of \expandafter commands
inside. This posed a problem if the page number itself
contained code which needed protection (e.g., pr/4080)
so this got changed in the last release to use\protected@edef. However, that in turn failed with
Babel (bug report/4093) if the label contained active
characters, e.g., a “:” in French. So now we use (after
one failed attempt pr/4159) even more \expandafter
commands and \romannumeral trickery to avoid any
expansion other than what is absolutely
required—making the code in that space absolutely
unreadable.
\expandafter\def\expandafter#1\expandafter{%\romannumeral\expandafter\expandafter\expandafter\z@\expandafter \@cdr\romannumeral\expandafter\expandafter\expandafter\z@\csname r@#2\endcsname\@nil}%
Code like this nicely demonstrates the limitations in the
programming layer of LATEX 2ε and the advantages that
expl3 will offer on this level.

–27

LATEX News
Issue 21, May 2014 (LATEX release 2014-05-01)

Scheduled LATEX bug-fix release
This issue of LATEX News marks the second bug-fix
release of LATEX 2ε (standard LATEX) since shifting to a
new build system in 2009. Provided sufficient changes
are made, we expect to make such releases yearly or
every two years, in sync with TEX Live.
Release notes
This release makes no changes to the core code in the
LATEX 2ε format but there are a small number of
documentation fixes (not listed here). In addition
several packages in the base and required areas havebeen updated as detailed below.
This has been done in accordance with thephilosophy of minimising problems in both forwards
and backwards compatibility, so most of these changes
should not be noticed by the regular LATEX user.
References in the text below of the form
“graphics/3873” are to bug reports listed at:
http://latex-project.org/cgi-bin/ltxbugs2html

New fltrace package
For years the file ltoutput.dtx contained some hidden
code to trace the detailed behaviour of the float
placement algorithm of LATEX. Prompted by questions
on StackExchange we now extract this code into a new
fltrace package. To see the float algorithm in action (orto understand why it decides to place all your floats atthe very end of the document) use\usepackage{fltrace} \tracefloats
To stop tracing somewhere in the document use\tracefloatsoff and to see the current value ofvarious float parameters use \tracefloatvals. As the
package is identical to the kernel code with tracing
added, it may or may not work if you load any otherpackage that manipulates that part of the kernel code.
In such a case your best bet is to load fltrace first.

• Misspelled float placement specifiers such as\begin{figure}[tv] instead of tb are silently
ignored by the kernel code. Now we test for such
letters and issue an error message.

inputenc package updates
The inputenc package allows different input encodingsfor LATEX documents to be specified including theimportant utf8 option used to specify the Unicode
UTF-8 encoding. A common mistake in documents has
been to also include this option when using theUnicode-based TEX engines LuaTEX and XETEX
producing strange errors as these engines natively deal
with UTF-8 characters.
If a document stored in an 8bit encoding is processedby pdfTEX, it needs the inputenc package to work
correctly. However, if such a document is processedunchanged by LuaTEX or XETEX, then accented
characters may silently get dropped from the output.
The package has been modified so that if used withLuaTEX or XETEX, then it just issues a warning if utf8
or ascii is specified, and stops with an error for any
other encoding requested.
One further improvement has been made to theencoding definition files (.def) used by inputenc: thecatcode of @ is now saved and restored when readingthem instead of always using \makeatother inside thefiles (latex/4192).

• LATEX’s float handling algorithm can get out ofsync if you mix single and double-column floats (asthey are placed independently of each other). Thiswas corrected in fixltx2e a few years ago but the fix
was not perfect as one situation using\enlargethispage generated a low-level TEX error.
This behaviour of the package is now improved.

The tools directory
In the past each of the sub-directories in the “required”
section of the LATEX distribution contained a single.ins file to generate the code files from the source files.
We have now started to provide individual .ins files foreach of those packages that are likely to require updates
outside a major LATEX release.

fixltx2e updates
There are a number of bugs and faulty design decisions
in LATEX 2ε that should have been corrected long ago in
the kernel code. However, such corrections cannot bedone as this would break backwards compatibility inthe following sense. A large number of documents exist
by now that have worked around the bug or have evenmade use of a particular misfeature. Thus changing thekernel code would break too many existing documents.
The corrections for these types of bug have therefore
been collected together in a package that can be loaded
only when needed; its name is fixltx2e. For this release
we made the following changes to this package:

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2014, all rights reserved.

–28

multicol updates
Version 1.8 of multicol implements some
improvements/fixes and one extension. In the past thebalancing algorithm enlarged the column height until itfound a solution that satisfied all constraints. If there
were insufficient break points then the final column
height could have been much larger than expected andif that happened near the end of the page it resulted in
the text overflowing into the bottom margin. Thissituation is now detected and in that case a normal
page is cut and balancing is resumed on the next page.
Some overflow is still allowed and controlled via theparameter \maxbalancingoverflow.
The use of \enlargethispage is now properly
supported within the environment. Finally a newcommand \docolaction was added to allow theexecution of code depending on the column in which thecommand is executed. See the documentation for
details.
Bug fixes: the new version fixes both a color leak that
could happen in certain situations and the problem thatmulticols could mess up the positioning of \marginpars
that followed the environment.

Standard LATEX (LATEX 2ε ) and expl3
The substantial collection of innovative code in expl3
implements a new programming language that has for awhile now been used by some writers of LATEX 2εpackages. This code has recently also been madeavailable for use on top of plain TEX or ConTEXt,
largely to support generic packages that are supposed
to work with different flavours of TEX. These uses in no
way affect authors of LATEX documents and such
LATEX 2ε packages will continue to work as advertisedby their authors with standard LATEX.
This code base will also become an important
foundation for the kernel of LATEX3 and so the newprogramming language can be described as ‘The LATEX3
Programming Language’. However, if you see or hearthat a package ‘uses LATEX3’ then it remains very
unlikely (as yet) to mean that the package is part ofsome ‘new version of LATEX’.
News about the development and use of expl3 andabout other developments in the LATEX3 code base isreported regularly in the LATEX3 News series(http://latex-project.org/l3news/), the mostrecent issue of which was published in March 2014.

tabularx updates
The restrictions on embedding \tabularx\endtabularx into the definition of a new environment
have been relaxed slightly. See the package
documentation for details.
showkeys updates
The showkeys package has been updated to fix problems
if used at the start of list items, and to work if bracegroups ({ and }) are used in the optional argument of\cite. (tools/4162, tools/4173)
color updates
The \nopagecolor command suggested by Heiko
Oberdiek, available for some years in the pdftex option,
has been added to the core package as suggested ingraphics/3873. Currently this is supported in the driver
files for dvips and pdftex. Patches to support otherdrivers are welcome.
graphicx updates
The graphicx version of \rotatebox now allows \par(and blank lines) in values, to match the change madeto the graphics version some years ago. Seegraphics/4296.
keyval updates
All parsing used in the keyval package has been changed
to allow \par (and blank lines) in values. (A second
change, to parsing of brace groups in a construct suchas key={{{value}}}, was reverted in v1.15.) See
graphics/3446.

–29

LATEX News
Issue 22, January 2015 (LATEX release 2015-01-01)

New LATEX 2ε bug-fix policy
Introduction
For some years we have supplied bug fixes to the
LATEX 2ε kernel via the fixltx2e package. This kept thekernel stable, but at the expense of meaning that mostusers did not benefit from bug fixes, and that somecompromises which were made to save space in themachines of the time are still affecting most users today.
In this release we have started a new update policy.
All the fixes previously available via fixltx2e are now
enabled by default in the format, as are some further
extensions for extended TEX engines, ε-TEX, XETEX andLuaTEX. Compatibility and stability are still importantconsiderations, and while most users will not noticethese improvements, or will want to benefit from them,a new latexrelease package is provided that will revert
all the changes and re-instate the definitions fromearlier releases. The package can also be used witholder releases to effectively update the kernel to beequivalent to this 2015 release.
A new document, latexchanges, is distributed withthe release that documents all the changes todocumented commands since the 2014 LATEX release,
and will be updated in future releases if further changes
have been made.
The latexrelease package
As noted above a new package is available to manage
differences between LATEX releases. If you wish to revert
all changes back to the definitions as they were inprevious releases you may start your document
requesting the LATEX release from May 2014:\RequirePackage[2014/05/01]{latexrelease}\documentclass{article}
Conversely if you start a large project now and want toprotect yourself against possible future changes, you
may start your document\RequirePackage[2015/01/01]{latexrelease}\documentclass{article}
Then the version of latexrelease distributed with any
future LATEX release will revert any changes made inthat format, and revert to the definitions as they whereat the beginning of 2015.
If you wish to share a document using the latest
features with a user restricted to using an older format,
you may use the form above and make the latexreleasepackage available on the older installation. The package
will then update the format definitions as needed toenable the older format to work as if dated on the datespecified in the package option.
The \IncludeInRelease command
The mechanism used in the latexrelease package isavailable for use in package code. If in your zzz package
you have\RequirePackage{latexrelease}\IncludeInRelease{2015/06/01}{\zzz}{\zzz definition}\def\zzz......new code
\EndIncludeInRelease\IncludeInRelease{0000/00/00}{\zzz}{\zzz definition}\def\zzz....original\EndIncludeInRelease
then in a document using a format dated 2015/06/01 or
later, the “new code” will be used, and for documents
being processed with an older format, the “original”
code will be used. Note the format date here may be
the original format date as shown at the start of every
LATEX run, or a format date specified as a package
option to the latexrelease package.
So if the document has\RequirePackage[2014/05/01]{latexrelease}\documentclass{article}\usepackage{zzz}then it will use the original definition of \zzz even if
processed with the current format, as the format acts as
if dated 2014/05/01.
Limitations of the approach
The new concept provides full backward and forward
compatibility for the LATEX format, i.e., with the help of
a current latexrelease package the kernel can emulate all
released formats (starting with 2014/06/011 ).
However, this is not necessarily true for all packages.
Only if a package makes use of the \IncludeInRelease
functionality will it adjust to the requested LATEX
release date. Initially this will only be true for a few
selected packages and in general it may not even be
1 Patching an older format most likely works too, given that thechanges in the past have been minimal, though this isn’t guaranteedand hasn’t been tested.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2015, all rights reserved.

–30

advisable for packages that have their own
well-established release cycles and methods.
Thus, to regenerate a document with 100 %compatible behavior it will still be necessary to archive
it together with all its inputs, for example, by archiving
the base distribution trees (and any modificationsmade). However, the fact that a document requests a
specific LATEX release date should help identifying whatrelease tree to use to achieve perfect accuracy.

Updates to the kernel
Updates incorporated from fixltx2e
The detailed list of changes incorporated from fixltx2e isavailable in the new latexchanges document that is
distributed with this release. The main changes are that
2-column floats are kept in sequence with one column
floats, corrections are made to the \mark system toensure correct page headings in 2-column documents,
several additional commands are made robust.
ε-TEX register allocation
LATEX has traditionally used allocation routines
inherited from plain TEX that allocated registers in therange 0–255. Almost all distributions have for someyears used ε-TEX based formats (or XETEX or LuaTEX)
which have 215 registers of each type (216 in the case of
LuaTEX). The etex package has been available toprovided an allocation mechanism for these extended
registers but now the format will by default allocate ina range suitable for the engine being used. The newallocation mechanism is different than the etex package
mechanism, and supports LuaTEX’s full range and an
allocation mechanism for LATEX floats as described
below.
On ε-TEX based engines, an additional command,\newmarks is available (as with the etex package) that
allocates extended ε-TEX marks, and similarly if XETEX
is detected a new command \newXeTeXintercharclassis available, this is similar to the command previously
defined in the xelatex.ini file used to build thexelatex format.
Additional LATEX float storage
LATEX’s float placement algorithm needs to store floats(figures and tables) until it finds a suitable page to
output them. It allocates 18 registers for this storage,
but this can often be insufficient. The contributed
morefloats package has been available to extend this list;
however, it also only allocates from the standard range
0–255 so cannot take advantage of the extended
registers. The new allocation mechanism in this release
incorporates a new command \extrafloats. If you get
the error: Too many unprocessed floats. then you
can add (say) \extrafloats{500} to the document

preamble to make many more boxes available to holdfloats.
Built-in support for Unicode engines
The kernel sources now detect the engine being used
and adjust definitions accordingly, this reduces the needfor the “.ini” files used to make the formats to patch
definitions defined in latex.ltx.
As noted above the format now includes extended
allocation routines.
The distribution includes a fileunicode-letters.def derived from the Unicode
Consortium’s Unicode Character Data files that details
the upper and lower case transformation data for thefull Unicode range. This is used to set the lccode anduccode values if a Unicode engine is being used, rather
than the values derived from the T1 font encoding
which are used with 8-bit engines.
Finally \typein is modified if LuaTEX is detected
such that it works with this engine.

l3build
This release has been tested and built using a new build
system implemented in Lua, intended to be run on the
texlua interpreter distributed with modern TEX
distributions. It is already separately available from
CTAN. This replaces earlier build systems (based atvarious times on make, cons, and Windows bat files). It
allows the sources to be tested and packaged on a rangeof platforms (within the team, OS X, Windows, Linuxand Cygwin platforms are used). It also allows theformat to be tested on XETEX and LuaTEX as well as
the standard pdfTEX/ε-TEX engines.

Hyperlinked documentation and TDS zip files
As well as updating the build system, the team havelooked again at exactly what gets released to ctan.
Taking inspiration from Heiko Oberdiek’s latex-tds
bundle, the PDF documentation provided now includes
hyperlinks where appropriate. This has been done
without modifying the sources such that users without
hyperref available can still typeset the documentation
using only the core distribution. At the same time, therelease now includes ready-to-install TDS-style zip files.
This will be of principal interest to TEX system
maintainers, but end users with older machines whowish to manually update LATEX will also benefit.

–31

LATEX News
Issue 23, October 2015 (LATEX release 2015-10-01)

Contents
Enhanced support for LuaTEX
Names of LuaTEX primitive commands . . . . .
TEX commands for allocation in LuaTEX . . . .
Predefined Lua functions . . . . . . . . . . . .
Support for older releases and plain TEX . . . .
Additional LuaTEX support packages . . . . . .

32
32
33
33
33
33

More Floats and Inserts

33

Updated Unicode data

33

Support for Comma Accent

33

Extended inputenc

33

Pre-release Releases

33

Updates in tools

33

Enhanced support for LuaTEX
As noted in LATEX News 22, the 2015/01/01 release of
LATEX introduced built-in support for extended TEX
systems.
The range of allocated register numbers (for example,
for count registers) is now set according to theunderlying engine capabilities to 256, 32768 or 65536.
Additional allocators were also added for the facilities
added by ε-TEX (\newmark) and XETEX(\newXeTeXintercharclass). At that time, however,
the work to incorporate additional allocators for
LuaTEX was not ready for distribution.
The main feature of this release is that by default it
includes allocators for LuaTEX-provided features, suchas Lua functions, bytecode registers, catcode tables andLua callbacks. Previously these features have been
provided by the contributed luatex (Heiko Oberdiek)
and luatexbase (Élie Roux, Manuel Pégourié-Gonnard
and Philipp Gesang) packages. However, just as notedwith the etex package in the previous release, it isbetter if allocation is handled by the format to avoid
problems with conflicts between different allocation
schemes, or definitions made before a package-definedallocation scheme is enabled.
The facilities incorporated into the format with thisrelease, and described below, are closely modelled on
the luatexbase package and we thank the authors, andespecially Élie Roux, for help in arranging thistransition.
The implementation of these LuaTEX features has
been redesigned to match the allocation system
introduced in the 2015/01/01 LATEX release, and there
are some other differences from the previous luatexbase
package. However, as noted below, luatexbase is being
updated in line with this LATEX release to provide theprevious interface as a wrapper around the new
implementation, so we expect the majority of
documents using luatexbase to work without change.
Names of LuaTEX primitive commands
The 2015/01/01 LATEX release for the first time
initialised LuaTEX in latex.ltx if LuaTEX is being
used. Following the convention used in the contributed
lualatex.ini file used to set up the format for earlier
releases, most LuaTEX-specific primitives were definedwith names prefixed by luatex. This was designed tominimize name clashes but had the disadvantage thatnames did not match the LuaTEX manual, or the names
used in other formats, and produced some awkward
command names such as \luatexluafunction. From
this release the names are enabled without the luatex
prefix.
In practice this change should not affect many
documents; relatively few packages access the primitivecommands, and many of those are already set up to
work with prefixed or unprefixed names, so that theywork with multiple formats.
For package writers, if you want to ensure that yourcode works with this and earlier releases, use unprefixednames in the package and ensure that they are definedby using code such as:\directlua{tex.enableprimitives("",tex.extraprimitives("omega", "aleph", "luatex"))}Conversely if your document uses a package relying on
prefixed names then you can add:
\directlua{tex.enableprimitives("luatex",
tex.extraprimitives("omega", "aleph", "luatex"))}to your document.
Note the compatibility layer offered by the luatexbase
package described below makes several commands
available under both names.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2015, all rights reserved.

–32

As always, this change can be reverted using:\RequirePackage[2015/01/01]{latexrelease}at the start of the document.
TEX commands for allocation in LuaTEX
For detailed descriptions of the new allocationcommands see the documented sources in ltluatex.dtx
or chapter N of source2e; however, the following new
allocation commands are defined by default in LuaTEX:\newattribute, \newcatcodetable, \newluafunction
and \newwhatsit. In addition, the commands\setattribute and \unsetattribute are defined to
set and unset Lua attributes (integer values similar tocounters, but attached to nodes). Finally several
catcode tables are predefined: \catcodetable@initex,\catcodetable@string, \catcodetable@latex,\catcodetable@atletter.
Predefined Lua functions
If used with LuaTEX, LATEX will initialise a Lua table,luatexbase, with functions supporting allocation andalso the registering of Lua callback functions.
Support for older releases and plain TEX
The LuaTEX allocation functionality made available inthis release is also available in plain TEX and older
LATEX releases in the files ltluatex.tex andltluatex.lua which may be used simply by including
the TEX file: \input{ltluatex}. An alternative for old
LATEX releases is to use:
\RequirePackage[2015/10/01]{latexrelease}which will update the kernel to the current release,including LuaTEX support.
Additional LuaTEX support packages
In addition to the base LATEX release two packages havebeen contributed to the contrib area on CTAN. The
ctablestack package offers some commands to help
package writers control the LuaTEX catcodetablefunctionality, and the luatexbase package replaces thepreviously available package of the same name,providing a compatible interface but implemented overthe ltluatex code.

More Floats and Inserts
If ε-TEX is available, the number of registers allocatedin the format to hold floats such as figures is increased
from 18 to 52.
The extended allocation system introduced in
2015/01/01 means that in most cases it is no longer
necessary to load the etex package. Many classes andpackages that previously loaded this package no longer
do so. Unfortunately in some circumstances where a
package or class previously used the etex
\reserveinserts command, it is possible for a
document that previously worked to generate an error“no room for a new insert”. In practice this error canalways be avoided by declaring inserts earlier, before
the registers below 256 are all allocated. However, it isbetter not to require packages to be re-ordered and insome cases the re-ordering is complicated due todelayed allocations in \AtBeginDocument.
In this release, a new implementation of \newinsert
is used which allocates inserts from the previously
allocated float lists once the classical register allocation
has run out. This allows an extra 52 (or in LuaTEX,
64 thousand) insert allocations which is more thanenough for practical documents (by default, LATEX onlyuses two insert allocations).

Updated Unicode data
The file unicode-letters.def recording catcodes,
upper and lower case mappings and other properties forUnicode characters has been regenerated using the data
files from Unicode 8.0.0.

Support for Comma Accent
The command \textcommabelow has been added to theformat. This is mainly used for the Romanian letters
S, s, T, t, . This was requested in latex/4414 in the LATEX
bug tracker.

Extended inputenc
The utf8 option for inputenc has been extended tosupport the letters s and t with comma accent,U+0218 – U+021b. Similarly circumflex w and y
U+0174 – U+0177 are defined. Also U+00a0 and
U+00ad are declared by default, and defined to be\nobreakspace and \- respectively.
The error message given on undefined UTF-8 input
characters now displays the Unicode number in U+hex
format in addition to showing the character.

Pre-release Releases
The patch level mechanism has been used previously toidentify LATEX releases that have small patches applied
to the main release, without changing the main format
date.
The mechanism has now been extended to allow
identification of pre-release versions of the software(which may or may not be released via CTAN) but canbe identified with a banner such as
LaTeX2e <2015/10/01> pre-release-1
Internally this is identified as a patch release with anegative patch level.

Updates in tools
The multicol package has been updated to fix theinteraction with “here” floats that land on the same
page as the start or end of a multicols environment.
–33

LATEX News
Issue 24, February 2016 (LATEX release 2016-02-01)

Contents
LuaTEX support

34

Unicode data

34

More support for east European accents

35

Changes in Graphics

35

Changes in Tools

35

Improving support for Unicode engines

35

LuaTEX support
This release refines the LuaTEX support introduced in
the 2015/10/01 release. A number of patches have been
added to improve the behavior of ltluatex (thankslargely to code review by Philipp Gesang). The kernel
code has been adjusted to allow for changes in LuaTEX
v0.85–v0.88. Most notably, newer LuaTEX releases allow
more than 16 write streams and these are now enabled
for use by \newwrite, but also the experimental
newtoken Lua library has been renamed back to token
which required small adjustments in the LuaTEX setup.
The biggest change in LuaTEX v0.85–v0.87 compared
to previous versions is that all the primitives (originallydefined in pdfTEX) dealing with the PDF “back end”
are no longer defined, being replaced by a much smaller
set of new primitives. This does not directly affect thecore LATEX files in this release but has required majorchanges to the .ini files used by TEX Live and similar
distributions to set up the format files. These changes
in the LuaTEX engine will affect any packages using
these back end commands (packages such as graphics,
color, hyperref, etc.). Until all contributed packages are
updated to the new syntax users may need to add
aliases for the old pdfTEX commands. A new
luapdftexalias package has been contributed to CTAN
(not part of the core LATEX release) that may be used
for this purpose.
See also the sections below for related changes in thetools and graphics bundles.

Unicode data
As noted in LATEX News 22, the 2015/01/01 release of
LATEX introduced built-in support for extended TEX
systems. In particular, the kernel now loads appropriate

data from the Unicode Consortium to set \lccode,\uccode, \catcode and \sfcode values in an
automated fashion for the entire Unicode range.
The initial approach taken by the team was toincorporate the existing model used by (plain) XETEX
and to pre-process the “raw” Unicode data into a
ready-to-use form as unicode-letters.def. However,
the relationship between the Unicode Consortium files
and TEX data structures is non-trivial and still being
explored. As such, it is preferable to directly parse theoriginal (.txt) files at point of use. The team has
therefore “spun-out” both the data and the loading to a
new generic package, unicode-data. This package makes
the original Unicode Consortium data files available in
the texmf tree (in tex/generic/unicode-data) andprovides generic loaders suitable for reading this data
into the plain, LATEX 2ε , and other, formats.
At present, the following data files are included inthis new package:• CaseFolding.txt• EastAsianWidth.txt• LineBreak.txt• MathClass.txt• SpecialCasing.txt• UnicodeData.txt
These files are used either by LATEX 2ε or by expl3(i.e. they represent the set currently required by theteam). The Unicode Consortium provides various otherdata files and we would be happy to add these to thegeneric package, as it is intended to provide a single
place to collect this material in the texmf tree.
Such requests can be mailed to the teamas usual or logged at the package home page:https://github.com/latex3/unicode-data.
The new approach extends use of Unicode data insetting TEX information in two ways. First, the\sfcode of all end-of-quotation/closing punctuation is
now set to 0 (transparent to TEX). Second, \Umathcode
values are now set using MathClass.txt rather thansetting up only letters (which was done using an
arbitrary plane 0/plane 1 separation). There are also
minor refinements to the existing code setting,particularly splitting the concepts of case andletter/non-letter category codes.
For XETEX, users should note that \xtxHanGlue and\xtxHanSpace are no longer defined, that no

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2016, all rights reserved.

–34

assignments are made to \XeTeXinterchartoks andthat no \XeTeXintercharclass data is loaded into theformat. The values which were previously inheritedfrom the plain XETEX setup files are not suitable forproperly typesetting East Asian text. There arethird-party packages addressing this area well, notably
those in the CTeX bundle. Third-party packages mayneed adjustment to load the data themselves; see theunicode-data package for one possible loader.

More support for east European accents
As noted in LATEX News 23, comma accent support wasadded for s and t in the 2015/10/01 release. In thisrelease a matching \textcommaabove accent has been‘
added for U+0123 (\c{g}, g)which is the lower case of
U+0122 (\c{G}, G, ). In the OT1 and T1 encodings the
combinations are declared as composites with the \ccommand, which matches the Unicode names “latin(capital|small) letter g with cedilla” and also allows\MakeUppercase{\c{g}} to produce \c{G}, as
required. In T1 encoding, the composite of \c with k, l,n and r are also declared to use the comma below
accent rather than cedilla to match the conventional useof these letters.
The UTF-8 inputenc option utf8 has been extended
to support all latin combinations that can be reasonably
constructed with a (single) accent command an a base‘character for the T1 encoding so g,u˛ and similar
characters may be directly input using UTF-8 encoding.

Changes in Graphics
The changes in LuaTEX v0.87 mean that the color andgraphics packages no longer share the pdftex.def file
between LuaTEX and pdfTEX. A separate fileluatex.def (distributed separately) has been produced,
and distributions are encouraged to modify
graphics.cfg and color.cfg configuration files todefault to the luatex option if LuaTEX v0.87 or later isbeing used. The team has contributed suitable .cfg
files to CTAN to be used as models.
Normally it is best to let the local graphics.cfg
automatically supply the right option depending on the
TEX engine being used; however the color and graphics(and so graphicx) packages have been extended to havean explicit luatex option comparable to the existing
pdftex and xetex options.
The trig package has been updated so thatpre-computed values such as sin(90) now expand todigits (1 rather than the internal token \@one in thiscase). This allows them to be used directly in PDF
literal strings.

Changes in Tools
LuaTEX from version v0.87 no longer supports the\write18 syntax to access system commands. A new
package shellesc has been added to tools that defines a
new command \ShellEscape that may be used in all
TEX variants to provide a consistent access to systemcommands. The package also defines \write18 in
LuaTEX so that it continues to access system commands
as before; see the package documentation for details.

Improving support for Unicode engines
Stability concerns are always paramountwhen considering any change to the LATEX 2ε kernel.
At the same time, it is important that the format
remains usable and gives reliable results for users. For
the Unicode TEX engines XETEX and LuaTEX there areimportant differences in behavior from classical (8-bit)
TEX engines which mean that identical default behaviors
are not appropriate. Over the past 18 months the teamhas addressed the most pressing of these considerations(as detailed above and in LATEX News 22 and23), primarily by integrating existing patches into thekernel. There are, though, important areas which stillneed consideration, and which may result in refinements
to kernel support in this area in future releases.
The default font setup in LATEX 2ε at present is to use
the OT1 encoding. This assumes that hyphenation
patterns have been read using appropriate codes: the T1
encoding is assumed. The commonly-used hyphenation
patterns today, hyph-utf8, are set up in this way for
8-bit engines (pdfTEX) but for Unicode engines use
Unicode code points. This means that hyphenation will
be incorrect with Unicode engines unless a Unicode fontis loaded. This requires a concept of a Unicode fontencoding, which is currently provided by the fontspec
package in two versions, EU1 and EU2. The team isworking to fully understand what is meant by a“Unicode font encoding”, as unlike a classical TEX
encoding it is essentially impossible to know what
glyphs will be provided (though each slot is always
defined with the same meaning). There is also anoverlap between this area and ideas of language andwriting system, most obviously in documents featuring
mixed scripts (for example Latin and Cyrillic).
As well as these font considerations, the team is also
exploring to what extent it is possible to allow existing(8-bit) documents to compile directly with Unicode
engines without requiring changes in the sources.
Whether this is truly possible remains an open question.
It is important to stress that changes will only bemade in this area where they do not affect documents
processed with ε-TEX/pdfTEX (i.e. documents which are
written for “classical” 8-bit TEX engines). Changes will
also be made only where they clearly address
deficiencies in the current setup for Unicode engines(i.e. where current behaviors are wrong).

–35

LATEX News
Issue 25, March 2016 (LATEX release 2016-03-01)

LuaTEX

amsmathThis LATEX release sees several internal changes designed
to ensure that the system is still usable with LuaTEX
versions greater than 0.80, which have introduced manychanges into the engine, most notably the removal or
renaming of most of the primitive commands introduced
by pdfTEX. Also the lists of Lua callbacks handled by
the callback allocation mechanism has been updated tomatch the callbacks defined in LuaTEX version 0.90.
These changes have also required updates in tools andamsmath as described below.
This is the first release of LATEX for which the test
suite reports no failures when used with LuaTEX.

Since the launch of LATEX 2ε in 1993, the amsmathbundle has been part of the required packages in thecore LATEX distribution, with bug reports
handled by the LATEX bug database athttps://latex-project.org/bugs-upload.html.
The amsmath packages and the amscls classes havebeen maintained by the American MathematicalSociety.
With this release a new arrangement has been agreed
between the American Mathematical Society and the
LATEX3 project. The LATEX3 project will take overmaintenance of the amsmath bundle, with the American
Mathematical Society retaining maintenance of amscls.
The recommended installation of these files in the
TEX directory structure remains unchanged as
tex/latex/amsmath and tex/latex/amscls
respectively.
This release of amsmath includes several updates sothat amsmath does not generate errors when math isused with LuaTEX v0.87+, which has changes to\mathchardef that are incompatible with the previous
version of amsmath. It also improves \dots handling sothat \long macros are correctly handled (for example,\dots \Rightarrow now uses centered dots), as well as
commands expanding to character tokens (for example,\times \dots \times will use centered dots with\times defined as in the unicode-math package).

Documentation checksums
The doc package has always provided two mechanismsthat were mainly intended to guard against filetruncation or corruption when files were commonly
distributed by email through unreliable mail gateways:
a Character Table of the ASCII character set could be
inserted (and checked) and a “checksum” (count of thenumber of backslashes in the code sections) could bechecked. These features are not really needed withmodern distribution mechanisms and can be a
distraction when reading the source code and so havebeen removed. The doc package has been updated sothat if you use a \CheckSum command then, as before,
the number is checked; however, if you omit thecommand then no error or warning is given.

Updates to inputenc
The UTF-8 support in inputenc has been further
extended with support for non-breaking hyphens andmore dashes.

Updates in Tools
The varioref package has been updated with improved
documentation of multilingual support, and avoiding
unnecessary warnings in some cases with\reftextfaraway.
The tabularx package’s handling of \endtabularx inenvironment definitions has been fixed to again matchits documentation.
The bm package has been updated as required by thechanges to \mathchardef in LuaTEX.

Related updates
In addition to the updates in the core LATEX release,some files in the CTAN “contrib” area have also been
updated. Notably there have been further updates tothe unicode-data files; also, the files required to build
plain and LATEX formats have now been submitted to
CTAN as tex-ini-files. The addition of a new
luatex option for graphics-related packages(luatex-def on CTAN) has required updates to theconfiguration files to select a default option and thesehave similarly been uploaded to CTAN asgraphics-cfg. (Previously these files were maintained
directly in the TEX Live repository, and were notavailable on CTAN.)LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2016, all rights reserved.

–36

LATEX News
Issue 26, January 2017 (LATEX release 2017-01-01)

Default encodings in X LATEX and LuaLATEXContents

E

ε-TEX

37

Default encodings in XELATEX and LuaLATEX

37\showhyphens in XELATEX

38

The fixltx2e package

38

The latexbug package

38

Updates to amsmath

38

Updates to tools

38

An addendum to the release changes in 2015:
page breaks and vertical spacing
38

ε-TEX
In LATEX News 16 (December 2003) the team announced
We expect that within the next two years,
releases of LATEX will change modestly in orderto run best under an extended TEX engine
that contains the ε-TEX primitives, e.g., ε-TEXor pdfTEX.
and also said
Although the current release does not
require ε-TEX features, we certainly
recommend using an extended TEX, especially
if you need to debug macros.
For many years the team have worked on the basisthat users will have ε-TEX available but had not revisitedthe above statements formally. As of the January 2017
release of LATEX 2ε , ε-TEX is required to build the format,
and attempting to build a format without the extensions
will fail.
Practically, modern TEX distributions provide theextensions in all engines other than the “pure” Knuth
tex, and indeed parts of the format-building process
already require ε-TEX, most notably some of the UTF-8
hyphenation patterns. As such, there should be no
noticeable effect on users of this change.
The team expect to make wider use of ε-TEX within
the kernel in future; details will be announced where
they impact on end users in a visible way.

The default encoding in LATEX has always been theoriginal 128-character encoding OT1. For Unicode based
TEX engines, this is not really suitable, and is especiallyproblematic with XELATEX as in the major distributions
this is built with Unicode based hyphenation patterns
in the format. In practice this has not been a major
problem as documents use the contributed fontspec
package in order to switch to a Unicode encoded font.
In this release we are adding TU as a new supported
encoding in addition to the previously supported
encodings such as OT1 and T1. This denotes a Unicode
based font encoding. It is essentially the same as the TU
encoding that has been on trial with the experimental
tuenc option to fontspec for the past year.
The XELATEX and LuaLATEX formats will now default
to TU encoding and lmr (Latin Modern) family. In
the case of LuaLATEX the contributed luaotfload Lua
module will be loaded at the start of each run to enable
the loading of OpenType fonts.
The fontspec package is being adjusted in a companion release to recognise the new encoding default
arrangements.
Note that in practice no font supports the full Unicode
range, and so TU encoded fonts, unlike fonts specified
for T1, may be expected to be incomplete in various
ways. In the current release the file tuenc.def that
implements the TU encoding-specific commands has
made some basic assumptions for (for example) default
handling of accent commands, and the set of command
names is derived from the command names used for
the UTF-8 support in the inputenc package, restrictedroughly to the character ranges classically provided by
the T1 and TS1 encodings, but is part of a longer term
plan seen over recent releases to increase support for
Unicode based TEX engines into the core LATEX support.
If for any reason you need to process a documentwith the previous default OT1 encoding, you may switch
encoding in the usual ways, for example\usepackage[OT1]{fontenc}
or you may roll back all the changes for this release bystarting the document with
\RequirePackage[2016/12/31]{latexrelease}

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2017, all rights reserved.

–37

\showhyphens in X LATEXE

Due to the way XELATEX interfaces to font libraries, thestandard definition of \showhyphens does not work. A
variant definition has been available in the contributed
xltxtra package, however a (slightly different) definitionfor \showhyphens is now included in XELATEX by default.
As usual this change will be undone if an earlier releaseis specified using the latexrelease package.

The fixltx2e package
As described in LATEX News 22, the fixltx2e package
has become obsolete with the new update policy.
Since 2015 it has just made a warning and exited. In
this release we have re-introduced all the code fromthe original fixes in the 2014 LATEX but guarded by\IncludeInRelease{2015/01/01}. So for current
releases fixltx2e still just displays a warning but for old
releases, whether that is an old format, or a format withthe version date reset via the latexrelease package, thefixes in the original fixltx2e will be applied.
This improves the ability to run old documents in a way that is compatible with contemporary formats. If you have a 2014 documentthat used \usepackage{fixltx2e} and you add\RequirePackage[2014/01/01]{latexrelease} andprocess it with the current format then latexrelease will
undo most changes made since 2014, but now when the
document includes fixltx2e it will act like a 2014 versionof the package and apply the code fixes, not just give awarning that the package is obsolete.

The latexbug package
As explained in more detail at the LATEX Project website1
a new package, latexbug, has been produced to help
produce test files to accompany bug reports on the core
LATEX distribution. This is being published separately
to CTAN at the same time as this release. By using thelatexbug package you can easily check that the packages
involved in the test are all part of the core release. The
LATEX project cannot handle bug reports on contributed
packages, which should be directed to the package
maintainer as given in the package documentation.

Updates to amsmath
The amsmath package has two updates at this release.
• The spacing to the left of the aligned andgathered environments has been fixed: thespurious thin space is no longer added by default.
Package options control this to revert to theoriginal behaviour where required; see the amsldoc
guide for further details.
1 https://www.latex-project.org/bugs/• The large delimiters around generalised fractions(for example in the \binom construct) did not workin previous releases if using LuaTEX or XETEX with
OpenType math fonts. This is related to the lack of
specific metrics for this use in the OpenType Mathtable. In principle LuaTEX has two additional
named metrics to control the delimiters but these
are not initialised by default, and in XETEX it does
not seem possible to make them work at all. So forUnicode TEX systems, a new implementation of\genfrac is used at this release that uses
\left\right internally but parameterised to givespacing as close to the original as possible. The
implementation in (pdf)TEX is unaffected.

Updates to tools
The array package has been updated to fix a longstanding but previously unreported issue with unwanted
interactions between tables in the page head or foot andthe body of the page, as reported in PR tools/4488.
There is also an update to the LuaTEX support in bm.

An addendum to the release changes in 2015:
page breaks and vertical spacing
In 2015 we announced the introduction of the roll-back/roll-forward concept to manage bug fixes and additions
to core LATEX in a manageable way. We also announced
at that time that we now incorporate all fixes from
fixltx2e into the kernel (as the old mechanism produced
problems instead of improving the situation). Refer toltnews22.pdf for details.
One of the fixes from fixltx2e was for a glaring bug
in \addvspace that was originally detected in the
mid-nineties and back then added to the fixltx2e support
package. In certain situations \addvspace would resultin a page/column break below the baseline of the lastline. As a result documents using \flushbottom would
show a clear misalignment (even more prominent whentypesetting in two-column mode).
Starting with release 2015/01/01 this is now finallycorrected already in the kernel and not only in fixltx2e.
In nearly all circumstances this will either make no
difference to existing documents, or it will locally
improve the visual appearance of that document withoutchanging anything on other pages. However, by thenature of the change it is also possible that there arefurther non-local changes to the page breaks due to thedifferent break positions introduced by the fix.
Thus, for documents that have been written before
2015 and that should be preserved unchanged at all
costs you may have to add\RequirePackage[2014/01/01]{latexrelease}at the top of the document, to roll back the format to adate before the policy change.
–38

LATEX News
Issue 27, April 2017 (LATEX release 2017-04-15)

Contents

Disabling hyphenation

ISO 8601 Date format

39

Further TU encoding improvements

39

Disabling hyphenation

39

Discretionary hyphenation

39

Default document language

39

Line spacing in parboxes39

ISO 8601 Date format
Since before the first releases of LATEX 2ε , LATEX has
used a date format in the form yyyy/mm/dd. This has
many advantages over more conventional formats, as it
is easy to sort and avoids the unfortunate ambiguity
between different communities as to whether 01/02/2017
is the 1st of February or 2nd of January.
However there is another date format, formalised by
the International Standard ISO 8601. The basic format
defined by this standard is functionally equivalent to
the LATEX format, but using - rather than /. This dateformat is now supported in many Operating Systems
and applications (for example the date --iso-8601
command in Linux and similar systems).
From this release, LATEX will accept ISO format datestrings in the date argument of \ProvidesPackage,\usepackage, etc. Currently we recommend that you do
not use this format in any packages that need to workwith older LATEX releases; the latexrelease package may
be used with older releases to add this functionality.
This change is handled in a special way by latexrelease:
The package always adds support for ISO dates whateverformat date is requested; this is required so that thenecessary date comparisons may be made.
The new functionality can be seen in the startup
banner which advertises LaTeX2e <2017-04-15>.

Further TU encoding improvements
The 2017/01/01 release saw the introduction of the new
TU encoding for specifying Unicode fonts with LuaTEX
and XETEX. There were a number of small corrections
and additions in the patch releases updating 2017/01/01,
and a further addition in this release, notably extended
support for the dot-under accent, \d.

The existing LATEX code for \verb and verbatim hadsome issues when used with fonts that were not loadedwith hyphenation disabled via setting \hyphenchar to−1. In this release these verbatim environments use
a \language setting, \l@nohyphenation, that has nohyphenation patterns associated.
The format ensures that a language has been allocatedwith this name. For most users this will in fact be nochange as the standard babel language has for a longtime allocated a language with this name.
In order that page breaks in verbatim do not influence
the language used in the page head and foot, the format
now normalises the language used in the output routine
to a default language as described below.

Discretionary hyphenation
The LATEX definition of \- has been adjusted so that
it will insert the current font’s \hyphenchar, as would
the TEX primitive. A comment in source2e has given
this new definition since the first releases of LATEX 2ε ,and in this release we finally acted upon this comment.
Previously \- always inserted a - at a break point even
if a different character would be used for automatic
hyphenation with the current font.

Default document language
A new integer parameter \document@default@language
is introduced; this is initialised to −1 but is set at\begin{document} to the language in force at thattime if it has not been set by preamble code. This isvery similar to the handling of the default color, and isused in a similar way to normalise the settings for page
head and foot as described above. Users should notnormally need to set this explicitly but it is expectedthat language packages such as babel may set this if thedefault behaviour is not suitable.

Line spacing in parboxes
Inside a \parbox LATEX normalises the baseline spacing.
However it has not previously reset \lineskiplimit.
This meant that lines of a paragraph that have ascenders
or descenders could be set with closer line spacing thanlines without. This can easily happen if you use a\parbox in an AMS alignment, as they use a relatively
large value of \lineskiplimit. As usual, the latexreleasepackage may be used to force the older behavior.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2017, all rights reserved.

–39

LATEX News
Issue 28, April 2018 (LATEX release 2018-04-01)

Contents
A new home for LATEX 2ε sources

40

Bug reports for core LATEX 2ε

40

UTF-8: the new default input encoding
The new default . . . . . . . . . . . . . . . . .
Compatibility . . . . . . . . . . . . . . . . . . .
BOM: byte order mark handling . . . . . . . .

40
41
41
41

A general rollback concept

41

Integration of remreset and chngcntr packages 42
Testing for undefined commands

42

Changes to packages in the tools category
LATEX table columns with fixed widths . . . . .
Obscure overprinting with multicol fixed . . . .

42
42
42

Changes to packages in the amsmath category 42
Updated user’s guide . . . . . . . . . . . . . . . 42

A new home for LATEX 2ε sources
In the past the development version of the LATEX 2εsource files has been managed in a Subversion source
control system with read access for the public. This way
it was possible to download in an emergency the latest
version even before it was released to CTAN and madeits way into the various distributions.
We have recently changed this setup and now manage
the sources using Git and placed the master sources on
GitHub athttps://github.com/latex3/latex2ewhere we already store the sources for expl3 and otherwork. As before, direct write access is restricted to
LATEX Project Team members, but everything is publicly
accessible including the ability to download, clone (using
Git) or checkout (using SVN). More details are givenin [1].

Bug reports for core LATEX 2εFor more than two decades we used GNATS, an open
source bug tracking system developed by the FSF. Whilethat has served us well in the past it started to show
its age more and more. So as part of this move we alsodecided to finally retire the old LATEX bug database andreplace it with the standard “Issue Tracker” available at
Github.
The requirements and the workflow for reporting a
bug in the core LATEX software is documented athttps://www.latex-project.org/bugs/
and with further details also discussed in [1].

UTF-8: the new default input encoding
The first TEX implementations only supported reading
7-bit ascii files—any accented or otherwise “special”
character had to be entered using commands, if it could
be represented at all. For example to obtain an “ä” onewould enter \"a, and to typeset a “ß” the command\ss. Furthermore fonts at that time had 128 glyphs
inside, holding the ascii characters, some accents tobuild composite glyphs from a letter and an accent, anda few special symbols such as parentheses, etc.
With 8-bit TEX engines such as pdfTEX this situation
changed somewhat: it was now possible to process 8-bit
files, i.e., files that could encode 256 different characters.
However, 256 is still a fairly small number and with thislimitation it is only possible to encode a few languages
and for other languages one would need to change theencoding (i.e., interpret the character positions 0–255
in a different way). The first code points 0–127 were
essentially normed (corresponding to ascii) while thesecond half 128–255 would vary by holding different
accented characters to support a certain set of languages.
Each computer used one of these encodings whenstoring or interpreting files and as long as two computersused the same encoding it was (easily) possible toexchange files between them and have them interpreted
and processed correctly.
But different computers may have used different
encodings and given that a computer file is simply asequence of bytes with no indication for which encoding
is intended, chaos could easily happen and has happened.
For example, the German word “Größe” (height) enteredon a German keyboard could show up as “GrŤàe” on adifferent computer using a different encoding by default.
So in summary the situation wasn’t at all good and it
was clear in the early nineties that LATEX 2ε (that was
being developed to provide a LATEX version usable acrossthe world) had to provide a solution to this issue.
The LATEX 2ε answer was the introduction of the
inputenc package [2] through which it is possible to

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2018, all rights reserved.

–40

provide support for multiple encodings. It also allows
to correctly process a file written in one encoding on acomputer using a different encoding and even supports
documents where the encoding changes midway.
Since the first release of LATEX 2ε in 1994, LATEX
documents that used any characters outside ascii inthe source (i.e. any characters in the range of 128–255)
were supposed to load inputenc and specify in which
file encoding they were written and stored. If the
inputenc package was not loaded then LATEX used a“raw” encoding which essentially took each byte fromthe input file and typeset the glyph that happened to
be in that position in the current font—something thatsometimes produces the right result but often enoughwill not.
In 1992 Ken Thompson and Rob Pike developed the
UTF-8 encoding scheme which enables the encodingof all Unicode characters within 8-bit sequences. Over
time this encoding has gradually taken over the world,
replacing the legacy 8-bit encodings used before. Thesedays all major computer operating systems use UTF-8
to store their files and it requires some effort to explicitly
store files in one of the legacy encodings.
As a result, whenever LATEX users want to use any
accented characters from their keyboard (instead ofresorting to \"a and the like) they always have to use\usepackage[utf8]{inputenc}
in the preamble of their documents as otherwise LATEX
will produce gibberish.
The new default
With this release, the default encoding for LATEX files
has been changed from the “fall through raw” encoding
to UTF-8 if used with classic TEX or pdfTEX. The
implementation is essentially the same as the existing
UTF-8 support from \usepackage[utf8]{inputenc}.
The LuaTEX and XETEX engines always supported
the UTF-8 encoding as their native (and only) input
encoding, so with these engines inputenc was always ano-op.
This means that with new documents one can assume
UTF-8 input and it is no longer required to always
specify \usepackage[utf8]{inputenc}. But if this line
is present it will not hurt either.
Compatibility
For most existing documents this change will betransparent:• documents using only ascii in the input file andaccessing accented characters via commands;• documents that specified the encoding of their file
via an option to the inputenc package and thenused 8-bit characters in that encoding;• documents that already had been stored in UTF-8(whether or not specifying this via inputenc).
Only documents that have been stored in a legacy
encoding and used accented letters from the keyboard
without loading inputenc (relying on the similarities
between the input used and the T1 font encoding) are
affected.
These documents will now generate an error thatthey contain invalid UTF-8 sequences. However, such
documents may be easily processed by adding the newcommand \UseRawInputEncoding as the first line of the
file. This will re-instate the previous “raw” encoding
default.
\UseRawInputEncoding may also be used on thecommand line to process existing files without requiring
the file to be edited
pdflatex ’\UseRawInputEncoding \input’

filewill process the file using the previous default encoding.
Possible alternatives are reencoding the file to UTF-8
using a tool (such as recode or iconv or an editor) or
adding the line
\usepackage[⟨encoding⟩]{inputenc}
to the preamble specifying the ⟨encoding⟩ that fits thefile encoding. In many cases this will be latin1 or
cp1252. For other encoding names and their meaning
see the inputenc documentation.
As usual, this change may also be reverted via
the more general latexrelease package mechanism, byspeciying a release date earlier than this release.
BOM: byte order mark handling
When using Unicode the first bytes of a file may be a,so called, BOM character (byte order mark) to indicate
the byte order used in the file. While this is not requiredwith UTF-8 encoded files (where the byte order isknown) it is nevertheless allowed by the standard andsome editors add that byte sequence to the beginningof a file. In the past such files would have generateda “Missing begin document” error or displayed strange
characters when loaded at a later stage.
With the addition of UTF-8 support to the kernel
it is now possible to identify and ignore such BOMs
characters even before \documentclass so that theseissues will no longer be showing up.

A general rollback concept for packages andclasses
In 2015 a rollback concept for the LATEX kernel was
introduced. Providing this feature allowed us to makecorrections to the software (which more or less didn’t
happen for nearly two decades) while continuing tomaintain backward compatibility to the highest degree.
–41

In this release we have now extended this concept to
the world of packages and classes which was not covered
initially. As the classes and the extension packages
have different requirements compared to the kernel,
the approach is different (and simplified). This shouldmake it easy for package developers to apply it to theirpackages and authors to use when necessary.
The documentation of this new feature is given in anarticle submitted to TUGboat and also available fromour website [3].

Integration of remreset and chngcntr packages
into the kernelWith the optional argument to \newcounter LATEX
offers to automatically reset counters when some counteris stepped, e.g., stepping a chapter counter resets thesection counter (and recursively all other heading
counters). However, what was until now missing was a
way to undo such a link between counters or to link two
counters after they have been defined.
This can be now be done with \counterwithinand \counterwithout, respectively. In the past one
had to load the chngcntr package for this. For the
programming level we also added \@removefromresetas the counterpart of the already existing \@addtoreset
command. Up to now this was offered by the remreset
package.

Testing for undefined commands
LATEX packages often use a test \@ifundefined to test
if a command is defined. Unfortunately this had theside effect of defining the command to \relax in thecase that it had no definition. The new release usesa modified definition (using extra testing possibilities
available in ε-TEX). The new definition is more natural,
however code that was relying on the side effect of thecommand being tested being defined if it was previously
undefined may have to add \let\⟨command⟩\relax.

The fix required a redesign of the output routines usedby multicol and while it “should” be transparent in othercases (and all tests in the regression test suite came outfine) there is the off-chance that code that hooked into
internals of multicol needs adjustment.

Changes to packages in the amsmath category
With this release of LATEX a few minor issues withamsmath have been corrected.
Updated user’s guide
Furthermore, amsldoc.pdf, the AMS user’s guidefor the amsmath package [5], has been updated fromversion 2.0 to 2.1 to incorporate changes and corrections
made between 2016 and 2018.

References[1] Frank Mittelbach: New rules for reporting bugs in
the LATEX core software. In: TUGboat, 39#1, 2018.
https://www.latex-project.org/publications/[2] Frank Mittelbach: LATEX 2ε Encoding
Interface — Purpose, concepts, and Open
Problems. Talk given in Brno June 1995.
https://www.latex-project.org/publications/[3] Frank Mittelbach: A rollback concept for packages
and classes. Submitted to TUGboat.
https://www.latex-project.org/publications/[4] Frank Mittelbach: LATEX table columns with fixedwidths. In: TUGboat, 38#2, 2017.
https://www.latex-project.org/publications/[5] American Mathematical Society and The LATEX
Project: User’s Guide for the amsmath package(Version 2.1). April 2018. Available fromhttps://www.ctan.org and distributed as part ofevery LATEX distribution.

Changes to packages in the tools category
LATEX table columns with fixed widths
Frank published a short paper in TUGboat [4] on
producing tables that have columns with fixed widths.
The outlined approach using column specifiers “w” and“W” has now been integrated into the array package.
Obscure overprinting with multicol fixed
A rather peculiar bug was reported on StackExchange
for multicol. If the column/page breaking was fully
controlled by the user (through \columnbreak) insteadof letting the environment do its job and if then more\columnbreak commands showed up on the last pagethen the balancing algorithm was thrown off track. As
a result some parts of the columns did overprint eachother.
–42

LATEX News
Issue 29, December 2018 (LATEX release 2018-12-01)

Introduction

43

Bug reports for core LATEX 2ε and packages

43

Changes to the LATEX kernel
43
UTF-8: updates to the default input encoding . 43
Fixed \verb* and friends in XETEX and LuaTEX 43
Error message corrected . . . . . . . . . . . . . 44
Fixed fatal link error with hyperref . . . . . . . 44
Avoid page breaks caused by invisible commands 44
Prevent spurious spaces when reading table ofcontents data . . . . . . . . . . . . . . . . 44
Prevent protrusion in table of contents lines . . 44
Start L-R mode for \thinspace and friends . . 45
Guarding \pfill in doc . . . . . . . . . . . . . 45
Changes to packages in the tools category
45
Sometimes the trace package turned off too much 45
Update to xr . . . . . . . . . . . . . . . . . . . 45
Column data for multicols* sometimes vanished 45
Extension to \docolaction in multicol . . . . . 45
Prevent color leak in array . . . . . . . . . . . . 45
Support fragile commands in array or tabular
column templates . . . . . . . . . . . . . . 45
Changes to packages in the amsmath category 45
Website updates
Publications area reorganized and extended . .
Japanese translations of the user’s guide . . . .

45
45
46

Introduction
The December 2018 release of LATEX is a maintenancerelease in which we have fixed a few bugs in the software:some are old, some newer, and they are mostly rather
obscure.

Bug reports for core LATEX 2ε and packages
maintained by the Project TeamIn Spring 2018 we established a new issue tracking
system (Github issues at https://github.com/latex3/
latex2e/issues) for both the LATEX core and the
packages maintained by the LATEX Project Team, withan updated procedure for how to report a bug or
problem.

Initial experience with this system is good, withpeople who report problems following the guidelines
and including helpful working examples to show the
problem—thanks for doing this.
The detailed requirements and the workflow forreporting a bug in the core LATEX software is documentedathttps://www.latex-project.org/bugs/with further details and discussion in [1].

Changes to the LATEX kernel
UTF-8: updates to the default input encoding
In the April 2018 release of LATEX we changed the default
encoding from 7-bit ascii to utf-8 when using classic
TEX or pdfTEX; see LATEX News 28 [2] for details.
Now, after half a year of experience with this newdefault, we have made a small number of adjustments tofurther improve the user experience. These include:• Some improvements when displaying error
messages about utf-8 characters that have notbeen set up for use with LATEX, or are invalid forsome other reason;(github issues 60, 62 and 63)• The addition of a number of previously missing
declarations for characters that are in fact available
with the default fonts, e.g., \j “ȷ” (0237), \SS “SS”
(1E9E), \k{} “˛” (02DB) and \.{} “˙” (02D9);• Correcting the names for \guillemetleft “«” and\guillemetright “»” in all encoding files. These
correct names are in addition to the old (butwrong) Adobe names: Adobe mistakenly called
them Guillemot, which is a sea bird.
(github issue 65)• Added \Hwithstroke (“H”) and \hwithstroke(“h”) necessary for typesetting Maltese.
(https: // tex. stackexchange. com/ q/ 460110)

Fixed \verb* and friends in X TEX and LuaTEX
The original \verb* and verbatim* in LATEX were coded
under the assumption that the position of the spacecharacter (i.e., ascii 32) in a typewriter font contains avisible space glyph “␣”. This is correct for pdfTEX withthe most used font encodings OT1 and T1. However, thisunfortunately does not work for Unicode engines using
the TU encoding since the space character slot (ascii
32) then usually contains a real (normal) space, which
E

Contents

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2018, all rights reserved.

–43

has the effect that \verb* produces the same results as\verb.
The \verb* code now always uses the newly
introduced command \verbvisiblespace to produce
the visible space character and this command will get
appropriate definitions for use with the different engines.
With pdfTEX it will simply use \asciispace, which is aposh name for “select character 32 in the current font”,
but with Unicode engines the default definition is\DeclareRobustCommand\verbvisiblespace{\leavevmode{\usefont{OT1}{cmtt}{m}{n}\asciispace}}
which uses the visible space from the font Computer
Modern Typewriter, regardless of the currently chosen
typewriter font. Internally the code ensures that thecharacter used has exactly the same width as the othercharacters in the current (monospaced) font; thus, forexample, code displays line up properly.
It is possible to redefine this command to select yourown character, for example\DeclareRobustCommand\verbvisiblespace{\textvisiblespace}
will select the “official” visible space character of thecurrent font. This may look like the natural default, but
it wasn’t chosen as our default because many fonts just
don’t have that Unicode character, or they have one
with a strange shape.
(github issues 69 and 70)
Error message corrected
Trying to redefine an undefined command could in a few
cases generate an error message with a missing space,e.g., \renewcommand\1{...} gave
LaTeX Error: \1undefined.
This is now fixed.

(github issue 41)

Fixed fatal link error with hyperref
If an \href link text gets broken across pages, pdfTEX
and LuaTEX will generate a fatal error unless bothparts of the link are internally at the same boxing level.
In two-column mode that was not the case if one ofthe pages had spanning top floats. This has now beenchanged so that the error is avoided.
(github issue 94)

Prevent spurious spaces when reading table of contents
data
When table of contents data is read in from a .toc
file, the new-line character at the end of each line isconverted by TEX to a space. In normal processing thisis harmless (as TEX is doing this input reading whilst invertical mode and each line in the file represents a single
line (paragraph) in the table of contents. If, however,this is done in horizontal mode, which is sometimes thecase, then these spaces will appear in the output. If you
then omit some of the input lines (e.g., because you do
not display toc data below a certain level), then thesespaces accumulate in the typeset output and you get
surprising, and unwanted, gaps inside the text.
The new code now adds a % sign at the end ofproblematic lines in the .toc file so that TEX will notgenerate such spaces that may survive to spoil the printed
result. As some third party packages have augmented
or changed the core LATEX functionality in that area(for example, by adding additional arguments to thecommands in toc files) the code uses a conservative
approach and the % signs are added only when certain
conditions are met. Therefore some packages might
require updates if they want to benefit from thiscorrection, especially if they unconditionally overwrite
LATEX’s \addcontentsline definition. (github issue 73)
Prevent protrusion in table of contents lines
In TEX’s internal processing model, paragraph data is
one of the major data structures. As a result, manythings are internally modeled as paragraphs even if they
are not conceptually “text paragraphs” in the traditional
sense. In a few cases this has some surprising effects
that are not always for the better. One example isstandard toc entries, where you have heading data
followed by some dot leaders and a page number at theright, produced, for example, from this:Error message corrected . . . . . . . . . .

2

Avoid page breaks caused by invisible commands
Commands like \label or \index could generate apotential page break in places where a page break
was otherwise prohibited, e.g., when used between two
consecutive headings. This has now been corrected. If
for some reason you really want a break and you reliedon this faulty behavior, you can always add one using\pagebreak, with or without an optional argument.

The space reserved for the page number is of a fixedwidth, so that the dots always end in the same place.
Well, they did end in the same place until the advent of
protrusion support in the TEX engines. Now, with themicrotype package loaded, it is possible that the page
number will protrude slightly into the margin (eventhough it’s typeset inside a box) and as a result thispage number box gets shifted. With enough bad luck
this can get you another dot in the line, sticking out likethe proverbial sore thumb, as exhibited in the question
on StackExchange that triggered the correction.
LATEX now takes care that there will be no
protrusion happening on such lines, even if it
is generally enabled for the whole document.

(github issue 81)(https: // tex. stackexchange. com/ q/ 172785)–44Start L-R mode for \thinspace and friends
In LATEX, commands that are intended only forparagraph (L-R) mode are generally careful to startparagraph mode if necessary; thus they can be usedat the start of a paragraph without surprising andunwanted consequences. This important requirement
had been overlooked for a few horizontal spacing
commands, such as \thinspace (a.k.a. “\,”), andfor some other support commands such as \smash or\phantom. Thus they ended up adding vertical spacewhen used at the beginning of a paragraph or, in thecase of \smash, creating a paragraph of their own. This
has now been corrected, and a corresponding update
has been made to the amsmath package, in which thesecommands are also defined.
(github issues 49 and 50)
Guarding \pfill in doc
For presenting index entries pointing to code fragments
and the like, the doc package has a \pfill commandthat generates within the index a line of dots leadingfrom the command name to the page or code line
numbers. If necessary it would automatically split theentry over two lines. That worked well enough for aquarter century, but we discovered recently that it isbroken inside the ltugboat class, where it sometimes
produces bad spacing within continuation lines.
The reason turned out to be a redefinition of the
LATEX command \nobreakspace (~) inside the classltugboat, which removed any preceding space (andthus unfortunately also removed the dots on thecontinuation line). While one can argue that this is aquestionable redefinition (if only done by a single classand not generally), it has been in the class so long thatchanging it would certainly break older documents. So
instead we now guard against that removal of space.
(github issues 25 and 75)

Changes to packages in the tools category
Sometimes the trace package turned off too much
The trace package is a useful little tool for tracing
macro execution: it hides certain lengthy and typicallyuninteresting expansions resulting from font changes
and similar activities. However, it had the problem thatit also reset other tracing settings such as \showoutput
in such situations, so that you couldn’t use \showoutput
in the preamble to get symbolic output of all the pages
in the document. This has now been corrected.
Update to xr
The xr package has been updated so that the code that
reads the .aux file has been made more robust. It now
correctly ignores conditionals (added by hyperref andother packages) rather than generating low level parsing
errors.
(https: // tex. stackexchange. com/ a/ 452321)

Column data for multicols* sometimes vanished
In certain situations involving multicols*, when there
are more explicit \columnbreak requests than there arecolumns on the current page, data could vanish due tothe removal of an internal penalty marking the end of
the environment. This has been corrected by explicitly
reinserting that penalty if necessary.
(github issue 53)
Extension to \docolaction in multicol
The \docolaction command can be used to carry out
actions depending on the column you are currently
in, i.e., first, any inner one (if more than two) or last.
However, if the action generates text then there is thequestion: is this text part of the current column or the
one after? That is, on the next run, do we test before orafter it, to determine in which column we are?
This is now resolved as follows: if you use\docolaction* any generated text by the chosen
action is considered to be after the test point. But if you
use the command without the star then all the material
it generates will be placed before the test point todetermine the current column, i.e., the text will become
part of the current column and may affect the test resulton the next run.
Prevent color leak in array
In some cases the color used inside a tabular cell could“leak out” into the surrounding text. This has beencorrected.
(github issue 72)
Support fragile commands in array or tabular column
templates
The preamble specifiers p, m and b each receives a user
supplied argument: the width of the paragraph column.
Normally that is something harmless, like a length ora simple length expression. But in more complicatedsettings involving the calc package it could break with a
low-level error message. This has now been corrected.
(https: // tex. stackexchange. com/ q/ 459285)

Changes to packages in the amsmath category
The changes in the kernel made for \thinspace, \smash,
etc. (see above) have been reflected in the amsmathpackage code, so that loading this package doesn’t revertthem.
(github issues 49 and 50)

Website updates
Publications area reorganized and extended
To help readers to find relevant information in moreconvenient and easy ways, the area of the website
covering publications by the LATEX Project Team wasreorganized and extended (many more abstracts added).
We now provide the articles, talks and supplementary
data structured both by year and also by major topics [4].
Feel free to take a look.
–45

Japanese translations of the user’s guide
Yukitoshi Fujimura has kindly translated into Japanese
two documents that are distributed with standard
LATEX. These are:
• LATEX 2ε for authors;• User’s Guide for the amsmath Package [5].
They can be found on the website documentation
page [3]. You will now also find there a typeset versionof the full LATEX 2ε source code (with index etc.) and anumber of other goodies.

References[1] Frank Mittelbach: New rules for reporting bugs in
the LATEX core software. In: TUGboat, 39#1, 2018.
https://latex-project.org/publications/[2] LATEX News, Issue 28. In: TUGboat, 39#1, 2018.
https://latex-project.org/news/latex2e-news/[3] LATEX documentation on the LATEX Project Website.
https://latex-project.org/documentation/[4] LATEX Project publications on the LATEX ProjectWebsite.
https://latex-project.org/publications/[5] American Mathematical Society and The LATEX
Project: User’s Guide for the amsmath Package(Version 2.1). April 2018. Available fromhttps://www.ctan.org and distributed as part ofevery LATEX distribution.

–46

LATEX News
Issue 30, October 2019 (LATEX release 2019-10-01)

Contents
LATEX-dev formats now available
Our hopes . . . . . . . . . . . . . . . . . . . . .
Details please . . . . . . . . . . . . . . . . . . . .
Setting up menu items . . . . . . . . . . . . . .

47
47
48
48

Improving Unicode handling in pdfTEX

48

Improving file name handling in pdfTEX

48

Improving the filecontents environment

48

Making more user commands robust

48

Other changes to the LATEX kernel
Guard against \unskip in tabular cells . . . . .
Fix Unicode table data . . . . . . . . . . . . . .
Improve \InputIfFileExists’s handling of filenames . . . . . . . . . . . . . . . . . . . .
Improve interface for cross-references . . . . . .
Improve wording of a warning message . . . . .
Avoid bad side-effects of \DeclareErrorFont .
nfssfont: Make font table generation the default
action . . . . . . . . . . . . . . . . . . . .
trace: Add package support in the kernel . . .

49
49
49
49
49
49
49
49
49

Changes to packages in the tools category
50
array: Warn if primitive column specifiers are
overwritten . . . . . . . . . . . . . . . . . 50
multicol: Introduce minrows counter for balancing 50
varioref: Better support for cleveref . . . . . . . 50
xr: Support citations to bibliographies inexternal documents . . . . . . . . . . . . . 50
Changes to packages in the amsmath category 50
amsmath: Introduce \overunderset command
50
Documentation updates
Highlighting the standard nfss codes for series
LATEX base and doc distribution reunited . . . .

50
50
50

LATEX-dev formats now available
We know that many of you, especially developers
and maintainers of important packages, have a strong
interest in a stable LATEX environment.
In order to keep LATEX very stable for users whilst
allowing for further development to continue, we

now have a development branch of LATEX on GitHub
containing development code for the upcoming release.
When this code is ready for wider consumption andtesting, we generate a pre-release of LATEX from thisdevelopment branch and make it available on ctan.
For users of the TEX Live and MiKTEX distributions it
is therefore now straightforward to test their documents
and code against the upcoming LATEX release with ease,simply by selecting a different program name (whenusing the command line) or by selecting a menu entry(after setting it up; see below).
If you do this then the latest version of the LATEX
development format will be used to process yourdocument, allowing you to test the upcoming releasewith your own documents and packages. For example, if
you runpdflatex-dev myfilethen you will be greeted on the screen with something like
LaTeX2e <2019-10-01> pre-release-2 (identifying
the pre-release format) instead of the normal LaTeX2e<2018-12-01>. In this pre-release you will find thelatest new features that we have developed.
Our hopes
We don’t expect everybody to start using the development formats to participate in testing, but we hopethat people with a strong interest in a stable LATEX
environment (especially developers and maintainers ofimportant packages) will use the new facilities and help
us to ensure that future public releases of LATEX do not(as has happened in the past) require some immediate
patches because of issues that were not identified by ourinternal regression test suite or by other testing we do.
Any issue identified when using the development
format should preferably be logged as an issue on
GitHub, following the procedure outlined on our website
at https://www.latex-project.org/bugs/ including
the use of the latexbug package as described.
Our bug reporting process normally states that issues
involving third-party software are out of scope as we
can’t correct external packages; see [1]. However, in theparticular case of the development format showing an
incompatibility with a third-party package, it is fine toopen an issue with us (in addition, please, to informing
the maintainer of that package) so that we know about
the problem and can jointly work on resolving it.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2019, all rights reserved.

–47

Details please . . .
More details and some background information about theconcepts and the process are available in an upcoming
TUGboat article: “The LATEX release workflow and the
LATEX dev formats” [2].
Setting up menu items
While the command line call works out of the box if
you have a recent TEX Live or MiKTEX installation, its
use within an integrated editing environment doesn’t atthis point in time (maybe the developers of these editors
will include it in the future). However, it is normallyfairly simple to enable it as most (or even all?) of themprovide simple ways to call your own setup. How thisworks in detail depends very much on the environment
you use, so we can’t give much help here.
But as an example: to provide an additional menu
entry for XeLaTeX-dev on a MacBook all that isnecessary is to copy the file XeLaTeX.engine to
XeLaTeX-dev.engine and change the call from xelatex
to xelatex-dev inside.

Improving Unicode handling in pdfTEX
Perhaps the most important improvement in this releaseis even better support for utf-8 characters when using
pdfTEX.1
When using a “Unicode engine”, any Unicodecharacter (that is not acting as a command, i.e., isnot “active”) can be used as part of the \label/\refmechanism or can be displayed in a message or written
to a file. In 8-bit engines, however, this was severely
restricted: essentially you had to limit yourself to using
ascii letters, digits and a few punctuation symbols.
With the new release, most of these restrictions havebeen removed and you now can write labels such as\label{eq:größer}or use accented characters, etc., as part of a \typeout
message. The only requirement remaining is that
only those utf-8 characters that are also available fortypesetting can be used, i.e., only those characters forwhich adequate font support is loaded. Otherwise you
will get an error message stating that the particular
Unicode character is not set up for use with LATEX.
Note, however, that the restrictions on what characters
can be used in the names of commands have not changed.
What is not possible when using an 8-bit engine suchas pdfTEX is to use characters other than ascii lettersas part of a command name. This is due to the factthat all other characters in such engines are not single
character tokens, but in fact consist of a sequence ofbytes and this is not supported in command names.
1 The Japanese engines e-pT X and e-upT X can’t use these feaEEtures yet as they don’t support the primitive \ifincsname. Workis under way to resolve this in the engines.

Improving file name handling in pdfTEX
A related change is that file names used as part of\input, \includegraphics, etc., commands can now
contain any Unicode characters allowed by the filesystem in use, including spaces. In this case, evencharacters that can’t be typeset (due to lack of fontsupport) can be used.

Improving the filecontents environment
The filecontents environment now supports anoptional argument in which you can specify that it isallowed to overwrite an already existing file; by default
nothing is written if a file with the given name exists
anywhere in the search tree. An alternative name forthis option is force. Even then the environment will
refuse to write to \jobname.tex to avoid clobbering its
own input file. However, if you use a different extension
on your input file you could still overwrite it (there is no
way to test for that).
There is also an option nosearch, which specifies that
only the current directory is examined for an existing
file, not the whole TEX inputs tree. This is useful if
you want to write a local copy of a standard systemfile. Finally, noheader prevents writing a preamble tothe file (this is the same as using the star form of theenvironment).
Another change is that this environment is now
allowed anywhere in the document, which means it
provides everything (and more) of what the now obsolete
filecontents package provided.

Making more user commands robust
In the early days of LATEX many commands were fragile,i.e., they needed \protect in front of them when usedin places such as section headings and other “moving
arguments”, etc. In LATEX 2ε many of these commands
were made robust, but still a fairly large number
remained unnecessarily fragile.
In this release of LATEX we have now made a lot morecommands robust. There is a very small collection ofcommands that must stay fragile because their expansion(maybe partially) at just the right time is critical. Yetothers are unlikely to ever be needed in a “moving
argument”.
Doing this for \begin and \end was rather tricky as
the standard mechanism with \DeclareRobustCommand
doesn’t work here, at least not for \end as that needs
to expand during typesetting without generating a\relax (from the \protect). Such a token would starta new row in table environments, such as tabular,
etc. Furthermore, some packages try to look into thedefinition of \end by expanding it several times. Thus
expansion with \expandafter had to produce exactly
the same result as before. But in the end we overcame–48that hurdle too, so now environments are automaticallyrobust if used in places like headings or \typeout andso forth.
What hasn’t been tackled yet is the redefinitions inamsmath: this package redefines a number of basic mathconstructs that are now robust, so that they become
fragile again once the package is loaded. This area will
be addressed in a followup release.
(github issue 123)

Other changes to the LATEX kernel
Guard against \unskip in tabular cells
If a tabular or array cell started with a command thatstarted with an \unskip then centering the column broke
because the stretching glue on the left got removed.
The fix for this was to add a minuscule, and hence
unnoticeable, additional space after the stretching space:removing this extra space causes no problems.
This change was also applied in the array package.
(github issue 102)

Fix Unicode table data
U+012F which is “i with ogonek” produced a “dotless iwith ogonek” by mistake. This has been corrected.
(github issue 122)

The Unicode slots 27E8 and 27E9 have been mapped
to \textlangle and \textrangle which is therecommended mapping. In the past they raised a
LATEX error.
(github issue 110)
When doing cut-and-paste from other documents or
websites, f-ligatures and others ligatures might end up as
single Unicode characters in your file. In the past those
got rejected by LATEX. We now define those Unicode
slots and map them back to the sequence of individual
characters constituting the ligature. If supported by
the current font (which is normally the case) they arethen reconstructed as ligatures and thus get typeset as
desired. Otherwise they will come out as individual
characters which is still better than an error message.
(github issue 154)

Improve \InputIfFileExists’s handling of file names
In rare circumstances it was possible that
\InputIfFileExists would work incorrectly, e.g.,a construction such as\InputIfFileExists{foo}{\input{bar}}{}would not load the files foo.tex and bar.tex but would
load bar.tex twice. This has been corrected.
(github issue 109)

Improve interface for cross-references
The packages fncylab and varioref provided a slightly
improved definition of \refstepcounter which allowed
the internal \p@.. commands to receive the countervalue as an argument, instead of acting as a simple

prefix. This supports more complex formatting of thevalue in the reference.
These packages also provided the command\labelformat to help in the specification ofsuch formatting in an easy way. For example,\labelformat{equation}{eq.~(#1)} specifies thatreferences to equations automatically come out as“eq. (5)” or similar. As such a \labelformat declaration means a \ref command can no longer be
successfully used at the start of a sentence, the packages
also provided \Ref for such scenarios.
Both of these commands, \labelformat and \Ref,are now removed from the packages and instead madeavailable in the kernel so there is no need to load
additional packages.
Improve wording of a warning message
The kernel now says “Trying to load . . . ” instead of“Try loading . . . ” in one of its informal messages tomatch style of similar messages.
(github issue 107)
Avoid bad side-effects of \DeclareErrorFont
As a side effect of setting up the error font for nfss,
this declaration also changed the current font size backto 10pt. In most circumstances that doesn’t matter,because that declaration was meant to be used only
during the format generation and not during a LATEX
run. However, it has turned out to be used by somedevelopers in other places (incorrectly in fact: e.g.,
inside some .fd files) where resetting the size causes
havoc seemingly at random. The command has now
changed to not produce such side effects.
(gnats issue latex/4399)

nfssfont: Make font table generation the default action
With the small file nfssfont.tex it is possible toproduce font tables and other font tests in the style
set up by Don Knuth. In nearly all cases a font tableis wanted, so this action has been made the default.
Now one can simply hit enter instead of having to write\table\bye.
trace: Add package support in the kernel
The trace package implements the commands \traceon
and \traceoff that work like \tracingall but skipcertain code blocks that produce a lot of tracing output.
This is useful when debugging, to suppress uninteresting
tracing from, for example, loading a font. Code blocks
that should not be traced need to be surroundedby the commands \conditionally@traceoff and\conditionally@traceon.
The LATEX kernel now provides dummy definitions forthese two commands so that package writers can use
them in their packages regardless of trace being loaded
or not.
–49

Changes to packages in the tools category

Changes to packages in the amsmath category

array: Warn if primitive column specifiers are overwrittenWith \newcolumntype it is possible to define your own
column specifiers for a tabular preamble; it is also
possible to change existing ones. However, doing that fora primitive column specifier, such as c, is seldom a good
idea, since then its functionality becomes unavailable.
The package was therefore supposed to warn the user
in this case, but due to a missing \expandafter in thecode it never did—now it does.
(github issue 148)

amsmath: Introduce \overunderset command
The amsmath package has always offered the commands\overset and \underset to produce binary operatorswith something set above or below. But sometimes one
needs to put something above and something below: The
newly added \overunderset makes this easily possible.

multicol: Introduce minrows counter for balancing
When there are only a few lines of text on a page at theend of a multicols environment, balancing the columns
often looks rather odd: such as three columns eachcontaining a single line. The balancing behavior can
now be controlled through the counter minrows (default
is 1) which specifies that, after balancing, there must be
at least that many lines in the first column. Thus, if
you set minrows to 2 then you would get a distributionof 2+1+0 lines and if set to three, the result would be
3+0+0 instead of the default 1+1+1.
What is most appropriate really depends on thecircumstances, but this now gives you the tools to makelocal or global adjustments.

Highlighting the standard nfss codes for series
The Font Selection Guide [3] has been updated tostrongly recommend that the standard codes should be
used when providing font support. The reason for thisrecommendation is explained here.
The font selection scheme uses a number of standard
codes for \fontseries and \fontshape to ensure thatdifferent fonts are comparable, e.g., that you get a“light” weight if you specify l and “extra bold” when
you write eb, etc. Over the years people came up witha number of other creative short codes like k, j, t
and others with the result that changing a font family
required different codes and thus prevented users fromeasily mixing and matching different families. Somework has been undertaken to get back to a coherent
scheme and all the font families supported through theprogram autoinst are now producing the standard
codes again.

varioref: Better support for cleveref
The varioref package has been internally updated toprovide better interfaces for packages such as hyperref
and cleveref.
It also has a new package option nospace thatstops varioref from meddling with space in front of its
commands. The original behavior was always somewhat
problematical and it is suggested that all new documents
use this option (which should really have been thedefault).
Support was also added for the Arabic language
through the option arabic.
xr: Support citations to bibliographies in external
documents
The xr package can be used to cross-reference an external
LATEX document. This means that even when a work is
split over different documents (that need to be processed
separately), \ref or \pageref can use labels from any
document, creating links between them. This facility
has now been extended so that \cite commands andtheir cousins can now also reference bibliographies inexternal documents; this feature was first provided in
the package xcite by Enrico Gregorio.
Note that for technical reasons xr doesn’t work withhyperref. Use xr-hyper instead if you need the latter
package.

Documentation updates
There are a number of documentation updates in files
on the documentation page of the project website [4].

LATEX base and doc distribution reunited
For a long time the LATEX distribution available from
ctan was split into several parts to allow them to be
uploaded or downloaded separately. As this is thesedays more confusing than helpful we have recombined
the base part with the documentation part (as both are
anyway always updated together). Thus the package
latex-doc is no longer separately available from ctan
but contained in the latex-base distribution.

References[1] Frank Mittelbach: New rules for reporting bugs in
the LATEX core software. In: TUGboat, 39#1, 2018.
https://latex-project.org/publications/[2] Frank Mittelbach: The LATEX release workflow andthe LATEX dev formats. In: TUGboat, 40#2, 2019.
https://latex-project.org/publications/[3] LATEX Project Team: LATEX 2ε font selection.
https://latex-project.org/documentation/[4] LATEX documentation on the LATEX Project Website.
https://latex-project.org/documentation/–50

LATEX News
Issue 31, February 2020 (LATEX release 2020-02-02)

Contents
Experiences with the LATEX -dev formats

51

Concerning this release . . . (LuaLATEX engine) 51
Improved load-times for expl3

51

Improvements to LATEX font selection: NFSS 52
Extending the shape management in NFSS . . 52
Extending the font series management in NFSS 52
Font series defaults per document family . . . . 53
Handling of nested emphasis . . . . . . . . . . 53
Providing font family substitutions . . . . . . . 53
Providing all text companion symbols by default 53
New alias size function for use in .fd files . . 54
Suppress unnecessary font substitution warnings 54
Other changes to the LATEX kernel
UTF-8 characters in package descriptions . . .
Fix inconsistent hook setting whenloading packages . . . . . . . . . . . . . .
Avoid spurious warning if LY1 is made thedefault encoding . . . . . . . . . . . . . .
Ensure that \textbackslash remains robust .
Make math delimiters robust in a different way
Allow more write streams with filecontents
in LuaTEX . . . . . . . . . . . . . . . . . .
Allow spaces in filecontents option list . . .
New reverselist Lua callback type . . . . . .

54
54
54
54
54
54
54
54
54

Changes to packages in the graphics category 55
Make color/graphics user-level commands robust 55
Changes to packages in the tools category
Fixed column depth in boxed multicols . . . .
Ensure that multicols does not lose text . . .
Allow spaces in \hhline arguments . . . . . .

55
55
55
55

LATEX requirements on engine primitives

55

Experiences with the LATEX -dev formats
As reported in the previous LATEX News, we have madea pre-release version of the LATEX kernel available as
LATEX-dev. Overall, the approach of having an explicit
testing release has been positive: it is now readily
available in TEX systems and is getting real use
beyond the team.

The current release has been tested by a number ofpeople, and we have had valuable feedback on a rangeof the new ideas. This has allowed us to fix issues inseveral of the new features, as described below.
We wish to thank all the dedicated users who havebeen trying out the development formats, and we
encourage others to do so. Pre-testing in this way doesmean that, for the vast majority of users, problems are
solved before they even appear!

Concerning this release . . . (LuaLATEX engine)
The new LuaHBTEX engine is LuaTEX with anembedded HarfBuzz library. HarfBuzz can be used by
setting a suitable renderer in the font declaration. A
basic interface for that is provided by fontspec. Thisadditional font renderer will greatly improve the shapingof various scripts when using LuaLATEX, many of which
are currently handled correctly only by XETEX, which
always uses HarfBuzz.
To simplify testing of the new engine, binaries havealready been added to MiKTEX and TEX Live 2019and both distributions have already now changed the
LuaLATEX-dev format to use it.
Going forward, LuaLATEX (and LuaLATEX-dev) willboth use the LuaHBTEX engine. The timing of theswitch to the LuaHBTEX engine depends on the
distribution you use (for TEX Live this will be withTEX Live 2020).

Improved load-times for expl3
The LATEX3 programming layer, expl3, has over the
past decade moved from being largely experimental tobroadly stable. It is now used in a significant number ofthird-party packages, most notably xparse, for defining
interfaces in cases where no expl3 code is “visible”. In
addition, most LATEX documents compiled using XETEXor LuaTEX load fontspec, which is written using expl3.
The expl3 layer contains a non-trivial number ofmacros, and when used with the XETEX and LuaTEX
engines, it also loads a large body of Unicode data. Thismeans that even on a fast computer, there is a relatively
large load time when using expl3.
For this release, the team have made adjustments in
the LATEX 2ε kernel to pre-load a significant portion of
expl3 when the format is built. This is transparent tothe user, other than the significant decrease in document
processing time: there will be no “pause” whilst loading

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2020, all rights reserved.

–51

the Unicode data files. Loading expl3 in documents andpackages can continue to be done as usual; eventually, it
will be possible to omit
\RequirePackage{expl3}
entirely but, to support older formats, this is still
recommended at present.

Improvements to LATEX’s font selection
mechanism (NFSS)
Extending the shape management in NFSSOver time, more and more fonts have become available
for use with LATEX. Many such font families offer
additional shapes such as small caps italic (scit), small
caps slanted (scsl) or swash (sw). By using \fontshapethose shapes can be explicitly selected. For the swash
shapes there is also \swshape and \textsw available.
In the original font selection implementation a request
to select a new shape always overrode the current shape.
With the 2020 release of LATEX this has changed and\fontshape can now be used to combine small capitals
with italic, slanted or swash letters, either by explicitly
asking for scit, etc., or by asking for italics whentypesetting already in small caps, and so forth.
Using \upshape will still change italics or slantedback to an upright shape but will not any longer alter
the small caps setting. To change small capitals backto upper/lower case you can now use \ulcshape (or\textulc) which in turn will not change the fontwith respect to italics, slanted or swash. There is one
exception: for compatibility reasons \upshape willchange small capitals back to upright (n shape), if thecurrent shape is sc. This is done so that something like\scshape...\upshape continues to work as before, but
we suggest that you don’t use that deprecated method
in new documents.
Finally, if you want to reset the shape back to normal
you can use \normalshape which is a shorthand for\upshape\ulcshape.
The way that shapes combine with each other is nothardwired; it is customizable and extensible if there isever a need for this. The mappings are defined through\DeclareFontShapeChangeRule and the details fordevelopers are documented in source2e.pdf.
The ideas for this interface extension have been
pioneered in fontspec by Will Robertson for Unicode
engines, and in fontaxes by Andreas Bühmann andMichael Ummels for pdfTEX; they are by now used inmany font support packages.
Extending the font series management in NFSS
Many of the newer font families also come provided
with additional weights (thin, semi-bold, ultra-bold,etc.) or several running widths, such as condensed or
extra-condensed. In some cases the number of different

values for series (weight plus width) is really impressive:for example, Noto Sans offers 36 fonts, from ultra-light
extra condensed to ultra-bold medium width.
Already in its original design, NFSS supported 9
weight levels, from ultra-light (ul) to ultra-bold (ub),and also 9 width levels, from ultra-condensed (uc) toultra-expanded (ux): more than enough, even for a fontfamily like Noto Sans. Unfortunately, some font support
packages nevertheless invented their own names, so inrecent years you have been able to find all kinds of
non-standard series names (k, i, j and others), making
it impossible to combine different fonts successfullyusing the standard NFSS mechanisms.
Over the course of the last year a small numberof individuals, notably, Bob Tennent, Michael Sharpeand Marc Penninga, have worked hard to bring thisunsatisfactory situation back under control; so today
we are happy to report that the internal font support
files for more than a hundred font families are allback to following the standard NFSS conventions.
Combining them is now again rather nice and easy, andfrom a technical perspective they can now be easily
matched; but, of course, there is still the task of choosing
combinations that visually work well together.
In the original font selection implementation, a request
to select a new series always overrode the current one.
This was reasonable because there were nearly no fonts
available that offered anything other than a medium ora bold series. Now that this has changed and families
such as Noto Sans are available, combining weight andwidth into a single attribute is no longer appropriate.
With the 2020 release of LATEX, the management ofseries therefore changed to allow independent settings of
the weight and the width attributes of the series.
For most users this change will be largely transparent
as LATEX offers only \textbf or \bfseries to selecta bolder face (and \textmd and \mdseries to return
to a medium series): there is no high-level commandfor selecting a condensed face, etc. However, using the
NFSS low-level interface it is now possible to ask for, say,\fontseries{c}\selectfont to get a condensed face(suitable for a marginal note) and that would still allow
the use of \textbf inside the note, which would selecta bold-condensed face (and not a rather odd-looking
bold-extended face in the middle of condensed type).
The expectation is that this functionality will be
used largely by class and package designers but, giventhat the low-level NFSS commands are usable on the
document level and that they are not really difficult toapply, there are probably also a number of users whowill enjoy using these new possibilities that bring LATEX
back into the premier league for font usage.
The ways in which the different series values
combine with each other is not hardwired but is again–52customizable and extensible. The mappings are defined
through \DeclareFontSeriesChangeRule and thedetails for developers are documented in source2e.pdf.
Font series defaults per document familyWith additional weights and widths now being available
in many font families, it is more likely that somebody
will want to match, say, a medium weight serif familywith a semi-light sans serif family, or that with one
family one wants to use the bold-extended face when\textbf is used, while with another it should be bold(not extended) or semibold, etc.
In the past this kind of extension was provided
by Bob Tennent’s mweights package, which has beenused in many font support packages. With the 2020
release of LATEX this feature is now available out of
the box. In addition we also offer a document-levelinterface to adjust the behavior of the high-level seriescommands \textbf, \textmd, and of their declaration
forms \bfseries and \mdseries, so that they can havedifferent effects for the serif, sans serif and typewriterfamilies used in a document.
For example, specifying\DeclareFontSeriesDefault[rm]{bf}{sb}\DeclareFontSeriesDefault[tt]{md}{lc}in the document preamble would result in \textbf
producing semi-bold (sb) when typesetting in a roman
typeface. The second line says that the typewriterdefault face (i.e., the medium series md) should be alight-condensed face. The optional argument here can beeither rm, sf or tt to indicate one of the three main fontfamilies in a document; if omitted you will change theoverall document default instead. In the first mandatory
argument you specify either md or bf and the second
mandatory argument then gives the desired series value
in NFSS nomenclature.
Handling of nested emphasis
In previous releases of LATEX, nested \emph commands
automatically alternated between italics and upright.
This mechanism has now been generalised so that you
can now specify for arbitrary nesting levels how emphasisshould be handled.
The declaration \DeclareEmphSequence expects a
comma separated list of font declarations corresponding
to increasing levels of emphasis. For example,\DeclareEmphSequence{\itshape,%\upshape\scshape,\itshape}uses italics for the first, small capitals for the second,and italic small capitals for the third level (provided you
use a font that supports these shapes). If there are morenesting levels than provided, LATEX uses the declarations
stored in \emreset (by default \ulcshape\upshape) for
the next level and then restarts the list.

The mechanism tries to be “smart” by verifyingthat the given declarations actually alter the current
font. If not, it continues and tries the next level—theassumption being that there was already a manual fontchange in the document to the font that is now supposed
to be used for emphasis. Of course, this only works if thedeclarations in the list’s entries actually change the fontand not, for example, just the color. In such a scenario
one has to add \emforce to the entry, which directs themechanism to use the entry, even if the font attributes
appear to be unchanged.
Providing font family substitutions
Given that pdfTEX can only handle fonts with up to
256 glyphs, a single font encoding can only supporta few languages. The T1 encoding, for example, does
support many Latin-based scripts, but if you want
to write in Greek or Cyrillic then you will need toswitch encodings to LGR or T2A. Given that not every
font family offers glyphs in such encodings, you may
end up with some default family (e.g., Computer
Modern) that doesn’t blend in well with the chosen
document font. For such cases NFSS now offers\DeclareFontFamilySubstitution, for example:\DeclareFontFamilySubstitution{LGR}{Montserrat-LF}{IBMPlexSans-TLF}
tells LATEX that if you are typesetting in the sans serif
font Montserrat-LF and the Greek encoding LGR is
asked for, then LATEX should use IBMPlexSans-TLF tofulfill the encoding request.
The code is based on ideas from the substitutefont
package by Günter Milde, but the implementation isdifferent.
Providing all text companion symbols by default
The text companion encoding TS1 was originally notavailable by default, but only when the textcomp
package was loaded. The main reason for this waslimited availability of fonts with this encoding otherthan Computer Modern; another was the memory
restrictions back in the nineties. These days neither
limitation remains, so with the 2020 release all thesymbols provided with the textcomp package areavailable out of the box.
Furthermore, an intelligent substitution mechanism
has been implemented so that glyphs missing in some
fonts are automatically substituted with default glyphs
that are sans serif if you typeset in \textsf andmonospaced if you typeset using \texttt. In the past
they were always taken from Computer Modern Roman
if substitution was necessary.
This is most noticeable with \oldstylenums which are
now taken from TS1 so that you no longer get 1234 but
1234 when typesetting in sans serif fonts and 1234 whenusing typewriter fonts.
–53

If there ever is a need to use the original (inferior) definition, then that remains available as\legacyoldstylenums; and to fully revert to the oldbehavior there is also \UseLegacyTextSymbols. The
latter declaration reverts \oldstylenums and alsochanges the footnote symbols, such as \textdagger,\textparagraph, etc., to pick up their glyphs from themath fonts instead of the current text font (this means
they always keep the same shape and do not nicely blend
in with the text font).
With the text companion symbols as part of thekernel, it is normally no longer necessary to load the
textcomp package, but for backwards compatibility thispackage will remain available. There is, however, one
use case where it remains useful: if you load the packagewith the option error or warn then substitutions willchange their behavior and result in a LATEX error or a
LATEX warning (on the terminal), respectively. Without
the package the substitution information only appears
in the .log file. If you use the option quiet, then eventhe information in the transcript is suppressed (which is
not really recommended).
New alias size function for use in .fd files
Most of the newer fonts supported in TEX have been
set up with the autoinst tool by Marc Penninga. In
the past, this program set up each font using the facename chosen by that font’s designer, e.g., “regular”,“bold”, etc. These face names were then mapped bysubstitution to the standard NFSS series names, i.e.,“m” or “b”. As a result one got unnecessary substitution
warnings such as “Font T1/abc/bold/n not found,using T1/abc/b/n instead”.
We now provide a new NFSS size function, alias,that can and will be used by autoinst in the future. It
provides the same functionality as the subst function
but is less vocal about its actions, so that only significant
font substitutions show up as warnings.
Suppress unnecessary font substitution warnings
Many sans serif fonts do not have real italics but usually
only oblique/slanted shapes, so the substitution ofslanted for italics is natural and in fact many designers
talk about italic sans serif faces even if in reality they
are oblique.
With nearly all sans serif font families, the LATEX
support files therefore silently substitute slanted if you
ask for \itshape or \textit. This is also true for
Computer Modern in T1 encoding but in OT1 you got awarning on the terminal even though there is nothing
you can do about it. This has now been changed to
an information message only, written to the .log file.
(github issue 172)

Other changes to the LATEX kernel
UTF-8 characters in package descriptions
In 2018 we made UTF-8 the default input encoding
for LATEX but we overlooked the case of non-ASCII
characters in the short package descriptions usedin declarations, e.g., in the optional argument to\ProvidesPackage. They worked (sometimes) before,
but the switch to UTF-8 made them always generate anerror. This has been corrected.
(github issue 52)
Fix inconsistent hook setting when loading packages
As part of loading a package, the command\package.sty-h@@k gets defined. However, attempting
to load a package a second time resulted in this hookbecoming undefined again. Now the hook remains
defined so that extra loading attempts do not change
the state of LATEX (relevant only to package developers).
(github issue 198)

Avoid spurious warning if LY1 is made the default encoding
Making LY1 the default encoding, as is done by some
font support packages, gave a spurious warning even
if \rmdefault was changed first. This was corrected.
(github issue 199)

Ensure that \textbackslash remains robust
In the last release we made most document-levelcommands robust, but \textbackslash became fragile
again whenever \raggedright or similar typesetting
was used. This has been fixed.
(github issue 203)
Make math delimiters robust in a different way
Making math delimiters robust caused an issue in somesituations. This has been corrected. This also involveda correction to amsmath.
(github issue 251)
Allow more write streams with filecontents in LuaTEX
Most TEX engines only support a maximum of sixteen
concurrently open write streams, and when those havebeen used up, then filecontents or any other codetrying to open one will fail. In LuaTEX more write
streams are available and those can also now be utilised.
(github issue 238)

Allow spaces in filecontents option list
Leaving spaces or newlines in the option list prevented
the options from being correctly recognized. Thishas been corrected.
(github issue 256)
New reverselist Lua callback type
A new callback type, reverselist, was added:
post_mlist_to_hlist_filter andpost_linebreak_filter are now of this type.
–54

Changes to packages in the graphics category
Make color & graphics user-level commands robust
Some of the user-level commands in color, graphics andgraphicx, such as \textcolor or \includegraphics,
were still fragile so didn’t work in moving arguments.
All of these are now robust.
(github issue 208)

A number of these additional primitives are needed tosupport new or improved functionality in LATEX. This isseen for example in the improved UTF-8 handling, whichuses \ifincsname. The following primitive functionality(which in LuaTEX may be achieved using Lua code) will
therefore be required by the LATEX kernel and corepackages from the start of 2021:

Changes to packages in the tools category• \expanded• \pdfnormaldeviate

Fixed column depth in boxed multicols
The multicols environment was setting \maxdepth
when splitting boxes; but, due to the way the internalinterfaces of LATEX are designed, it should haveused \@maxdepth instead. As a result, balanced
boxed multicols sometimes ended up having different
heights even if they had exactly the same content.

• \ifincsname• \pdfpageheight• \ifpdfprimitive• \pdfpagewidth• \pdfcreationdate• \pdfprimitive• \pdfelapsedtime• \pdfrandomseed• \pdffiledump• \pdfresettimer• \pdffilemoddate• \pdfsavepos• \pdffilesize• \pdfsetrandomseed• \pdflastxpos• \pdfshellescape• \pdflastypos• \pdfstrcmp• \pdfmdfivesum• \pdfuniformdeviate(github issue 190)

Ensure that multicols does not lose text
The multicols environment needs a set of consecutively
numbered boxes to collect column material. The way
those got allocated could result in disaster if otherpackages allocated most boxes below box 255 (which
TEX always uses for the output page). In the original
implementation that problem was avoided because
one could only allocate box numbers below 255, but
nowadays the LATEX allocation routine allows allocating
box numbers both below and above 255. So theassumption that when asking for, say, 20 boxes you
always get a consecutive sequence of 20 box register
numbers became no longer true: some of the column
material could end up in box 255, where it would getoverwritten. This has now been corrected by allocating
all necessary boxes with numbers above 255 whenever
there aren’t enough lower-numbered registers available.
(github issue 237)

Allow spaces in \hhline arguments
The \hhline command, which allows the specificationof rule segments in tabular environments, now
allows (but ignores) spaces between its tokens: so\hhline{: = : =} is now allowed and is equivalent to\hhline{:=:=}. This matches similar token arguments
in LATEX such as the [h t p] argument on floats. A
similar change has been made to the extended \hhline
command in the colortbl package.
(github issue 242)

For ease of reference, these primitives will be referred
to as the ‘pdfTEX utilities’. With the exception of\expanded, these have been present in pdfTEX since
the release of version 1.40.0 in 2007; \expanded wasadded for TEX Live 2019. Similarly, the full set of theseutility primitives has been available in XETEX from the2019 TEX Live release, and has always been available in
LuaTEX (some by Lua emulation). The Japanese pTEX
and upTEX gained all of the above (except \ifincsname)for TEX Live 2019 and will both have that primitive also
from the 2020 release onward.
At the same time, engines which are fully Unicodecapable must provide the following three primitives:• \Uchar• \Ucharcat• \Umathcode

Note that it has become standard practice to checkfor Unicode-aware engines by using the existence ofthe \Umathcode primitive. As such, this is already arequirement: engines lacking these primitives cannot use
Unicode features of the LATEX 2ε kernel or expl3. Notealso that upTEX can handle Unicode but it is not classed
as a Unicode engine by the base LATEX code.

References
LATEX requirements on engine primitives
Since the finalization of ε-TEX in 1999, a numberof additional ‘utility’ primitives have been added to
pdfTEX. Several of these are broadly useful and havebeen required by expl3 for some time, most notably\pdfstrcmp. Over time, a common set of these ‘post-εTEX’ primitives have been incorporated into XETEX and(u)p-TEX; they were already available in LuaTEX.

[1] Frank Mittelbach: The LATEX release workflow and the
LATEX dev formats. In: TUGboat, 40#2, 2019.
https://latex-project.org/publications/[2] LATEX Project Team: LATEX 2ε font selection.
https://latex-project.org/help/documentation/
fntguide.pdf[3] LATEX documentation on the LATEX Project Website.
https://latex-project.org/help/documentation/–55

LATEX News
Issue 32, October 2020 (LATEX release 2020-10-01)

Contents
Introduction

56

Providing xparse in the format

56

A hook management system for LATEX

57

Other changes to the LATEX kernel
57\symbol in math mode for large Unicode values 57
Correct Unicode value of \=y (ȳ) . . . . . . . . 57
Add support for Unicode soft hyphens . . . . . 57
Fix capital accents in Unicode engines . . . . . 57
Support calc in various kernel commands . . . 58
Support ε-TEX length expressions in picture
coordinates . . . . . . . . . . . . . . . . . 58
Spaces in filenames of included files . . . . . . . 58
Avoid extra line in \centering, \raggedleft
or \raggedright . . . . . . . . . . . . . . 58
Set a non-zero \baselineskip in text scripts . 58
Spacing issues when using \linethickness . . 58
Better support for the legacy series defaultinterface . . . . . . . . . . . . . . . . . . . 58
Support for uncommon font series defaults . . . 58
Checking the current font series context . . . . 58
Avoid spurious package option warning . . . . . 58
Adjusting fleqn . . . . . . . . . . . . . . . . . 59
Provide \clap . . . . . . . . . . . . . . . . . . 59
Fix to legacy math alphabet interface . . . . . 59
Added tests for format, package and class dates 59
Avoid problematic spaces after \verb . . . . . . 59
Provide a way to copy robust commands. . . . . 59
. . . and a way to \show them . . . . . . . . . . 59
Merge l3docstrip into docstrip . . . . . . . . . . 60
Support vertical typesetting with doc . . . . . 60
Record the counter name stepped by\refstepcounter . . . . . . . . . . . . . 60
Native LuaTEX behavior for \- . . . . . . . . . 60
Allow \par commands inside \typeout . . . . 60
Spacing commands moved from amsmath tothe kernel . . . . . . . . . . . . . . . . . . 60
Access raw glyphs in LuaTEX without
reloading fonts . . . . . . . . . . . . . . . 60
Added a fourth empty argument to\contentsline . . . . . . . . . . . . . . . 60
LuaTEX callback new_graf made exclusive . 60

Changes to packages in the graphics category
Generate a warning if existing color definition
is changed . . . . . . . . . . . . . . . . . .
Specifying viewport in the graphics package . .
Normalizing \endlinechar . . . . . . . . . . .
Files with multiple parts . . . . . . . . . . . . .

60

Changes to packages in the tools category
array: Support stretchable glue in w-columns . .
array: Use math mode for w and W-cells in array
array: Fix for \firsthline and \lasthline . .
varioref: Support Japanese as a language option
xr: Support for spaces in filenames . . . . . . .

61
61
61
61
61
61

Changes to packages in the amsmath category
Placement corrections for two accent commands
Fixes to aligned and gathered . . . . . . . . .
Detect Unicode engines when setting\std@minus and \std@equal . . . . . . .
Use LuaTEX primitives where applicable . . . .

61
61
61

Changes to the babel package

62

60
61
61
61

61
61

Introduction
The 2020-10-01 release of LATEX shows that work on
improving LATEX has again intensified. The two mostimportant new features are the kernel support for xparseand the introduction of the new hook management
system for LATEX, but as you can see there are manysmaller enhancements and bug fixes added to the kerneland various packages.

Providing xparse in the format
The official interface in the LATEX 2ε kernel for creating document-level commands has always been
\newcommand. This was a big step forward fromLATEX 2.09. However, it was still very limited in thetypes of command it can create: those taking at mostone optional argument in square brackets, then zero or
more mandatory arguments. Richer syntaxes required
use of the TEX \def primitive along with appropriate
low-level macro programming.
The LATEX team started work on a comprehensive
document-command parser, xparse, in the late 1990s. In
the past decade, the experimental ideas it provides havebeen carefully worked through and moved to a stablefooting. As such, xparse is now used to define a very

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2020, all rights reserved.

–56

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 xparse are now sufficiently
well tested that the majority can be transferred into the
LATEX kernel. Thus the following commands have beenadded
• \NewDocumentCommand, \RenewDocumentCommand,\ProvideDocumentCommand,\DeclareDocumentCommand• \NewExpandableDocumentCommand,\RenewExpandableDocumentCommand,\ProvideExpandableDocumentCommand,\DeclareExpandableDocumentCommand• \NewDocumentEnvironment,\RenewDocumentEnvironment,\ProvideDocumentEnvironment,\DeclareDocumentEnvironment• \BooleanTrue \BooleanFalse• \IfBooleanTF, \IfBooleanT, \IfBooleanF

ltfilehook.dtx holds redefinitions for commands like
\input or \usepackage so that they offer hooks ina similar fashion to what is provided by the filehookpackage.
At the moment the integration is lightweight,
overwriting definitions made earlier during format
generation (though this will change after more thoroughtesting). For that reason the documentation isn’t in its
final form either and you have to read through threedifferent documents:
lthooks-doc.pdf Core management interface andbasic hooks for environments provided by the kernel.
ltshipout-doc.pdf Hooks accessible while a page isbeing shipped out.
ltfilehook-doc.pdf Hooks used when reading a file.
For those who wish to also study the code, replace -docwith -code, e.g., lthooks-code.pdf. All documents
should be accessible via texdoc, e.g.,
texdoc lthooks-doc
should open the core documentation for you.

• \IfNoValueTF, \IfNoValueT, \IfNoValueF

Other changes to the LATEX kernel• \IfValueTF, \IfValueT, \IfValueF\symbol in math mode for large Unicode values
The LATEX 2ε kernel defines the command \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 isslot number "1D400 in hex or 119808 in decimal). The
XETEX engine did not allow \symbol in math mode forvalues above 216 ; this limitation has now been lifted.

• \SplitArgument, \SplitList, \TrimSpaces,\ProcessList, \ReverseBoolean• \GetDocumentCommandArgSpec\GetDocumentEnvironmentArgSpec
Most, but not all, of the argument types definedby xparse are now supported at the kernel level. In
particular, the types g/G, l and u are not provided by
the kernel code; these are deprecated but still available
by explicitly loading xparse. All other argument types
are now available directly within the LATEX 2ε kernel.

A hook management system for LATEXWith the fall 2020 release of LATEX we provide ageneral 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 systemis 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 xparse which has already been available for along time as a separate package).
The file lthooks.dtx holds the core management
code for hooks and defines basic hooks for environments(as previously offered by etoolbox), ltshipout.dtx
provides kernel hooks into the shipout process (making
packages like atbegshi, etc., unnecessary) and the file(github issue 124)

Correct Unicode value of \=y (ȳ)
The Unicode slot for ȳ was incorrectly pointing to theslot for Ȳ. This has been corrected.
(github issue 326)
Add support for Unicode soft hyphens
For a long time, the UTF-8 option for inputenc made theUnicode soft hyphen character (U+00AD) an alias for
the LATEX soft hyphen \-. 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 \-.
(github issue 323)
Fix capital accents in Unicode engines
In Unicode engines the capital accents such as\capitalcedilla, etc., have been implemented astrivial shorthands for the normal accents (because otherthan Computer Modern virtually no fonts supportthem), but that failed when hyperref got loaded. Thishas been corrected.
(github issue 332)
–57

Support calc in various kernel commands
The \hspace, \vspace, \addvspace, \\ and othercommands 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 beenchanged, so that now calc syntax is also supported withthese commands.
(github issue 152)
Support ε-TEX length expressions in picture coordinates
Picture mode coordinates specified with (_,_) previously
accepted multiples of \unitlength. They now also allow
ε-TEX length expressions (as used by the \glueexpr
primitive although all uses in picture mode are
non-stretchy).
So, valid uses include \put(2,2) as
previously, but now also uses such as\put(\textwidth-5cm,0.4\textheight).
Note that you can only use expressions with lengths;\put(1+2,0) is not supported.
Spaces in filenames of included files
File names containing spaces lead to unexpected
results when used in the commands \include and\includeonly. This has now been fixed and theargument to \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 \includeonly, which is a comma-separated listof files to process, can also contain spaces with any
leading and trailing spaces stripped from the individual
filenames while spaces in the file names will remain
intact.
(github issues 217 and 218)
Avoid extra line in \centering, \raggedleft or\raggedrightIf 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-lastline of the paragraph. This is now avoided by setting\finalhyphendemerits to zero in unjustified settings.
(github issue 247)

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., \seriesdefault. In
2019 we introduced various extensions and with it new
methods of customizing certain parts of NFSS, e.g., therecommended way for changing the series default(s) is
now through \DeclareFontSeriesDefault [1]. In thisrelease we improved the support for legacy documents
using the old method to cover additional edge cases.
(github issues 306 and 315)

Support for uncommon font series defaults
If a font family was set up with fairly unusual font series
defaults, e.g.,\renewcommand\ttdefault{lmvtt}\DeclareFontSeriesDefault[tt]{md}{lm}\DeclareFontSeriesDefault[tt]{bf}{bm}then a switch between the main document families,
e.g., \ttfamily...\rmfamily did not always correctly
continue typesetting in medium or bold series if thatinvolved adjusting the values used by \mdseriesor \bfseries. This has now been corrected.
(github issue 291)

Checking the current font series context
Sometimes it is necessary to define commands thatact differently when used in bold context (e.g., inside\textbf). Now that it is possible in LATEX to specify different “bf” defaults based for each of the three meta families (rm, sf and tt) via \DeclareFontSeriesDefault,
it is no longer easy to answer the question “am I typesetting in a bold context?”. To help with this problem a
new command was provided:\IfFontSeriesContextTF{⟨context⟩}{⟨true code⟩}{⟨false code⟩}The ⟨context⟩ can be either bf (bold) or md (medium)and depending on whether or not the current font isrecognized as being selected through \bfseries or\mdseries the ⟨true code⟩ or ⟨false code⟩ is executed.
As an example

Set a non-zero \baselineskip in text scripts
As \textsuperscript and \textsubscript usuallycontain only a few characters on a single line the\baselineskip was set to zero. However, hyperref usesthat value to determine the height of a link box whichconsequently came out far too small. This has beenadjusted.
(github issue 249)

\usepackage{bm} % (bold math)\newcommand\vbeta{\IfFontSeriesContextTF{bf}%{\ensuremath{\bm{\beta}}}%{\ensuremath{\beta}}}

Spacing issues when using \linethickness
In some circumstances the use of \linethickness
introduced a spurious space that shifted objects ina picture environment to the right. This has beencorrected.
(github issue 274)

Avoid spurious package option warning
When a package is loaded with a number of options,
say X, Y and 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 X is not

This way you can write \vbeta-isotopes and if
used in a heading it comes out in a bolder version.
(github issue 336)

–58

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.
(github issue 22)

Adjusting fleqn
In amsmath the \mathindent parameter used with thefleqn design is a rubber length parameter allowing forsetting it to a value such as 1em minus 1em, i.e., so thatthe 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 formulaand equation number in the equation environment got
added when the fleqn option is used so that a very
wide formula doesn’t bump into the equation number.
(github issue 252)

Provide \clap
LATEX has inherited \llap and \rlap from plain TEX(zero-sized boxes whose content sticks out to the leftor right, respectively) but there isn’t a corresponding\clap command that centers the material. This missing
command was added by several packages, e.g., mathtools,
and has now been added to the kernel.
Fix to legacy math alphabet interface
When using the LATEX 2.09 legacy math alphabet
interface, e.g., $\sf -1$ instead of $\mathsf{-1}$,
an extra math Ord atom was added to the formula incase 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.
(gnats issue latex/3357)

Added tests for format, package and class dates
To implement compatibility code or to ensure thatcertain 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 (\@ifpackagelater and \@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 \@ifl@t@r
that, given its cryptic name, was clearly never intended
for use even in package or class code. Furthermore, eventhe existing interface commands were defective as they
are testing for “equal or later” and not for “later” astheir names indicate.
We have therefore introduced three new CamelCasecommands as the official interface for such tests\IfFormatAtLeastTF{⟨date⟩}{⟨true code⟩}{⟨false code⟩}and for package and class tests\IfClassAtLeastTF{⟨class name⟩}{⟨date⟩}{⟨true code⟩}{⟨false code⟩}\IfPackageAtLeastTF{⟨package name⟩}{⟨date⟩}{⟨true code⟩}{⟨false code⟩}
For compatibility reasons the legacy commands remain
available, but we suggest to replace them over time anduse the new interfaces in new code.
(github issue 186)
Avoid problematic spaces after \verb
If a user typed \verb␣!~!␣foo instead of \verb!~!␣foo
by mistake, then surprisingly the result was “!~!foo”
without any warning or error. What happened was thatthe ␣ became the argument delimiter due to the rather
complex processing done by \verb to render verbatim.
This has been fixed and spaces directly following thecommand \verb or \verb* are now ignored as elsewhere.
(github issue 327)

Provide a way to copy robust commands. . .
With the previous LATEX 2ε release, several user-levelcommands were made robust, so the need for a way
to create copies of these commands (often to redefinethem) increased, and the LATEX 2ε kernel didn’t have a
way to do so. Previously this functionality was provided
in part by Heiko Oberdiek’s letltxmacro package, whichallows a robust command \foo to be copied to \barwith \LetLtxMacro\bar\foo.
From this release onwards, the LATEX 2ε kernel
provides \NewCommandCopy (and \Renew... and\Declare... variants) which functions almost like
\LetLtxMacro. To the end user, both should work thesame way, and one shouldn’t need to worry about thedefinition of the command: \NewCommandCopy should do
the hard work.
\NewCommandCopy knows about the different types ofdefinitions from the LATEX 2ε kernel, and also from otherpackages, such as xparse’s command declarations like
\NewDocumentCommand, and etoolbox’s \newrobustcmd,
and it can be extended to cover further packages.
(github issue 239)

. . . and a way to \show them
It is sometimes necessary to look up the definition of acommand, and often one not only doesn’t know wherethat 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 thisproblem is to use TEX’s \show primitive to look at thedefinition of a command, which works fine until thecommand being \shown is robust. With \show\fracone sees> \frac=macro:->\protect \frac.
–59which is not very helpful. To show the actual command the user needed to notice that the real definition of \frac is in the \frac␣ macro and do\expandafter\show\csname frac\space\endcsname.
But with the machinery for copying robust commands
in place it is already possible to examine a commandand detect (as far as a macro expansion language allows)
how it was defined. \ShowCommand knows that and with\ShowCommand\frac the terminal will show
> \frac=robust macro:->\protect \frac .
> \frac =\long macro:#1#2->{\begingroup #1\endgroup \over #2}.

Spacing commands moved from amsmath to the kernel
Originally LATEX only provided a small set of spacing
commands for use in text and math; some of thecommands like \; were only supported in math mode.
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.
command name(s)\, \thinspace\! \negthinspace\: \> \medspace\negmedspace\; \thickspace\negthickspace

math
xx
xx
xx
xx
xx
xx

text
xx
xx
xx
xx
xx
xx

(github issue 373)

(github issue 303)

Merge l3docstrip into docstrip
The file l3docstrip.tex offered a small extension over theoriginal docstrip.tex file supporting the %<@@=⟨module ⟩>syntax of expl3. This has been merged into docstrip
so that it can now be used for both traditional .dtx
files and those containing code written in the L3
programming layer language.
(github issue 337)

Access raw glyphs in LuaTEX without reloading fonts
LATEX’s definitions for \textquotesingle,\textasciigrave, and \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 tlig feature, but that came withmultiple disadvantages: It behaves differently than thecorresponding 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 notaffected by font shaping.
(github issue 165)

Support vertical typesetting with doc
The macrocode environment uses a trivlist internallyand as part of this sets up the \@labels box to containsome 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.
(github issue 344)

Record the counter name stepped by \refstepcounter\refstepcounter now stores the name of the counterin \@currentcounter. This allows packages like zref
and hyperref to store the name without having to patch\refstepcounter.
(github issue 300)
Native LuaTEX behavior for \LATEX changes \- to add a discretionary hyphen even if\hyphenchar is set to −1. This change is not necessary
under LuaTEX because there \- is not affected by\hyphenchar in the first place. Therefore this behavior
has been changed to ensure that LuaTEX’s (language
specific) hyphenation characters are respected by \-.
Allow \par commands inside \typeout\typeout used to choke when seeing an empty line or a\par command in its argument. However, sometimes it
is used to display arbitrary user input or code (wrapped,
for example, in \unexpanded) which may contain explicit\par commands. This is now allowed. (github issue 335)

Added a fourth empty argument to \contentsline
LATEX’s \addcontentsline writes a \contentsline
command with three arguments to the .toc and similar
files. hyperref redefines \addcontentsline to write afourth argument. The change unifies the number ofarguments by writing an additional empty brace group.
(github issue 370)

LuaTEX callback new_graf made exclusive
Corrected an incorrect callback type which caused
return values from the new_graf callback to be ignoredand paragraph indentation to be suppressed. In the
new version, only one new_graf callback handler can be
active at a time, which allows this handler to take fullcontrol of paragraph indentation.
(github issue 188)

Changes to packages in the graphics category
Generate a warning if existing color definition is changed
If a color is defined twice using \DefineNamedColor,
no info text Redefining color ... in named color
model ... was written to the log file, because ofa typo in the check. This has been corrected.
(gnats issue graphics/3635)–60

Specifying viewport in the graphics package
Specifying a BoundingBox does not really have meaning when including non-EPS graphics in pdfTEX andLuaTEX. For some years the graphicx package bb key
has been interpreted (with a warning) as a viewport
key. This feature has been added to the two-argument
form of \includegraphics, which is mostly used in thegraphics package. \includegraphics[1,2][3,4]{file}
will now be interpreted in pdfTEX andLuaTEX in the same way as graphicx’s\includegraphics[viewport=1 2 3 4]{file}.
Normalizing \endlinechar
If \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 \endlinechar toits standard value while reading files. (github issue 286)
Files with multiple parts
Sometimes one has a graphics file, say, file.svg, andconverts it to another format to include it in LATEX andends up with a file named file.svg.png. In previous
releases, if the user did \includegraphics{file.svg},
an error would be raised and the graphics inclusion
would fail due to the unknown .svg extension. The
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.
(github issue 355)

Changes to packages in the tools category
array: Support stretchable glue in w-columns
If stretchable glue, e.g., \dotfill, is used in tabular
columns made with the array package, it stretches as it
would in normal paragraph text. The one exception was
w-columns (but not W-columns) where it got forced toits nominal width (which in case of \hfill or \dotfill
is 0 pt). This has been corrected and now w-columns
behave like all other column types in this respect.

array: Fix for \firsthline and \lasthline
Replacing \hline with \firsthline or \lasthline
could lead in some cases to an increase of the tabularwidth. This has now been corrected. (github issue 322)
varioref: Support Japanese as a language option
The package now recognizes japanese as a language
option. The extra complication is that for grammaticalreasons \vref, \Vref, \vrefrange and \fullref needa structure different from all other languages currently
supported. To accommodate this, \vrefformat,\Vrefformat, \vrefrangeformat, and \fullrefformat
have been added to all languages.
(github issue 352)
xr: Support for spaces in filenames
The command \externaldocument, provided by xr, now
also supports filenames with spaces, just like \include
and \includeonly.
(github issue 223)

Changes to packages in the amsmath category
Placement corrections for two accent commands
The accent commands \dddot and \ddddot (producing
triple and quadruple dot accents) moved the basecharacter vertically in certain situations if it was asingle glyph, e.g., $Q \dddot{Q}$ were not at the samebaseline. This has been corrected.
(github issue 126)
Fixes to aligned and gathered
The environments aligned and 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 t, b and c but the code only tested
for b and t and assumed anything else must be 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 morethan 25 years this has now been corrected. If sucha group is found a warning is given and the data isprocessed as part of the formula.
(github issue 5)(github issue 270)

array: Use math mode for w and W-cells in array
The w and W-columns are LR-columns very similar tol, c and 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 array environment. This has now
been adjusted. Note that this is a breaking change inversion v2.5! If you have used w or W-columns in older
documents either add >{$}...<{$} for such columns or
remove the $ signs in the cells. Alternatively, you canroll back to the old version by loading array with\usepackage{array}[=v2.4]
in such documents.

(github issue 297)

Detect Unicode engines when setting \std@minus and\std@equalamsmath now detects the Unicode engines and uses
their extended commands to define \std@minus and\std@equal. This avoids a package like unicode-mathhaving to patch the code in the begin document hook tochange the commands.
Use LuaTEX primitives where applicable
For a number of years lualatex-math patched \frac,\genfrac and the subarray environment to make useof new luaTEX primitives. This code has now been
integrated into amsmath.
–61

Changes to the babel package
Multilingual typesetting has evolved greatly in recent
years, and babel, like LATEX itself, has followed thefootsteps of Unicode and the W3C consortia to produce
proper output in many languages.
Furthermore, the traditional model to define and selectlanguages (which can be called “vertical”), based on
closed files, while still the preferred one in monolingual
documents, is being extended with a new model (which
can be called “horizontal”) based on services provided
by babel, which allows defining and redefining localeswith the help of simple ini files based on key/value
pairs. The babel package provides about 250 of thesefiles, which have been generated with the help of theUnicode Common Language Data Repository.
Thanks to the recent advances in lualatex andluaotfload, babel currently provides 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
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 ini files are easily parsable,
they can serve as a source for other packages.
For further details take a look at the babel package
documentation [4].

References[1] LATEX Project Team: LATEX 2ε news 31.
https://latex-project.org/news/latex2e-news/
ltnews31.pdf[2] LATEX documentation on the LATEX Project Website.
https://latex-project.org/help/documentation/[3] LATEX issue tracker.
https://github.com/latex3/latex2e/issues/[4] Javier Bezos and Johannes Braams.
Babel—Localization and internationalization.
https://www.ctan.org/pkg/babel–62

LATEX News
Issue 33, June 2021 (LATEX release 2021-06-01)

Contents
Introduction

63

Extending the hook concept to paragraphs

63

Extending the hook concept to commands

64

Other hook business
Shipping out a page while bypassing hooks . .
A new Lua callback in ltshipout, for custom
attributes . . . . . . . . . . . . . . . . . .

64
64

Improved handling of file names
File names with spaces, multiple dots or
utf-8 characters . . . . . . . . . . . . . .
Consequences for file names in \include .
Normalization of robust commands in file names
Fix for filecontents with utf-8 chars in thefile name . . . . . . . . . . . . . . . . . . .

64Updates to the font selection scheme
A new hook in \selectfont . . . . . . . . . .
Change of font series/shape delayed until\selectfont . . . . . . . . . . . . . . . .

65
65

Glyphs, characters & encodings
Improved copy & paste for pdfTEX documents .
Support for more Unicode characters . . . . . .
More “dashes” in encodings OT1, T1 and TU . .
Poor man’s \textasteriskcentered . . . . . .
The characters from textcomp are in the kernel
A note on the history of “text symbols” .

65
65
65
65
65
65
65

64

64
64
64
64

65

New or improved commands
66
Adjusting itemize labels with \labelitemfont 66
Producing several marks for one footnote . . . 66
Allow \nocite in the preamble . . . . . . . . . 66
Made \\ generally robust . . . . . . . . . . . . 66
Allow extra space between name and addressin letter class . . . . . . . . . . . . . . . . 67
Additions to \tracingall . . . . . . . . . . . . 67
Code improvements
67
Execute \par at the end of \marginpar . . . . 67
Execute \AtEndDocument hook in vertical mode 67
Color groups made permanent . . . . . . . . . 67

Provide the raw option list to key/value
option handlers . . . . . . . . . . . . . . .
New for latexrelease : \NewModuleRelease . . .
Small fix for rolling back prior to 2020-02-02 .

67
68
68

Changes to packages in the graphics category
Removed warning when loading graphics files .
Fixed loading of gzipped PostScript files . . .

68
68
68

Changes to packages in the tools category
layout: Added language options . . . . . . . . .
array and longtable: Make \\ generally robust .
longtable: General bug fix update . . . . . . . .
trace: Additions to \traceon . . . . . . . . . .
bm: Better support for commands with
optional arguments . . . . . . . . . . . . .

68
68
68
68
68
68

Changes to packages in the amsmath category 68

Introduction
The focus of the June 2021 release is to provide further
important building blocks for the future production ofreliable tagged PDF output (see [1]); these enhancements
are discussed in the next two sections.
Subsequent sections describe quite a number of recent
smaller enhancements and fixes. As usual, more detailon individual changes can be found in the changes.txt
files in the distribution and, of course, in the documented
sources [2].

Extending the hook concept to paragraphs
Largely triggered by the need for better control ofparagraph text processing, in particular when producing
tagged PDF output, we have changed LATEX so that thekernel gains control both at the start and at the end ofeach paragraph. This is done in a manner that is (orshould be) transparent to both packages and documents.
Besides the addition of internal control points for the
exclusive use of the LATEX kernel, we also implemented
four public hooks that can be used in packages
or documents (via the normal hook management
declarations) to achieve special effects, etc. Until now,
such enhancements required redefinitions of \everypar
or \par, which led to the usual issues since such changes
can easily conflict with changes made by other packages.
The documentation of these new “paragraph hooks”,
together with a few examples, is in ltpara-doc.pdf and,LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2021, all rights reserved.

–63

for those who want to study it, the (quite interesting)code can be found in ltpara-code.pdf. Additionally,both of these files are included as part of the full kernel
documentation in source2e.pdf.

Extending the hook concept to commands
Up to now, hook management covered hooks for only
a few core areas, such as the hooks for the \shipout
process or those in the document environment, as well assome “generic” hooks, both for file loading (helpful forpatching such files) and for arbitrary environments (thehooks executed within \begin and \end). This conceptof “generic hooks” has now been extended to provide/before and /after hooks for any (document-level)command—in theory at least.
In practice, these new generic cmd hooks, especiallythe cmd/.../after, hooks may fail with commands thatare too complex to be automatically patched, breaking
if the hook contains any code. These restrictions are
documented in ltcmdhooks-doc.pdf. However, giventhat these hooks are mainly meant for developers whowish to provide better interoperability between different
packages, and between packages and the LATEX kernel,
these restrictions are, we hope, of minor importance.
Indeed, for commands where this mechanism can’t beapplied, one is in the same situation as before; and forall others there will be a noticeable improvement.
These hooks will be especially important for ourcurrent project to provide accessible and tagged PDF
output [1] because we will eventually have to patch
many third-party packages, and this must be done incontrolled and standardized ways.

Other hook business
Shipping out a page while bypassing hooks
In the 2020 October release, several hooks were added
to control the process of constructing and shipping out
a page box: these support, for example, the addition of
background or foreground material to some or all pages.
We have now added a command, called \RawShipout,
which does not do any rebuilding of the page box andso does not run most of these hooks. When using thisnew command, essential internal book-keeping is still
carried out, such as updating the totalpages counterand adding shipout/firstpage or shipout/lastpage
material when appropriate.
A new Lua callback in ltshipout, for custom attributes
For use just before shipping out a page, there is now
a LuaTEX callback pre_shipout_filter to contain
final adjustments to the box being shipped out. Thisis particularly useful for LuaTEX packages which flag
(using, for example, attributes or properties) elements
on a page in order to apply effects (such as the insertionof “color commands”) to these elements at shipout.

Improved handling of file names
File names with spaces, multiple dots or utf-8 characters
In one of the recent LATEX releases we improved theinterface for specifying file names so that they can
now safely contain spaces (as is common these days),more than one dot character, and also utf-8 charactersoutside the ascii range. In the past this was only
possible by applying a special syntax in the case of
spaces, while file names with several dots often failed, as
did most utf-8 characters.
Consequences for file names in \include: TEX has abuilt-in rule saying that you can normally leave out
the extension if it is .tex. Thus \input{file} and\input{file.tex} both load file.tex (if it exists).
While this is convenient most of the time, it is a little
awkward in some scenarios (for example, when both
file and file.tex exist) and also when you manually
try to implement the rule.
LATEX therefore had one special syntax for \include
and \includeonly: they always expected that theirarguments contain a file name1 with no extension given,so that it had to be .tex. Thus, when you mistakenly
wrote \include{mychap.tex} (for example, because
you changed from \input to \include), LATEX went
ahead and looked for the file mychap.tex.tex forinclusion and tried to use the file mychap.tex.aux forinternal (auxiliary) information. The reason was that\include had to construct both of these file names fromthe given argument and it didn’t bother to do anything
special with the supplied extension .tex.
With the new implementation this has changed: theextension .tex now gets removed/ignored if it was
supplied. Thus \include{mychap.tex} now no longer
looks for mychap.tex.tex but loads mychap.tex anduses mychap.aux.
(github issue 486)
Normalization of robust commands in file names
The handling of file names has been modified sothat \string is applied to normalize robust commands within the file name. Previously, for example,\input{\sqrt{2}} would cause LATEX to loop indefinitely whereas with the new normalization it looks forthe file named sqrt {2}.tex (and therefore very likely
reports “file not found”).
(github issue 481)
Fix for filecontents with utf-8 chars in the file name
Since a few releases back, the filecontents environment
has allowed utf-8 characters in the file name. Therewas, however, a bug that would not allow overwriting
a file with utf-8 characters in its name. This has been
fixed and now filecontents allows any characters in
the file name.
(github issue 415)
1 In the case of \includeonly, a comma-separated list of such
names.

–64

Updates to the font selection scheme
A new hook in \selectfont
After \selectfont has changed the font, we now
run a hook (selectfont) so that packages can makefinal adjustments. This functionality was originallyprovided by the everysel package but our implementationis slightly different and uses the standard hook
management.
(github issue 444)
Change of font series/shape delayed until \selectfont
With the NFSS extensions introduced in 2020, the fontseries and shape settings can be influenced by changes
to the font family. The settings of these two are now
therefore delayed until \selectfont is executed; thisavoids unnecessary or incorrect substitutions that mayotherwise happen due to the order of declarations.
(github issue 444)

Glyphs, characters & encodings
Improved copy & paste for pdfTEX documents
When compiling with pdfTEX, additional information(from the file glyphtounicode.tex) is now added
automatically to the PDF file in order to improve
copying from, and searching in, text.
In particular, this allows the most common ligatures
to be copied as intended from all generated PDF files
without the need to explicitly load the package cmap.
(github issue 465)

Support for more Unicode characters
LATEX is quite capable of typesetting characters such as“m. ”, but until now it could not access some Unicodecharacters from the Latin Extended Additional block.
This meant that, for example, there were no Unicode
mappings for some characters that are used to write
Sanskrit words in Latin transliteration (as seen in books
about yoga, Buddhist philosophy, etc.). These charactershave now been added so that they can be entered directly
instead of using \d{m}, etc.
(github issue 484)
More “dashes” in encodings OT1, T1 and TU
When pasting in text from external sources, one
can encounter these three Unicode characters "2011(non-breaking hyphen), "2012 (figure dash) and "2015(horizontal bar), in addition to the more common "2013(en-dash) and "2014 (em-dash). In the past, these first
three produced an error message when used with pdfTEX(since they are not available in OT1 or T1 encoded fonts).
They now typeset an approximation to the glyph: e.g.,
the “figure dash” is approximated by an en-dash.
With Unicode engines they either work (when theglyph is contained in the selected Unicode font) or
they typeset nothing, producing a “Missing character”
warning in the log file.

With all engines these characters can also
now be accessed using the command names\textnonbreakinghyphen, \textfiguredash and\texthorizontalbar, respectively.
(github issue 404)
Poor man’s \textasteriskcenteredThe \textasteriskcentered symbol, used as part ofthe set of footnote symbols in LATEX, is assumed to be
implemented by every font with the TS1 encoding (whenpdfTEX is used) or with the TU encoding for the Unicode
engines. That assumption is unfortunately not correct
for all fonts since, for example, the stix2 fonts don’t
provide this glyph. A result is that one gets missing
glyph messages when using \thanks, etc.
Therefore \textasteriskcentered now checks
whether there is such a glyph and, if not, uses a normal“*”, but slightly enlarged and lowered. This may not
be perfect in all cases, but it is certainly better than no
glyph showing up.
(github issue 502)
The characters from textcomp are in the kernel
A couple of releases back, the functionality of the
textcomp package was integrated into the LATEX kernel.
Thus it is no longer necessary to load this package
in order to access glyphs such as \textcopyright,\texteuro or \textyen.
At this time the opportunity was also taken to bringsome order to the chaos surrounding the question:“which glyphs from the TS1 encoding are available
in a given font?”. This was done using an approachbased on font families and collections, with the differing
glyph coverage of the ‘text symbols’ being indicated byassigning to a font family or collection a “sub-encoding
number” that indicates which glyphs from the TS1
encoding are guaranteed to be available when using afont from that family or collection. This assignment
ensures that LATEX always errs on the side of caution,
possibly claiming that a glyph is not available even when
it in fact is.
A note on the history of “text symbols” and the TS1
encoding: The “text symbol encoding” (TS1) was
originally designed at the Cork Conference as acompanion to the T1 encoding. In it various symbols
that are not subject to hyphenation got assembled andthe textcomp package was developed to make themaccessible. Unfortunately the TEX community was a
bit too enthusiastic and included several symbols only
available in a few TEX fonts and some, such as thecapital accents, not available at all but developed aspart of the reference font implementation.
In hindsight that was a very bad idea because it
meant that other existing fonts (at the time) and laternew fonts that got developed were unable to provide thefull set of glyphs that made up the TS1 encoding. For
existing free PostScript fonts people took the extra effort–65

and produced virtual fonts that faked (some) of themissing glyphs. But this was and is a time-consuming
effort so it was done for only a few basic fonts. But
even then, only some fonts included all glyphs from
TS1 so the textcomp already back then contained a long
list, dividing fonts into 5 categories according to which
glyphs were implemented and which were missing.
When we recently integrated the functionality of the
textcomp into the LATEX kernel many new free fonts
had appeared and unfortunately the chaos aroundthe question “which glyphs of the TS1 encoding are
implemented by which font” had increased with it.
Not only did one find many new holes, it was next to
impossible to order the set of fonts into a reasonable setof sub-encodings that are contained in each other in asingle sequence.
In the end we decided on nine or ten sub-encodings
with a reasonable number of fonts in each so that all
fonts implemented all glyphs of the sub-encoding they
got mapped to. Thus when typesetting with a font
one could be sure that a command like \textcopyleft
would either typeset the requested character (if the glyph
was part of the sub-encoding the font belonged to) or it
would raise an error, saying that the glyph is unavailable
in that font. The mapping would ensure that LATEX
always errs on the side of caution, because it mightclaim a glyph is unavailable even though in fact it is.
For example, the old pcr (PostScript Courier) font
(as well as most other older PS fonts) is mapped to subencoding 5 and therefore claims that \textasciigrave
is unavailable even though in fact for Courier this is nottrue. If one uses such a font and this becomes an issue
then there are a couple (suboptimal) possibilities. For
one, one can alter the mapping of Courier and pretendthat belongs to a fuller sub-encoding, e.g.
\DeclareEncodingSubset{TS1}{pcr}{2}
The downside is, that LATEX then believes other glyphs
that are in fact unavailable are also there, so that it isimportant to check that the final document doesn’t havesome missing glyphs.
An alternative is to pretend that \textasciigrave
can always be taken from the TS1 encoding (no questions
asked):New or improved commands
Adjusting itemize labels with \labelitemfont
The command \labelitemfont was introduced alreadywith the LATEX release 2020-02-02, but back then we
forgot to describe it, so we do this now. Its purpose isto resolve some bad formatting issues with the itemize
environment and also to make it easier to adjust thelayout when necessary. What could happen in thepast was that the itemize labels (e.g., the •) would
sometimes react to surrounding font changes and could
then suddenly change shape, for example to •.
This new command \labelitemfont, which defaults
to \normalfont, can be used to provide additional
control in the typesetting of each label. Thus bychoosing different settings other effects can be achieved.
Here are two examples:\renewcommand\labelitemfont{\normalfont\fontfamily{lmss}\selectfont}\renewcommand\labelitemfont{\rmfamily\normalshape}
The first definition will take the symbols from the font
Latin Modern Sans, so that you get •, –, ∗ and· ; while
the second variant freezes the font family and shape,
but leaves the series as a variable quantity, so that an
itemize in a bold context would show bolder symbols.
Making \labelitemfont empty would give you backthe buggy old behavior.
(github issue 497)
Producing several marks for one footnote
It is sometimes necessary to reference the same footnote
several times: i.e., to produce several footnote marks
using the same number or symbol. This is now easily
possible by placing a \label within the referenced\footnote and referencing this label by using the
new command \footref. This means that footnote
marks can be generated to refer to arbitrary footnotes(including those in minipages).
This \footref command has previously been
available, but only when using certain classes or thefootmisc package.
(github issue 482)

Allow \nocite in the preamble
A natural place for \nocite{*} would be the preambleof the document, but for historical reasons LATEX issued
anerror message if it was placed there. This command\DeclareTextSymbolDefault{\textasciigrave}{TS1}
is now allowed in the preamble.
(github issue 424)
Again there is a danger that this is not true when it isused with a different font and would then generate a
Made \\ generally robust
missing glyph.
In 2018 most LATEX user-level commands were madeFinally, and possibly the best solution, if not
robust, including the \\ command. However, \\ gets
impossible for other reasons, is to simply use a different
redefined in various environments and not all these cases
font, for example, to use the TEX Gyre Cursor font (awere caught: such as, in particular, its use as the row
reimplementation of Courier with a much more completedelimiter in tabular structures. This has been correctedglyph set).
so that \\ should now be robust in all circumstances.
–66

This change also fixed one anomaly present in the
past: in a tabular preamble of the form
{l>{\raggedright}p{10cm}r}a \\ in the second column would have the definition
used within \raggedright and so it would not indicate
the (premature) end of the tabular. Thus, for example,a & b1 \\ b2 & c \\was interpreted as a single row of the tabular (asintended), whereasa &\\ b2 & c \\resulted in two rows! This happened because the \\directly following the & got interpreted while it still had
the “end the row” meaning and not yet the “start a newline within the second column” meaning.
With \\ now being robust, the special scanning mode
initiated by the & ends immediately when this commandis seen: the second column is therefore then started,which results in the \\ being interpreted as being
within that column and hence as having its expected,
within-column, meaning.
We have restored consistency here: now both of theabove lines produce a single tabular row. As before,
you can put \raggedright\arraybackslash in thetabular’s preamble for a column to ensure that \\ isalways interpreted as a tabular row separator when usedin that column. And you can use \tabularnewline
to explicitly ask for a new table row, even when \\has a different meaning within the current column.
(github issue 548)

Allow extra space between name and address in letter class
The \opening command in the letter class expects thename and address to be separated by \\, but it didn’t
allow the use of an optional argument to add some extra
space after the name. The code has now been slightly
altered to allow this.
(github issue 427)
Additions to \tracingall
In July 2020 David Jones suggested an extension
to TEX engines, that added the possibility to set\tracinglostchars=3 in order to generate an error
message in case some character is missing from afont. In previous years, a warning about a missing character was silently printed to the .log file
(if \tracinglostchars > 0) and to the terminal(if > 1). This extension was added for TEX Live and
MiKTEX (except in Knuth’s TEX, of course), so thatwith \tracinglostchars > 2 you now also get an error
message for each missing glyph.
Later, in January 2021, Petr Olšák suggested
yet another extension: a new primitive parameter\tracingstacklevels that, when both it and\tracingmacros are positive, will add to the tracing
information for each macro a visual indication (using
dots) of its nesting level in the macro expansion stack.

These changes have both now been added to LATEX’s
debugging macros \tracingall and \tracingnone, sothat these two new extensions are activated/deactivatedas appropriate, so long as the TEX engine supports them.
An example document demonstrating these parametersis in the linked GitHub issue.
(github issue 524)

Code improvements
Execute \par at the end of \marginpar
Previously, LATEX ended a \marginpar without ever
explicitly calling \par. This command is now explicitly
added because it is essential to the correct working of
the paragraph hooks.
Another case where this issue caused problems was
the lineno package, where the last line was not numbered
if the \marginpar ended without an explicit \par.
(github issue 489)

Execute \AtEndDocument hook in vertical mode
Until now \end{document} executed the code from the\AtEndDocument hook as its first action. This meantthat this hook was executed in horizontal mode if theuser left no empty line after the last paragraph. As
a result, one could get a spurious space added when,for example, that code contained a \write statement.
This was fixed and now \enddocument first issues a\par to ensure that it always goes into vertical mode.
(github issue 385)

Color groups made permanent
The use of color in certain LATEX constructs, especiallyboxes, needs an extra layer of grouping to ensurethat the color setting does not escape and continue
outside the box when it shouldn’t. To support this,the LATEX kernel defines a number of commands, e.g.,\color@begingroup to be used in such places.
Until now, these commands were initially set as no-ops
and only the color packages redefined them to become
real groups; this methodology complicates the coding
as one has to account for a group being present or not(depending on what is loaded in the document). The
kernel therefore now permanently adds these “colorgroups”.
(github issue 488)
Provide the raw option list to key/value option handlers
Before any further processing of the option list, theoriginal (un-normalized, “raw” and unchanged) list of
package or class options is now saved, as \@raw@opt@...;
this list is not used by the standard option processing
code but it is now available for use by extended
class/package processing systems. Note that, forcompatibility reasons, the standard option processing
code has not been changed.
One aspect of this change does affect the standard
processing: any tokens to the right of an = sign are
removed from consideration when constructing the–67

“unused option list”. For example, in this releaseclip=true and clip=false both contribute clip to thelist of options that have been used.
(github issue 85)
New for latexrelease : \NewModuleRelease
To explain the need for this new feature, we shallconsider the following example: in the 2020-10-01
release, LATEX’s new hook management system wasadded to the kernel (see [3]) and, as with all changes
to the kernel, it was added to latexrelease; this made it
possible to roll back to a date where this module didn’t
yet exist, or to roll forward from an older LATEX releaseto get the hook management system (by loading thelatexrelease package). However, this method of rollingback from a later release to the 2020-10-01 release
didn’t quite work because it would try to define all thecommands from lthooks again; and this would of course
result in the expected errors from commands definedwith \newcommand or (as in lthooks) \cs_new:Npn.
To solve such issues, we now provide\NewModuleRelease so that completely new modules can be defined using the facilities of latexreleasein such a way that, when rolling back or forward, thesystem will know whether the code of the new module
has to be read or completely ignored. More details on
this can be found in the latexrelease documentation (getthis with texdoc latexrelease).
(github issue 479)
Small fix for rolling back prior to 2020-02-02
Whereas the latexrelease package can usually emulate anolder LATEX kernel without much problem, rolling back to
before the 2020-02-02 release didn’t work properly: thisis because the management of the \ExplSyntaxOn/Off
status for packages (after an expl3-based package isloaded) cannot be removed by the rollback without
messing up the catcodes. This has been fixed so thatrollback is now more careful not to leave \ExplSyntaxOn
after a package ends.
(github issue 504)

Changes to packages in the tools category
layout: Added language options
This package now recognizes japanese and romanian as
language options.
(github issues 353 and 529)
array and longtable: Make \\ generally robust
The fix for this issue was also applied to these packages;
see above.
(github issue 548)
longtable: General bug fix update
This is a minor update to the longtable package thatfixes several reported bugs: notably the possibility ofincorrect page breaks when floats appear on the page
where a longtable starts. As this may affect page
breaking in existing documents, a rollback to longtable
4.13 (longtable-2020-01-07.sty) is supported.
(gnats issue tools/2914 3396 3512)(github issue 133 137 183 464 561)

trace: Additions to \traceon
The \tracingstacklevels and \tracinglostchars
extensions to \tracingall (see above) were also added
to \traceon in the trace package, so its users canalso benefit from these new debugging possibilities.
(github issue 524)

bm: Better support for commands with optional arguments
Some uses of optional arguments in \bm stopped being
supported (in 2004) when \kernel@ifnextchar wasused internally by the format instead of \@ifnextchar.
This update handles both versions of this command andrestores the original behavior.
In addition, package options for guiding the use of“poor man’s bold” in fallback situations were added.
(github issue 554)

Changes to packages in the amsmath category
The fix for issue 548 was also applied in amsmath; seeabove.
(github issue 548)

Changes to packages in the graphics category

References

Removed warning when loading graphics files
A previous release sometimes mistakenly caused a(false) warning message to appear when using a genericgraphics rule to find and load a graphics file with an
unknown extension. This warning would incorrectly saythat the file was not found, whereas the file would infact be correctly loaded. The warning now doesn’t show
up in that case.
(github issue 516)

[1] Frank Mittelbach and Chris Rowley: LATEX Tagged
PDF—A blueprint for a large project.
https://latex-project.org/publications/indexbyyear/2020/

Fixed loading of gzipped PostScript files
A previous release mistakenly changed the file searchingmechanism so that compressed PostScript graphics
files would raise an error when being loaded with\includegraphics. This has been fixed so that gzippedgraphics files now load correctly.
(github issue 519)

[2] LATEX documentation on the LATEX Project Website.
https://latex-project.org/help/documentation/[3] LATEX Project Team: LATEX 2ε news 32.
https://latex-project.org/news/latex2e-news/
ltnews32.pdf–68

LATEX News
Issue 34, November 2021 (LATEX release 2021-11-15)

Contents
Introduction

69

Hook business
69
Provide \ActivateGenericHook . . . . . . . . 69
Standardized names for the generic hooks . . . 70
Some file hooks made one-time . . . . . . . . . 70
Clearing extra hook code for the next invocation 70
Cleaning up after \UseOneTimeHook . . . . . . 70
\RemoveFromHook with a missing code label . . 70
Patching commands with parameter tokens . . 71
New or improved commands\NewCommandCopy and \ShowCommand extended
Undo math alphabet allocations if necessary . .
New default value for \tracinglostchars . . .
\PackageNote and \ClassNote added . . . . .
New \ShowFloat command . . . . . . . . . . .
New argument for \counterwithin/without .
Tests for package and class loading . . . . . . .
Better handling for a misuse of \include . . .

71
71
71
71
71
72
72
72
72

Code improvements
72
Use OpenType version of Latin Modern
Upright Italic font . . . . . . . . . . . . . 72
Additional Extended Latin characters predefined 72
Check \endfoo in \NewDocumentEnvironment . 72
Improve the error message \begin ended by ... 72
Pick up all arguments to \contentsline . . . 72
Allow dropping a math list in LuaTEX callback 72
Extended label handling in package code . . . . 73
Better message if text accent used in math mode 73
Bug fixes
Replicate argument processors for all
embellishments in command declarations .
Correct case changing of \ij and \IJ . . . . .
Legacy font series default changes . . . . . . .
Use of # in \textbf and similar commands . .

73
73
73
73
73

Changes to packages in the amsmath category 73
Improved compatibility with hyperref . . . . . . 73
Changes to packages in the graphics categorygraphicx: New key, for alt text . . . . . . . . . .

74
74

Changes to packages in the tools category
array: No \mathsurround around a tabular . .
longtable: Improvements after a section heading
multicol: Better column break control . . . . .
varioref: Improved handling of missing labels .

74
74
74
74
74

Introduction
This release of LATEX does not contain any major
new modules, but is focused around consolidation andimprovements of the functionality introduced in previous
releases. In addition, various smaller enhancements andbug fixes have been added to the kernel and the corepackages.

Hook business
Since the introduction of the hook management systemin the 2020 release of LATEX [4] package developers
have started to make more and more use of this new
functionality. One result of this increased activity has
been a number of queries which show that some of the
documentation was not precise enough and that someclarifications were needed; these deficiencies have now
been addressed in the documentation. The increased
usage has also revealed a small number of errors that
we thought should be corrected now, while the adoption
rate is still relatively small; the following problems havetherefore been addressed in this release.
Provide \ActivateGenericHook
The hook management system offers a number ofgeneric hooks, i.e., hooks whose names contain avariable component such as the name of an environment.
Predeclaring such hooks is not feasible, so thesehooks use a different mechanism: they are implicitly
available, springing into life the moment a package,or the document preamble, adds any code to one byusing \AddToHook. The kernel offers such hooks forenvironments (env/...) and commands (cmd/...),
and also for files, packages and classes (file/...,
include/..., package/..., class/...).
It is also possible to offer such generic hooks inpackages if, for example, hooks are needed that dependon the current language and therefore need the language
name as part of the hook name (but you probably don’tknow beforehand all the necessary names).
If you want to offer such generic hooks, you can
now do this by using \UseHook or \UseOneTimeHook

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2021, all rights reserved.

–69

in your (package) code, but without declaring thehook with \NewHook. However, without further work,a call to \UseHook with an undeclared hook namewill do nothing; so, as an additional setup step, it isnecessary to explicitly activate the generic hook by using\ActivateGenericHook.1
Assuming that you don’t know all the different hooknames up front, it will remain the task of the users ofyour package to activate the hook themselves before
adding code to it. For example, Babel offers hooks suchas babel/⟨language ⟩/afterextras that enable a user
to add language specific declarations to these “extras”.
One can then write\ActivateGenericHook{babel/ngerman/afterextras}\AddToHook{babel/ngerman/afterextras}{\color{blue}}
after which all German words would be colored blue inthe text.
Note that a generic hook produced in this way isalways a normal hook.
Standardized names for the generic hooks
The initial set of generic hooks provided by the kernel
had two patterns of names: ones like env/⟨name⟩/after,with the variable, ⟨name⟩, part in the middle position;and ones like file/after/⟨name⟩, with the variable partin the third position. The coexistence of these two types
caused confusion because the user had to remember inwhich position the variable part was supposed to go;
and it also made the code more complicated and slower.
The file-related hooks have therefore been renamed sothat the variable part of the name is in the middle, aswith all other hooks. The changes are listed here:
Old name
New namefile/before/⟨name ⟩→ file/⟨name ⟩/before
file/after/⟨name ⟩→ file/⟨name ⟩/after
package/before/⟨name ⟩ → package/⟨name ⟩/before
package/after/⟨name ⟩ → package/⟨name ⟩/afterclass/before/⟨name ⟩ → class/⟨name ⟩/before
class/after/⟨name ⟩→ class/⟨name ⟩/after
include/before/⟨name ⟩ → include/⟨name ⟩/before
include/end/⟨name ⟩→ include/⟨name ⟩/end
include/after/⟨name ⟩ → include/⟨name ⟩/after

Since this is a breaking change, the old names will stillwork for a while so that users and package authors haveenough time to adjust; but a warning will be issued
when the old names are used. Eventually the deprecatednames will be turned into errors and then removed
completely.
(github issue 648)
1 Note that in the previous release we offered \ProvideHook asa means to achieve this effect, but the name was badly chosen so
we decided to deprecate it and now offer \ActivateGenericHook
instead.

Some file hooks made one-timeClasses, packages and included files can only be loaded
once in a LATEX document. For this reason, the hooks
that are specific to loading such files have been madeone-time hooks. Beside being more efficient, this
supports the following important use case
\AddToHook{package/varioref/after}{... apply when the package gets loaded,or apply now (if it is already loaded) ...}
without the need to first test whether the package isalready loaded.
(github issue 623)
Clearing extra hook code for the next invocation
There are a few use cases where it is helpful if one cancancel an earlier use of \AddToHookNext: for example,
when a page is discarded with \DiscardShipoutBox
because only some pages of the document are printed.
For such situations the new command \ClearHookNext
is now provided.
(github issue 565)
Cleaning up after \UseOneTimeHook
Some hooks are meant to be used only once in adocument, and any further attempt to add code to oneof these will cause the code to be executed immediately
instead of being added to the hook. The initial
implementation of this concept was very simple anddidn’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 cases (such as the begindocumenthook) but it causes trouble if the one-time hook was
intended, for example, as an initialization hook that isused just once (when a command is first called) but isthen ignored in further calls.
This deficiency has been addressed, and now a
one-time hook will only be executed once, with its
code being removed after use to free up some memory.
(github issue 565)

\RemoveFromHook with a missing code label
In the first version of \RemoveFromHook, when thecode label to be removed didn’t exist in the hook a“removal order” would be queued; and then, the nexttime something tried to add that label to the hook,this \AddToHook action would be cancelled by theremoval order, so that no code would be added that one
time. This was so that, in principle, package loading
order wouldn’t matter. However, this implementation
didn’t work as intended because, while two \AddToHook
actions with a given label would be removed by asingle \RemoveFromHook, one \RemoveFromHook could
not cancel two \AddToHook actions for that label; thiscaused confusion and also led to further problems.
The implementation has now been changed, so that
\RemoveFromHook removes only code labels that already–70exist in a hook: it will display a warning if there is nosuch code label.
Note that, whereas when working with a single
package you should use \RemoveFromHook to remove a
code label, when working with more than one package,
the voids relation should preferably be used. This isbest because this relation is non-destructive (meaningthat it can be reverted later by using another relation),and it is also truly independent of package loading order.
(github issue 625)

Patching commands with parameter tokens
In the last release, LATEX’s hook mechanism was
extended to add support for hooking into commands
using generic cmd hooks (see [5]). That version of theextension had a bug: the patching of some commands
that contained a parameter token (normally #) in theirdefinition would fail with a low-level TEX error. This
has now been fixed so that patching now works for thosecommands as well.
(github issue 697)

New or improved commands\NewCommandCopy and \ShowCommand extended
Since the 2020-10-01 release (see [4]), LATEX has
provided \NewCommandCopy to copy robust commands,
and \ShowCommand to show their definitions on theterminal. In that same release, the xparse package
was integrated into the kernel (as ltcmd) to offer\NewDocumentCommand, etc. However, the extended
support for \NewCommandCopy and \ShowCommand was
not implemented in ltcmd. The present LATEX release
implements this support, so now commands definedwith \NewDocumentCommand and friends can also be
copied, and their definitions can be easily shown on theterminal without the need for “\csname gymnastics”.
(github issue 569)

Undo math alphabet allocations if necessary
TEX, or more exactly the 8-bit versions of TEX, suchas pdfTEX, have a hard limit of 16 on the number ofdifferent math font groups (\fam or \mathgroup) thatcan be used in a single formula. For each symbol fontdeclared (by a package or in the preamble) an extra
math group is allocated, and the same happens foreach math alphabet, (such as \mathbf) once it gets
used anywhere in the document. Up to now, thesemath alphabet allocations were permanent, even if they
were used only once; the result was that in complex
documents you could easily run out of available mathfont groups. The only remedy for this was to define
your own math version, which is a complicated andcumbersome process.
This situation has now been improved by the
introduction of a new counter localmathalphabets:
this counter governs how many of the math group slots

are assigned locally when a new math alphabet (and a
new math group) is needed. Once the current formula isfinished, every such further (local) allocation is undone,
giving you a fighting chance of being able to use different
new math alphabets in the next formula.
The default value of localmathalphabets is 2, but if
you need more local alphabets because of the complexityof your document, you can set this to a higher value
such as 4 or 5. Setting it even higher is possible, but
this would seldom be useful because many group slots
will be taken up by symbol fonts and such slots arealways permanently allocated, whether used or not.
(github issue 676)

New default value for \tracinglostchars
In 2021 all TEX engines were enhanced so that\tracinglostchars supported the value 3 to turn
missing characters into errors and not just warnings.
This engine change made us realize that LATEX should
set a better default value for this parameter (previously,
the warning was written only to the transcript file).
Using the now available value of 3 as the default would
be ideal, but for compatibility reasons we have only
increased it to 2 in the kernel. However, we recommend
setting \tracinglostchars=3, in either a package or
the preamble of your documents: this is because having
missing glyphs in the output is definitely an error andshould therefore be flagged as such (to ensure that it gets
proper attention). Further reasons, related especially toUnicode engines, for making this recommended change
are explained later in this newsletter (in connection withthe misuse of text accents in math mode).
\PackageNote and \ClassNote added
LATEX offers these three commands: \PackageError tosignal errors that stop the processing; \PackageWarning
to generate a warning message on the terminal but
continue with the processing; and \PackageInfo toprovide some information that is only written to the.log file but not sent to the terminal. What has notexisted up to now is a way to provide information on theterminal that identifies itself as coming from a specificpackage but which does not claim to be a warning.
(Packages that wanted to write to the terminal used
\PackageWarning even though the information was notin fact a warning.)
We have therefore now added \PackageNote (andthe closely related \PackageNoteNoLine); these identify
themselves as “informational”, but they still go to
the terminal and not only to the .log file. Similarcommands exist for classes and so there too we havenew commands: \ClassNote and \ClassNoteNoLine.
(github issue 613)
–71New \ShowFloat command
The package fltrace offers a (fairly low-level but very
detailed) way to trace LATEX’s float mechanism. Thiscan help in understanding 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\bx@A, \bx@B, etc., and these names show up in the
tracing information.
To display the contents of a float register, you can
now say \ShowFloat{identifier} where identifier is theuppercase letter (or letters) after bx@ in the registername shown in the tracing. If additional registers havebeen allocated (with \extrafloats), the identifier canalso be a number. The command is generally available,
whether or not you have loaded fltrace, because it isalso useful when interpreting the tracing output of thefewerfloatpages package.
New argument for \counterwithin/without
The commands \counterwithout and \counterwithineach now has an additional optional argument, similar
to that of the command \numberwithin from amsmath,for which these are now the preferred replacements.
This optional argument specifies the format of thecounter, such as \roman; the default value is \arabic.
Alternatively, you can use a starred form, in which casethe format of the counter is not altered at all.
Tests for package and class loading
To test whether a package has been loaded you can
now use \IfPackageLoadedTF {⟨package⟩} {⟨true⟩}{⟨false⟩} and, based on the result, execute different
code. It is also possible to check whether the package
was loaded with certain options. This is done with
\IfPackageLoadedWithOptionsTF. It takes four
arguments: {⟨package⟩}{⟨option-list⟩}{⟨true⟩}{⟨false⟩}.
It uses the ⟨false⟩ code if one or more options inthe ⟨option-list⟩ were not specified when loading the
package, or if the package has never been loaded. Bothcommands can be used anywhere in the document, i.e.,they are not restricted to the preamble.2
For classes, similar commands, with Package replacedby Class in the name, are provided. (github issue 621)
Better handling for a misuse of \include
The command \include has by now been used quite
often, but erroneously, to input a variety of files in thepreamble of the document (before \begin{document}).
Therefore LATEX now warns about such bad use of\include. As a recovery action it will nevertheless input
the specified file if it exists (this is as before). Note,however, that this is now done without any adjustments
to the .aux file settings and without running the2 This is now also true for the corresponding internal commands,e.g., \@ifpackageloaded, that had this restriction in the past.

\include file hooks (only the generic file hooks from
\InputIfFileExists are run).
(github issue 645)

Code improvements
Use OpenType version of Latin Modern Upright Italic fontWhen a Latin Modern font is used with the TU encoding
under XETEX or LuaTEX and fontshape ui is requested,
LATEX now uses the OpenType version of the font insteadof substituting the (T1-encoded) Type 1 version.
Additional Extended Latin characters predefinedMore characters, such as ḱ (U+1E31), are now predefined and do not need a \DeclareUnicodeCharacter
declaration.
(github issue 593)
Check \endfoo in \NewDocumentEnvironment
The \newenvironment command has always checkedthat neither \foo nor \endfoo exists before creating a foo environment. In contrast (for historicalreasons) the more recently introduced command\NewDocumentEnvironment checked only for \foo. The
behavior of \NewDocumentEnvironment now aligns withthat of \newenvironment, except that it gives distinct
errors concerning the existence of \foo and \endfoo.
Improve the error message \begin ended by ...
In the past it was possible to get an error message
along the lines of “\begin{foo} ended by \end{foo}”.
This could happen when the environment name waspartly hidden inside a macro. It happened because thetest was comparing the literal strings, whereas in theerror message these got fully expanded. This has now
been changed to show a more sensible error message.
(github issue 587)

Pick up all arguments to \contentsline
A \contentsline command in the .toc file is always followed by four arguments, the last one being
empty except when using the hyperref package. The\contentsline command itself only used the first threearguments and it relied on the fourth being empty (andthus doing no harm). But this assumption is not always
correct: e.g., if you at first decide to load hyperref but
then later you remove this loading from the preamble.
So now all four arguments are picked up, with the fourth
being saved away so that it can be used by hyperref.
(github issue 633)

Allow dropping a math list in LuaTEX callback
The LuaTEX callbacks pre_mlist_to_hlist_filter
and post_mlist_to_hlist_filter no longer create anerror when the callback handler indicates removal of theentire math list.
(github issue 644)
–72

Extended label handling in package code
Since 2020, as noted in LATEX News 32 [4], LATEX
has recorded the name of the counter associatedwith the current label in the internal command\@currentcounter. This facility (originally from thezref package of Heiko Oberdiek) can be used to generateprefixes such as “Figure” before the reference text, aslong as the counter is not counting different objects
in a single sequence (e.g., lemmas and theorems).
In the most common cases the current label is set
by \refstepcounter, which automatically stores thecounter name; but some constructs (alignments andfootnotes) may need to store the current label directly
and so for these it is useful to update additionally\@currentcounter so as to store this counter name.
In this release both the footnote command in the
kernel and also some of the environments in the amsmathpackage have been updated in this way. We encourage
the maintainers of any class or package files that define\@currentlabel to also set \@currentcounter at thesame point.
(github issue 300, 687)
Better message if text accent used in math mode
Using text accents like \^ in math does not work (andTEX explicitly provides math accents such as \hat foraccessing such symbols in math mode). Therefore LATEX
issued a warning when such a wrongly placed accent was
encountered and this was often followed by a strange,
and apparently unrelated, low-level error. This has now
been changed so that the message from this error is atleast about accents, which we hope is less puzzling.
Discussion of such warnings or errors reminds us
to reinforce here a recommendation from earlier inthis newsletter, as part of the item on the value of\tracinglostchars. Using TEX implementations
from 2020 onwards, any warning that concerns missing
characters can be converted to an error by setting\tracinglostchars to 3; we therefore now recommend
changing this setting to 3, especially for Unicode engines
where such missing characters are common (because no
font supports the full Unicode range). (github issue 643)

Bug fixes
Replicate argument processors for all embellishments incommand declarations
There was a bug in ltcmd (formerly xparse) that caused
commands to misbehave if they were defined withembellishments 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 and thus
leading to unpredictable behavior. This bug has been
fixed by applying the same argument processors to all
the embellishments in a set, so that a declaration like:\NewDocumentCommand\foo{>{\TrimSpaces}e{_^}}{(#1)[#2]}\foo^{ a }_{ b }will now correctly apply \TrimSpaces to both arguments.
(github issue 639)

Correct case changing of \ij and \IJ
The ligatures “ĳ” and “Ĳ”, as used in Dutch, areavailable (for most TEX fonts) only when the commands\ij or \IJ are used, or when you enter them as theUnicode characters U+0133 or U+0132. However, whenusing OT1 or T1 encoded fonts in pdfTEX, the upper orlower casing with \MakeUppercase and \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 using the OT1 encoding).
(github issue 658)
Legacy font series default changes
In the past, changes to the font series defaults were madeby directly altering \bfdefault or \mddefault. Since
2020 there is now \DeclareFontSeriesDefault thatallows more granular control: with this declaration you
can alter the default for individual meta font families
by, for example, changing the bold setting only for thesans serif family, without changing it for \rmfamily or\ttfamily. See [3] for more details.
For backwards compatibility, changing \bfdefault
with \renewcommand remained possible; if used, thisalters the setting for all meta families in one go. This
alteration cannot be done when the \renewcommand
happens and it was therefore delayed until the nexttime \bfseries or \mdseries was executed. However,the problem with that approach was that any call to\DeclareFontSeriesDefault in the meantime was
overwritten; thus, these two approaches didn’t work wellin combination. There was a problem because older font
packages use the legacy method while newer ones use\DeclareFontSeriesDefault.
This has now been resolved by changing\DeclareFontSeriesDefault to do any necessary resetting prior to setting the new defaults. (github issue 663)
Use of # in \textbf and similar commands
Previously you could not use the macro parametercharacter # in inline functions within the argumentof \textbf or similar text font commands. Aninternal definition is now guarded with \unexpanded
so that the use of # here no longer generates an error.
(github issue 665)

Changes to packages in the amsmath category
Improved compatibility with hyperref
This change in amsmath fixes a spacing problem causedby the method used in hyperref to change the equation–73

environment. For simplicity, an explicit, low-level (hence
possibly temporary) patch has been added to amsmath:this consists of an extra, empty (hence invisible)\mathopen atom (with no mathematical meaning) at
the start of the environment’s mathematical content.
(github issue 652)

Changes to packages in the graphics categorygraphicx: New key, for alt text
A new key, alt, has been added to \includegraphics tosupport the addition of descriptive text that is important
for accessibility. This key is unused by default; it can be
deployed by extension packages and it will provide usefulsupport for other future possibilities. (github issue 651)

Changes to packages in the tools category
array: No \mathsurround around a tabular
A tabular environment is typeset (internally) as anarray environment with special settings, and it therefore
uses (hidden) math mode. Since it is not in fact a mathformula, no extra space from \mathsurround should be
added (the spacing around the tabular should not getchanged). Note that this bug has been present “forever”,
which shows that \mathsurround is never used, or atleast its use is never noticed. At any rate, this bug has
now finally been fixed.
(github issue 614)

therefore now been changed to avoid these errors.
(https: // tex. stackexchange. com/ q/ 603948)

References[1] Frank Mittelbach and Chris Rowley: LATEX Tagged
PDF—A blueprint for a large project.
https://latex-project.org/publications/indexbyyear/2020/[2] LATEX documentation on the LATEX Project Website.
https://latex-project.org/help/documentation/[3] LATEX Project Team: LATEX 2ε news 31.
https://latex-project.org/news/latex2e-news/
ltnews31.pdf[4] LATEX Project Team: LATEX 2ε news 32.
https://latex-project.org/news/latex2e-news/
ltnews32.pdf[5] LATEX Project Team: LATEX 2ε news 33.
https://latex-project.org/news/latex2e-news/
ltnews33.pdf

longtable: Improvements after a section heading
The longtable environment now sets the\@nobreakfalse flag to correct the typesetting whena table immediately follows a heading. Previously
the spacing and indentation changes that are required
immediately after a section heading were incorrectly
triggered within the next paragraph (if any) following
the table. A similar test for \if@noskipsec has been
added, so that a table is correctly placed after a run-in
heading rather than appearing before that heading.
(github issues 131 and 173)

multicol: Better column break control
From version 1.9 onwards \columnbreak accepts anoptional argument (like \pagebreak) in which you canspecify the desirability of breaking the column after thecurrent line: supported values are 0 to 4, with higher
numbers indicating increased desirability. This version
also adds \newcolumn, which forces a break but runs
the column short (comparable to \newpage for pages).
(github issue 682)

varioref: Improved handling of missing labels
If an undefined label is referenced, varioref makes adefault definition so that later processing finds theright structure (two brace groups inside \r@⟨label⟩)
However, if nameref or hyperref is loaded, this data
structure changes to having five arguments; this could
cause low-level errors in some cases. The code has–74LATEX News
Issue 35, June 2022 (LATEX release 2022-06-01)

Contents
Introduction

75

Document metadata interface

75

The latex-lab bundle

76

A new mark mechanism for LATEX

76

A key/value approach to option handling77

New or improved commands
Floating point and integer calculations . . . . .
CamelCase commands for changing arguments
to csnames . . . . . . . . . . . . . . . . .
Testing for (nearly) empty arguments . . . . .
Better allocator for Lua command ids . . . . .
Starred command version for \ref, \Ref and\pageref . . . . . . . . . . . . . . . . . .
Preparation for supporting PDF in backends .

77
77

Code improvements\protected UTF-8 character definitions . . . .
A small update to \obeylines and\obeyspaces . . . . . . . . . . . . . . . .
doc upgraded to version 3 . . . . . . . . . . . .
doc can now show dates in change log . . . . .
ltxdoc gets options nocfg and doc2 . . . . . .
LuaTEX callback improvements . . . . . . . . .
Class proc supports twoside . . . . . . . . . .
Croatian character support . . . . . . . . . . .
Cleanup of the Unicode declaration interface .
New hook: include/excluded . . . . . . . . .
Input support for normalized angle brackets . .

78
78

Bug fixes
Using \DeclareUnicodeCharacter with C1control points . . . . . . . . . . . . . . . .
Fix \ShowCommand when used with ltcmd . . .
Make \cite{} produce a warning . . . . . . . .
Fix adding cmd hooks to simple macros . . . .
Warn if shipout/lastpage hook is executed
too early . . . . . . . . . . . . . . . . . . .
More consistent use of cramped math styles in
LuaTEX . . . . . . . . . . . . . . . . . . .
Fixed bug when setting hook rules for
one-time hooks . . . . . . . . . . . . . . .

80

77
78
78
78
78

78
79
79
79
79
79
79
79
80
80

80
80
80
80
80
80
80

Changes to packages in the amsmath category
amsopn: Do not reset \operator@font . . . . .
amsmath: Error in \shoveleft . . . . . . . . .
amsmath and amsopn: Robustify user commands

81
81
81
81

Changes to packages in the graphics category
Color in formulas . . . . . . . . . . . . . . . . .
Fix locating files with \graphicspath . . . . .

81
81
81

Changes to packages in the tools category
multicol: Fix \newcolumn . . . . . . . . . . . .
bm: Fix for amsmath operators . . . . . . . . .

81
81
81

Introduction
The 2022 June release of LATEX is again focussing
on improvements made for our multi-year project toautomatically offer tagged PDF output [1]. These are
the new document metadata interface, the new markmechanism for LATEX, a standard key/value approachfor options, and the introduction of the latex-lab area
for temporary code that can be optionally loaded bya document (when \DocumentMetadata is used withcertain test keys). These additions are described in thefirst sections. Related to this effort there are updates
to hyperref and tagpdf, both of which have their own
distributions.
As usual, we also added a number of smaller
improvements and bug fixes in various components ofcore LATEX. Perhaps the most interesting ones (for someusers) are direct support for floating point arithmetic(via \fpeval; see below) and the ability to properly
color parts of math formulas without introducing
spacing problems. For this we now offer the command\mathcolor; see the description near the end of thenewsletter. There is also a new major release of the doc
package that supports a more fine-grained classificationof code elements and properly supports hyperref.

Document metadata interface
Until recently there was no dedicated location to declaresettings that affect a document as a whole. Settings
had to be placed somewhere in the preamble or as classoptions or sometimes even as package options. For somesuch settings this may cause issues, e.g., setting the PDF
version is only possible as long as the PDF output file
has not yet been opened which can be caused by loading
one or the other package.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2022, all rights reserved.

–75

For the “LATEX Tagged PDF project” [1] further
metadata about the whole document (and its processing)need to be specified and again this data should be allplaced in a single well-defined place.
For this reason we introduce the new command\DocumentMetadata to unify all such settings in
one place. The command expects a key/value listthat describes all document metadata for the current
document. It is only allowed to be used at the very
beginning of the document, i.e., the declaration has tobe placed before \documentclass and will issue an error
if found later.
At this point in time we provide only the barecommand in the format; the actual processing of the
key/value is defined externally and the necessary code
will be loaded if the command is used. This scheme
is chosen for two reasons: by adding the commandin the kernel it is available to everybody without theneed to load a special package using \RequirePackage.
The actual processing, though, is external so that we
can easily extend the code (e.g., offering additional
keys or changing the internal processing) while theabove-mentioned project is progressing. Both together
allows users to immediately benefit from intermediate
results produced as part of the project, as well as
offering the LATEX Project Team the flexibility toenable such intermediate results (for test purposes oreven production use) in-between and independently of
regular LATEX releases. Over time, tested and approved
functionality can then seamlessly move into the kernel
at a later stage without any alterations to documents
already using it. At the same time, not using the newconsolidated interface means that existing documents
are in no way affected by the work that is carried out
and is in a wider alpha or beta test phase.
Documentation about the new command and alreadyexisting keys are in ltmeta (part of source2e.pdf)
and documentmetadata-support.pdf and also in the
documentation of the pdfmanagement-testphase package.
Package and class authors can test if a user has used
\DocumentMetadata with \IfDocumentMetadataTF.

The latex-lab bundle
We added a new latex-laboratory bundle in which weplace new code that is going to be available only througha \DocumentMetadata declaration and that is—mostimportantly—work under development and subject
to change without further notice. This means thatcommands and interfaces provided there may get alteredor removed again after some public testing. The code
can be accessed through the \DocumentMetadata key
testphase. Currently supported values are phase-I
and phase-II that enable code of the tagged PDF
project (phase I is frozen, and phase II is the phase weare currently working on). With
\DocumentMetadata{testphase=phase-II}
you currently enable tagging for paragraphs andfootnotes; more document elements will follow soon.
Eventually, code will move (once considered stable)from the testphase into the LATEX kernel itself.
Tagging will continue to require a \DocumentMetadatadeclaration, but you will then be able to drop the
testphase key setting.

A new mark mechanism for LATEX
The mark mechanism is TEX’s way to pass information
to the page-building process, which happens asynchronously, in order to communicate relevant data forrunning headers and footers to the latter, e.g., whatis the first section on the page or the last subsection,etc. However, marks may also be used for other purposes. The new kernel module provides a generalizedmechanism for marks of independent classes.
The TEX engines offer a low-level mark mechanism
to communicate information about the content of thecurrent page to the asynchronous operating output
routine. It works by placing \mark commands into thesource document.
This mechanism works well for simple formats (suchas plain TEX) whose output routines are only called togenerate pages. It fails, however, in LATEX (and othermore complex formats), because here the output routine
is sometimes called without producing a page, e.g., when
encountering a float and placing it into one of the float
regions. When that happens TEX’s \topmark no longer
reflects the situation at the top of the next page whenthat page is finally boxed.
Furthermore, TEX only offered a single mark while
LATEX wanted to keep track of more than one piece of
information. For that reason, LATEX implemented its
own mark mechanism where the marks always contained
two parts with their own interfaces: \markboth
and \markright to set marks and \leftmark and\rightmark to retrieve them.
Unfortunately, this extended mechanism, while
supporting scenarios such as chapter/section marks, wasfar from general. The mark situation at the top of apage (i.e., \topmark) remained unusable and the twomarks offered were not really independent of each otherbecause \markboth (as the name indicates) was always
setting both.
The new mechanism now available in LATEX startingwith the 2022 release overcomes both issues:• It provides arbitrary many, fully independent
named marks, that can be allocated and from thatpoint onwards used.
–76

• It offers access for each such mark to retrieve its
top, first, and bottom value separately.
• Furthermore, the mechanism is augmented to giveaccess to marks in different “regions”, which may
be other than full pages.
The legacy interfaces, e.g., \markboth, are kept. Thus
classes and packages making use of them continue towork seamlessly. To make use of the extended possibility
a new set of commands for the declaration of markclasses, setting their values and querying their state (inthe output routine) is now available in addition. You findthe documentation for the new interfaces together with
examples and further notes on the mechanism in the file
ltmarks-doc.pdf. Just call texdoc ltmarks-doc todisplay it on your computer.

A key/value approach to option handling
The classical LATEX 2ε method for handling options,using \ProcessOptions, treats each entry in the list asa string. Many package authors have sought to extend
this handling by treating each entry as a key–value pair(keyval) instead. To date, this has required the use ofadditional packages, for example kvoptions.
The LATEX team have for some time offered the
package l3keys2e to allow keyvals defined using the L3
programming layer module l3keys to act as package
options. This ability has now been integrated directly
into the kernel. As part of this integration, the syntax
for processing keyval options has been refined, such that
\ProcessKeyOptions
will now automatically pick up the package name as
the key family, unless explicitly given as an optional
argument:\ProcessKeyOptions[family]
To support creating key options for this mechanism,
the new command \DeclareKeys has been added. This
works using the same general approach as l3keys or
pgfkeys: each key has one or more properties which
define its behavior.
Options for packages which use this new approach
will not be checked for clashes by the kernel. Instead,each time a \usepackage or \RequirePackage line isencountered, the list of options given will be passed
to \ProcessKeyOptions. Options which can only begiven the first time a package is loaded can be marked
using the property .usage = load, and will result in awarning if used in a subsequent package loading line.
Package options defined in this way can also be set
within a package using the new command \SetKeys,
which again takes an optional argument to specify thefamily, plus a mandatory one for the options themselves.

New or improved commands
Floating point and integer calculations
The L3 programming layer offers expandable commands
for calculating floating point and integer values, but
so far these functions have only been available toprogrammers, because they require \ExplSyntaxOn
to be in force. To make them easily available at the
document level, the small package xfp defined \fpeval
and \inteval.
An example of use could be the following:\LaTeX{} can now compute:\[ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}= \fpeval{sin(3.5)/2 + 2e-3}\]
which produces the following output:
LATEX can now compute:sin(3.5)+ 2 · 10−3 = −0.1733916138448099
2
These two commands have now been moved into thekernel and in addition we also provide \dimeval and\skipeval. The details of their syntax are described inusrguide3.pdf. The command \fpeval offers a rich
syntax allowing for extensive calculations, whereas theother three commands are essentially thin wrappers
for \numexpr, \dimexpr, and \glueexpr—therefore
inheriting some syntax peculiarities and limitations in
expressiveness.
\newcommand\calculateheight[1]{%\setlength\textheight{\dimeval{\topskip+ \baselineskip * \inteval{#1-1}}}}
The above, for example, calculates the appropriate\textheight for a given number of text lines.
(github issue 711)

CamelCase commands for changing arguments to csnames
It is sometimes helpful to “construct” a command nameon the fly rather than providing it as a single \...
token. For these kinds of tasks the LATEX3 programminglayer offers a general mechanism (in the form of\exp_args:N... and \cs_generate_variant:Nn).
However, when declaring new document-level commands
with \NewDocumentCommand or \NewCommandCopy, etc.
the L3 programming layer may not be active, and even
if it is, mixing CamelCase syntax with L3 programming
syntax is not really a good approach. We have therefore
added the commands \UseName and \ExpandArgs toassist in such situations, e.g.,\NewDocumentCommand\newcopyedit{mO{red}}{\newcounter{todo#1}%\ExpandArgs{c}\NewDocumentCommand{#1}{s m}%{\stepcounter{todo#1}%\IfBooleanTF {##1}%
–77

}

}%

{\todo[color=#2!10]%{\UseName{thetodo#1}: ##2}}%{\todo[inline,color=#2!10]%{\UseName{thetodo#1}: ##2}}%

which provides a declaration mechanism for copyedit
commands, so that \newcopyedit{FMi}[blue] thendefines \FMi (and the necessary counter).
The command \ExpandArgs can be useful with the argument cc or Nc in combination with \NewCommandCopy
if the old or new command name or both need constructing. Finally, there is \UseName which takes its argument
and turns it into a command (i.e., a CamelCase versionof \@nameuse (LATEX 2ε ) or \use:c (L3 programminglayer)) which was also used in the example above.
(github issue 735)

Testing for (nearly) empty arguments
In addition to \IfNoValueTF to test if an optional
argument was provided or not, there is now also
\IfBlankTF, which tests if the argument is empty or
contains only blanks. Based on the result it selects a trueor false code branch. As usual, the variants \IfBlankTand \IfBlankF are also provided for use when only
one branch leads to some action. Further details andexamples are given in usrguide3.pdf.
Better allocator for Lua command ids
In LuaTEX we already had the \newluafunction macro
which allocates a Lua function identifier which canbe used to define commands with \luadef. But thisalways required two steps: \newluafunction defines
the passed control sequence as an integer, which thenhas to be used to define the actual Lua commandwith \luadef. After that, the integer is no longer
needed. This was inconsistent with other allocators.
Therefore we added two new allocators \newluacmd and\newexpandableluacmd which directly define a control
sequences invoking the allocated Lua function. The
former defines a non-expandable Lua command, thelatter an expandable one. Of course, the associated Lua
function still has to be defined by assigning a function to
the lua.get_functions_table() table. The required
index is available in \allocationnumber.
An example could be\newluacmd \greeting\directlua {lua.get_functions_table()[tex.count.allocationnumber]= function()
local name = token.scan_argument()
tex.sprint(’Hello ’, name, ’!’)
end}

\greeting{world}(github issue 536)

Starred command version for \ref, \Ref and \pageref
For a long time hyperref has provided starred versions
for the reference commands which do not create active
links. This syntax extension required users and package
authors to check if hyperref was loaded and adjust thecoding accordingly or take the starred forms out if
text was copied to a document without hyperref. The
commands have now been aligned with the hyperref
usage and always allow an optional star. The showkeys
package has been updated to handle the starred versions
too, both with hyperref or nameref and without. The
commands are defined with \NewDocumentCommand andso no longer expand when written to auxiliary files.
This reduces the number of compilations needed toresolve references in captions and sectioning commands.
The package ifthen has been updated to ensure that\pageref can still be used inside tests like \isodd.
Preparation for supporting PDF in backends
At the current point in time, basic support for PDF
in backends is not part of LATEX core; it is provided
by an external package like hyperref. At some timein the future that work will be placed into the kernel
but for now it is separate and has to be explicitly
loaded in the document. To enable class and package
authors to support PDF-specific tasks like the creationof link targets without having to test first if hyperref
has been loaded, dummy versions of the commands\MakeLinkTarget, \LinkTargetOn, \LinkTargetOffand \NextLinkTarget are provided.

Code improvements\protected UTF-8 character definitions
The characters defined via utf8.def are now defined
as \protected macros. This makes them safe touse in expansion contexts where the classic \protect
mechanism is not enabled, notably L3 programminglayer e and x arguments.
Related to this change \MakeUppercase and\MakeLowercase have been updated to use the Unicodeaware case changing functions \text_lowercase:nin place of the TEX primitive \lowercase. The\NoCaseChange command from the textcase package has
also been added.
Note: for technical reasons these low-level character
handling changes will not be rolled back if the format
version is rolled back using the latexrelease package
rollback mechanism.
(github issue 780)
A small update to \obeylines and \obeyspaces
The plain TEX versions of \obeylines and \obeyspaces
make ^^M and ␣ active and force them to execute \par–78and \space, respectively. Don Knuth makes a remark
in the TEXbook that one can then use a trick such as\let\par=\cr \obeylines \halign{...
However, redefining \par like this may lead to all kindsof problems in LATEX. We have therefore changed thecommands to use an indirection: the active charactersnow execute \obeyedline and \obeyedspace, which inturn do what the hardwired solution did before.
This • means • that • it • is • now • possible • to
• achieve • special • effects • in • a • safe • way.
• This • paragraph, • for • example, • was •produced • by • making • \obeyedspace • generate• {\␣\textbullet\␣} • and • enabling •\obeyspaces • within • a • quote • environment.

Thus, if you are keen to use the plain TEX trick, you needto say \let\obeyedline=\cr now.
(github issue 367)
doc upgraded to version 3
After roughly three decades the doc package received acautious uplift, as already announced at the 2019 TUG
conference—changes to doc are obviously always done ina leisurely manner.
Given that most documentation is nowadays viewed onscreen, hyperref support is added and by default enabled(suppress it with option nohyperref or alternatively
with hyperref=false) so the internal cross-references
are properly resolved including those from the index
back into the document.
Furthermore, doc now has a general mechanism todefine additional “doc” elements besides the two Macroand Env it has known in the past. This enables better
documentation because you can now clearly markdifferent types of objects instead of simply calling themall “macros”. If desired, they can be collected together
under a heading in the index so that you have a section
just with your document interface commands, or withall parameters, or . . .
The code borrows ideas from Didier Verna’s dox
package (although the document level interface isdifferent) and it makes use of Heiko Oberdiek’s hypdoc
package, which at some point in the future will becompletely integrated, given that its whole purpose
it to patch doc’s internal commands to make themhyperref-aware.
All changes are expected to be upward compatible,
but if you run into issues with older documentation
using doc a simple and quick solution is to load the
package as follows: \usepackage{doc}[=v2]
doc can now show dates in change log
Up to now the change log was always sorted byversion numbers (ignoring the date that was givenin the \changes command). It can now be sorted
by both version and date if you specify the option

reportchangedates on package level and in that casethe changes are displayed with⟨version⟩ – ⟨date⟩as the heading (instead of just ⟨version⟩), when using\PrintChanges.
(github issue 531)
ltxdoc gets options nocfg and doc2
The LATEX sources are formatted with the ltxdoc class,which supports loading a local config file ltxdoc.cfg.
In the past the LATEX sources used such a file but it
was not distributed. As a result reprocessing the LATEX
sources elsewhere showed formatting changes. We now
distribute this file which means that it is loaded bydefault. With the option nocfg this can be prevented.
We also added a doc2 option to the class so that it ispossible to run old documentation with doc version 2, if
necessary.
LuaTEX callback improvements
The LuaTEX callbacks hpack_quality andvpack_quality are now exclusive and therefore
only allow a single handler. The previous type list
resulted in incorrect parameters when multiple handlers were set; therefore, this only makes an existing
restriction more explicit.
Additionally the return value true for list callbacks
is now handled internally and no longer passed on to theengine. This simplifies the handling of these callbacks
and makes it easier to provide consistent interfaces foruser-defined list callbacks.
Class proc supports twoside
The document class proc, which is a small variation on
the article class, now supports the twoside option,
displaying different data in the footer line on recto andverso pages.
(github issue 704)
Croatian character support
The default inputenc support has been extended tosupport the 9 characters DŽ, Dž, dž, LJ, Lj, lj, NJ,
Nj, nj, input as single UTF-8 code points in the range
U+01C4 to U+01CC.
(github issue 723)
Cleanup of the Unicode declaration interface
When declaring encoding specific commands for
the Unicode (TU) encoding some declarations (e.g.,\DeclareUnicodeComposite) do not have an explicit
argument for the encoding name, but instead use thecommand \UnicodeEncodingName internally. There
was one exception though: \DeclareUnicodeAccentrequired an explicit encoding argument. This inconsistency has now been removed and the encoding nameis always implicit. To avoid a breaking change for a
few packages on CTAN, \DeclareUnicodeAccent still
accepts three arguments if the second argument is TU or–79

\UnicodeEncodingName. Once all packages have been
updated this code branch will get removed.
At the same time we added \DeclareUnicodeCommandand \DeclareUnicodeSymbol for consistency. They
also use \UnicodeEncodingName internally, instead ofrequiring an encoding argument as their general purpose
counterparts do.
(github issue 253)

Fix adding cmd hooks to simple macros
A bug in how LATEX detected the type of a command
caused a premature forced expansion of such commands,
which, depending on their definition, could be harmlessor could cause severe trouble. This has been fixed in thelatest release.
(github issue 795)

New hook: include/excluded
A few releases ago we introduced a number of filehooks for different types of files; see [2] and inparticular [4]. The hooks for \include files now havean addition: if such a file is not included (because\includeonly is used and its ⟨name⟩ is not listed in
the argument) then the hooks include/excluded andinclude/⟨name ⟩/excluded are executed in that order—of course, only if they contain code. This happens after
LATEX has loaded the .aux file for this include file, i.e.,
after LATEX has updated its counters to pretend that thefile was seen.

Warn if shipout/lastpage hook is executed too early
The hook shipout/lastpage is intended to place\specials into the last page shipped out. This isneeded for some use cases, e.g., tagging. If that hook is
nonempty and the user has added additional pages since
the last run, then LATEX executes this hook too early,
but until now without giving any indication that the
document needs rerunning. This has now been corrected
and an appropriate warning is given. (github issue 813)

Input support for normalized angle brackets
Source files containing 〈 or 〉 directly written as Unicode
codepoints U+2329 and U+232A no longer breakwhen the source file gets normalized under Unicode
normalization rules.
(github issue 714)

Bug fixes
Using \DeclareUnicodeCharacter with C1 control points
An error in the UTF-8 handling for non-Unicode TEX
has prevented \DeclareUnicodeCharacter being usedwith characters in the range hex 80 to 9F. This has beencorrected in this release.
(github issue 730)
Fix \ShowCommand when used with ltcmd
When \ShowCommand support was added for ltcmd in
the previous release [3], a blunder in the code made itso that when \ShowCommand was used on a command
defined with ltcmd, it only printed the meaning of thecommand in the terminal, but didn’t stop for interaction
as it does elsewhere (mimicking \show). The issue is
now fixed.
(github issue 739)
Make \cite{} produce a warning
When the \cite command can’t resolve a citation label
it issues a warning “Citation ‘⟨label⟩’ on page ⟨page⟩
undefined”. However, due to some implementation
details a completely empty argument was always
silently accepted. Given that there are probably people
who write \cite{} with the intention to fill in thecorrect label later it is rather unfortunate if that is not
generating a warning that something in the document isstill amiss. This has finally been corrected and a warning
is now generated also in this case.
(github issue 790)

(https: // tex. stackexchange. com/ q/ 637565)

More consistent use of cramped math styles in LuaTEX
Using LuaTEX’s \Udelimiterover to place a horizontallyextensible glyph on top of a mathematical expression now
causes the expression to be set in cramped style, as usedin similar situations by traditional TEX math rendering.
Similarly, cramped style is now used for expressions set
under such a delimiter using \Uunderdelimiter, but is
no longer used when setting an expression on top of suchextensible glyphs using \Uoverdelimiter. This new
behavior follows TEX’s rule that cramped style is usedwhenever something else appears above the expression.
Additionally the math style of these constructs can now
be detected using \mathstyle.
The old behavior can be restored by adding\mathdefaultsmode=0
to a document.
Fixed bug when setting hook rules for one-time hooks
If a \DeclareHookRule command is set for a one-time
hook, it has to come before the hook gets used, because
otherwise it never applies—after all, the hook is used
only once. There was a bug in the implementationin that the sorting mechanism was still applied if the\DeclareHookRule declaration appeared while the
one-time hook was executed, causing the spurious
typesetting of the code labels and the hook name. Thisbug is now fixed and an error is raised when a newsorting rule is added to an already-used one-time hook.
A possible scenario in which this new error is raisedis the following: package AAA declares a hook rule forbegindocument (i.e., \AtBeginDocument) to sort out
the behavior between itself and some other package.
Package BBB wants to load package AAA but only if
it hasn’t been loaded in the preamble, so delays theloading to begindocument. In that case the hook ruledeclared by AAA can no longer be applied and you get
the error. If that happens the solution is to load the–80

package in begindocument/before, which is executed atthe very end of the preamble but before begindocument
is processed.
(github issue 818)

Changes to packages in the amsmath category
amsopn: Do not reset \operator@font
The package amsopn used to define \operator@font
but this command has been provided by the LATEX
format for at least 14 years. As a result the definition inamsopn is equivalent to a reset to the kernel definition,
which is unnecessary and surprising if you alter themath setup (e.g., by loading a package) and at a laterstage add amsmath, which then undoes part of yoursetup. For this reason the definition was taken out andamsmath/amsopn now relies on the format definition.
In the unlikely event that you want the resetting tohappen, use\makeatletter\def\operator@font{\mathgroup\symoperators}\makeatotherafter loading the package.
(github issue 734)
amsmath: Error in \shoveleft
If \shoveleft started out with the words “plus” or“minus” it was misunderstood as part of a rubber lengthand led either to an error or was swallowed without
trace. By adding a \relax this erroneous scanning
into the argument of \shoveleft is now prevented.
(github issue 714)

amsmath and amsopn: Robustify user commands
Most user-level commands have been made robust in
the LATEX kernel during the last years, but variant
definitions in amsmath turned them back into fragile
beings. We have now made most commands in amsmath
and amsopn robust as well to match the kernel behavior.
This also resolves a bug recently discovered in themathtools package, which was due to \big not being
robust after amsmath was loaded.
(github issue 123)

Leaving out any of the \color commands or any ofthe {{...}} will give you a wrong result instead of thedesired
n
X
X=
xi
i=1

So even if this is possible, it is not a very practicalsolution and furthermore there are a number of cases
where it is impossible to color a certain part of a formula,for example, an opening symbol such as \left( but not
the corresponding \right).
We have therefore added the command \mathcolor
to the color and xcolor package, which has the same
syntax as \textcolor, but is specially designed for use
in math and handles sub and superscripts and otheraspects correctly and preserves correct spacing. Thus,
the above example can now be written as\[ X = \mathcolor{red}{\sum}_{i=1}^n x_i \]This command is only allowed in formulas. For details
and further examples, see mathcolor.pdf.
Fix locating files with \graphicspath
If a call to \includegraphics asked for a file (say,image) without extension, and if both A/image.pdf andB/image.tex existed (both A/ and B/ in \graphicspath,but neither in a folder searched by TEX), thenA/image.pdf would not be found, and a “file notfound” error would be incorrectly thrown. The issue
is now fixed and the graphics file is correctly found.
(github issue 776)
(https: // tex. stackexchange. com/ q/ 630167)

Changes to packages in the tools category
multicol: Fix \newcolumn
The recently added \newcolumn didn’t work properly if used in vertical mode, where it behaved
like \columnbreak, i.e., spreading the column material out instead of running the column short.
(https: // tex. stackexchange. com/ q/ 624940)

Changes to packages in the graphics category
Color in formulas
While it is possible to color parts of a formula using\color commands the approach is fairly cumbersome.
For example, to color a summation sign, but not its
limits, you need four \color commands and someseemingly unnecessary sets of braces to get coloring andspacing right:\[ X = \color{red} \sum
% without {{ the superscript below is misplaced_{{\color{black} i=1}}% without {{ the \sum is black^{{\color{black} n}}\color{black}% without it the x_i is red
x_i\]

bm: Fix for amsmath operators
An internal command used in the definition of operator
commands such as \sin in amsmath has been guarded in\bm to prevent internal syntax errors due to premature
expansion.
(github issue 744)

References[1] Frank Mittelbach and Chris Rowley: LATEX Tagged
PDF—A blueprint for a large project.
https://latex-project.org/publications/indexbyyear/2020/[2] LATEX Project Team: LATEX 2ε news 32.
https://latex-project.org/news/latex2e-news/
ltnews32.pdf–81

[3] LATEX Project Team: LATEX 2ε news 34.
https://latex-project.org/news/latex2e-news/
ltnews34.pdf[4] Frank Mittelbach, Phelype Oleinik,
LATEX Project Team: The ltfilehook documentation.
Run texdoc ltfilehook-doc to view.

–82

LATEX News
Issue 36, November 2022 (LATEX release 2022-11-01)

Contents
Introduction

83

Auto-detecting key/value arguments

83

A note for font package developers
Encoding subsets for TS1 encoded fonts . . . .

83
83

New or improved commands
Better language handling for case-changing
commands . . . . . . . . . . . . . . . . . .

84

Code improvements
Support for slanted small caps in the EC fonts
EC sans serif at small sizes . . . . . . . . . . .
Improve font series handling with incorrect.fd files . . . . . . . . . . . . . . . . . . .
Detect nested minipage environments . . . . .
Robust commands in package options . . . . .
Improve l3docstrip integration into docstrip . .
LuaTEX callback efficiency improvement . . . .
Rule-based ordering for LuaTEX callback
handlers . . . . . . . . . . . . . . . . . . .

84
84
84

Bug fixes
Prevent TEX from losing a \smash . . . . . . .
Resolve an issue with \mathchoice andlocalalphabets . . . . . . . . . . . . . .
Reporting of unused global options whenusing key/value processing . . . . . . . . .

85
85

Changes to packages in the graphics category
Fix a \mathcolor bug . . . . . . . . . . . . . .

85
85

Changes to packages in the tools category
array: Correctly identify single-line m-cells . . .

85
85

argument does in fact contain such a key/value list or
just a single “classical” value.
For the “Tagged LATEX Project” this functionality isvery important because many document-level commands
will need to accept such key/value lists, for example, tospecify alternative text or overwrite default tagging ifthat becomes necessary in a document.

Auto-detecting key/value arguments
84

84
84
84
84
85
85

85
85

Introduction
The 2022-11 release of LATEX is largely a consolidation
release where we made a number of minor improvements
to fix some bugs or improve one or the other interface.
The only really important functionality that was added
is described in the next section: the ability to easily
define document-level commands and environments that
accept a key/value list in one of its (usually optional)
arguments, including the ability to determine if the

To allow extension of the core LATEX syntax, ltcmd now
supports a =... modifier when grabbing arguments.
This modifier instructs LATEX that the argument shouldbe passed to the underlying code as a set of key/values.
If the argument does not “look like” a set of key/values,
it will be converted into a single key/value pair, withthe argument to = specifying the name of that key. For
example, the \caption command could be defined as\DeclareDocumentCommand\caption{s ={short-text}+O{#3} +m}{...}
which would mean that if the optional argument does
not contain key/value data, it will be converted to asingle key/value pair with the key name short-text.
Arguments which begin with =, are always interpreted
as key/values even if they do not contain further = signs.
Any = signs enclosed within $...$ or \(...\), i.e. in
inline math mode, are ignored, meaning that only =outside of math mode will generally cause interpretation
as key/value material.
In case the argument contains a “textual” = sign thatis mistaken as a key/value indicator you can hide it
using a brace group as you would do in other places,e.g.,\caption[{Use of = signs}]{Use of = signs in optional arguments}
However, because = signs in math mode are alreadyignored, this should seldom be necessary.

A note for font package developers
Encoding subsets for TS1 encoded fonts
The text companion encoding TS1 is unfortunately notvery faithfully supported in fonts that are not close
cousins to the Computer Modern fonts. It was therefore
necessary to provide the notion of “sub-encodings” on a
per font basis. These sub-encodings are declared for a

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2022, all rights reserved.

–83

font family with the help of a \DeclareEncodingSubset
declaration, see [5] for details.
Maintainers of font bundles that include TS1 encoded
font files should add an appropriate declaration into
the corresponding ts1family.fd file, because otherwise
the default subencoding is assumed, which is probably
disabling too many glyphs that are actually available in
the font.1(github issue 905)

New or improved commands
Better language handling for case-changing commands
The commands \MakeUppercase, \MakeLowercase
and \MakeTitlecase now automatically detect the
locale currently in use when babel is loaded. This
allows automatic adjustment of letter mappings whereappropriate. They also accept a leading optional
argument. This accepts a key–value list of control
settings. At present, there is one key available: locale,
which can also be accessed via the alias lang. This isintended to allow local setting of the language, which
can be done using a BCP-47 descriptor. For example,
this could be used to force Turkish case changing inotherwise English input\MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}
yields RAGIP HULÛSİ ÖZDEM.

Code improvements
Support for slanted small caps in the EC fonts
For some time LATEX has supported the combinationof the shapes small caps and italic/slanted. The EC
fonts contain slanted small caps fonts but using themrequired the loading of an external package. Suitable
font definitions have now been added to t1cmd.fd and sofrom now on\usepackage[T1]{fontenc}...
\textsc{\textsl{Slanted Small Caps}};\textsc{\textit{Italic Small Caps}};\bfseries\textsc{\textsl{Bold Slanted Small Caps}};\textsc{\textit{Bold Italic Small Caps}}.
will give the expected result: Slanted Small Caps;
Italic Small Caps; Bold Slanted Small Caps;
Bold Italic Small Caps.
Given that the Computer Modern fonts in T1 do nothave real italic small caps but only slanted small caps,
the latter is substituted for the former. This is why both
work in the above, but there is no difference between
1 The LAT X format contains declarations for many font fami-

Elies already. This was done in 2020 to quickstart the use of thesymbols in the kernel, but it is really the wrong place for such declarations. Thus, for new fonts the declarations should be placed
into the corresponding .fd files.

the two (and you get a substitution warning for the\textit\textsc shape combination). (github issue 782)
EC sans serif at small sizes
The EC (T1 encoded Computer Modern) sans serif fonts
have errors at small sizes: the medium weight is bolder
and wider than the bold extended. This makes them
unusable at these small sizes. The default .fd file has
therefore been adjusted to use a scaled down 8pt fontinstead.
(github issue 879)
Improve font series handling with incorrect .fd files
By convention, the font series value is supposed tocontain no m, unless you refer to the “medium” series(which is represented by a single m). For example, one
should write c for “medium weight, condensed width”
and not mc. This was one of the many space-conserving
methods necessary in the early days of LATEX 2ε .
Some older .fd files do not obey that convention but
use mc, bm, etc., in their declarations. As a result, some
font selection scheme functionality was not working
when confronted with such .fd files. We have therefore
augmented \DeclareSymbolFont and \SetSymbolFont
to strip any surplus m from their series argument so thatthey do not unnecessarily trigger font substitutions.
Regardless of this support such .fd files should get fixedby their maintainers.
(github issue 918)
Detect nested minipage environments
Nesting of minipage environments is only partially
supported in LATEX and can lead to incorrect output,
such as overfull boxes or footnotes appearing in thewrong place; see [1, p. 106]. However, until now there
was no warning if that happened. This has been changed
and the environment now warns if you nest it in anotherminipage environment that already contains footnotes.
(github issue 168)

Robust commands in package options
With the standard key-based option handler added in
the last release, or with contributed packages offering
similar features, users may expect to be able to use apackage option such as [font=\bfseries]. Previously
this failed with internal errors as the option list was
expanded via \edef. This has now been changed to use
the existing command \protected@edef so that any
LATEX robust command should be safe to pass to a key
value option.
(github issue 932)
Improve l3docstrip integration into docstrip
In 2020 we merged l3docstrip.tex into docstrip.tex tosupport the %<@@=⟨module ⟩> syntax of expl3; see [2].
However, this support was incomplete, because it didn’t
cover docstrip lines of the form %<+...> or %<-...>. This
was never noticed until now, because usually %<*...>
blocks are used. Now all lines in a .dtx file are subject
to the @@ replacement approach.
(github issue 903)
–84

LuaTEX callback efficiency improvement
The mechanism for providing the
pre/post_mlist_to_hlist_filter callbacks in
LuaTEX has been improved to make it more reusable
and to avoid overhead if these callbacks are not used.
(github issue 830)

Rule-based ordering for LuaTEX callback handlers
In LuaLATEX the callback handlers used to be calledin the order in which they were registered in, but thiswas often rather fragile. It depends a lot on the loadorder and any attempts to enforce a different order
required unregistering and reregistering the handlers
to be reordered. Additionally, even if some ordering
constraints where enforced that way, another package
loaded later could accidentally overwrite it.
To improve this, we now order the callback handlers
based on ordering rules similar to the hook rules.
When registering a callback which should
run before or after another callback,luatexbase.declare_callback_rule can now be
used to record this ordering constraint. For example
luatexbase.add_to_callback(’pre_shaping_filter’, my_handler, ’my_name’)luatexbase.declare_callback_rule(’pre_shaping_filter’,’my_name’, ’before’, ’other_name’)will ensure that my_handler will always be called before
the handler registered as other_name.
This also means that the order in which callbacks areregistered no longer implicitly defines an order. Codewhich relied on this implicit order should now define theorder rules explicitly.

Bug fixes
Prevent TEX from losing a \smash
When TEX is typesetting a fraction, it will rebox
the material in either the numerator or denominator,
depending on which is wider. If the repackaged partconsists of a single box, that box gets new dimensions
and if it was built using a \smash that effect vanishes(because a smash is nothing other than zeroing somebox dimension, which now got undone). For example, inthe line

The differences are subtle but noticeable. This is now
corrected and the \smash is always honored. Thus now
you get this output:
1100
1= X ̸= X222(github issue 517)
Resolve an issue with \mathchoice and localalphabets
The code for keeping a number of math alphabets
local (introduced in 2021; see [3]) used \aftergroup to
do some cleanup actions after a formula had finished.
Unfortunately, \aftergroup can’t be used inside thearguments of the \mathchoice primitive and as aresult one got low-level errors if the freezing happened
in such a place. The implementation was therefore
revised to avoid the \aftergroup approach altogether.
(github issue 921)

Reporting of unused global options when using key/value
processing
Using the new key/value option processor did notproperly report any unused global options when it wasused in handling class options. This has now beencorrected.
(github issue 938)

Changes to packages in the graphics category
Fix a \mathcolor bug
The \mathcolor command introduced in [4] needs toscan for following sub- and superscripts, but if it did
so at the end of an alignment cell, e.g., in a arrayenvironment, the & was evaluated too early, causing
some internal errors. This is now properly guarded for.
(github issue 901)

Changes to packages in the tools category
array: Correctly identify single-line m-cells
Cells in m-columns that contain only a single line aresupposed to behave like single-line p-cells and align at
the same baseline. To test for the condition, array used
to compare the height of the cell to the height of thestrut used for the table rows. However, the height ofthat strut depends on the setting of \arraystretch andif you made this negative (or very large) the test cameout wrong. Therefore, we now test against the heightof a normal strut to ensure that single-line cells arecorrectly identified as such (unless their content is truly
very tall, in which case aligning is pointless anyway).
(github issue 766)

\frac{1}{2} = \frac{1}{\smash{2^X}}\neq \frac{100}{\smash{2^X}}

Referencesthe 2 in the denominators was not always at the samevertical position, because the second \smash was ignored
due to reboxing:
1
100
1= X ̸= X
22
2[1] Leslie Lamport. LATEX: A Document Preparation
System: User’s Guide and Reference Manual.
Addison-Wesley, Reading, MA, USA, 2nd edition,
1994. ISBN 0-201-52983-1. Reprinted with correctionsin 1996.
–85

[2] LATEX Project Team: LATEX 2ε news 32.
https://latex-project.org/news/latex2e-news/
ltnews32.pdf[3] LATEX Project Team: LATEX 2ε news 34.
https://latex-project.org/news/latex2e-news/
ltnews34.pdf[4] LATEX Project Team: LATEX 2ε news 35.
https://latex-project.org/news/latex2e-news/
ltnews35.pdf[5] LATEX Project Team: LATEX 2ε font selection.
https://latex-project.org/help/documentation/–86

LATEX News
Issue 37, June 2023 (LATEX release 2023-06-01)

Contents
New functionality offered as part of the“LATEX Tagged PDF” project

Changes to packages in the tools category
multicol: Better support for CJK languages . .
multicol: Fix handling of nested environments .

92
92
92

87

New or improved commands
Extending hooks to take arguments . . . . . . .
Generic cmd hooks with arguments . . . .
Providing copy and show functions forenvironments . . . . . . . . . . . . . . . .
\IfFileAtLeastTF . . . . . . . . . . . . . . . .
\DeclareLowercaseMapping,\DeclareTitlecaseMapping and\DeclareUppercaseMapping . . . . . . .
\BCPdata . . . . . . . . . . . . . . . . . . . . .
Improve \samepage . . . . . . . . . . . . . . .
Groups in \MakeUppercase . . . . . . . . . . .
Extension of the \label command . . . . . . .

88
88
88

Code improvements
Performance in checking file existence . . . . .
doc: Handle \␣ correctly in the index . . . . .
doc: Support the upquote package . . . . . . .
Default definition for \do . . . . . . . . . . . .
New key for filecontents . . . . . . . . . . .
A further hook for shipping out pages . . . . .
Displaying release information in the .log . . .

89
89
89
89
90
90
90
90

Bug fixes
Incompatibility between doc and unicode-math
A fix for \hspace . . . . . . . . . . . . . . . . .
Ensure that \cs is defined in ltxdoc . . . . . . .
Improve spacing at top of minipages . . . . . .
A fix for \NewCommandCopy and \ShowCommand
Corrections for switching math version . . . . .
Allow par as a filename . . . . . . . . . . . . .
Correct setting of \endlinechar in +v
arguments . . . . . . . . . . . . . . . . . .
Correct handling of hooks with only ‘next’ code
Ignoring space after $$ . . . . . . . . . . . . . .

90
90
90
90
90
91
91
91

Documentation improvements
Updates to the guides . . . . . . . . . . . . . .
Displaying the exact release dates for LATEX . .
Fresh from the press: “The LATEX Companion,
third edition” is now in print . . . . . . .

91
91
91

88
88

New functionality offered as part of the “LATEXTagged PDF” project
We have now enabled new automatic tagging functionality for additional LATEX elements, among them mostdisplay environments, standard sectioning commands,
content, figure and table listings, floats and graphics andbibliographies. This can be activated through\DocumentMetadata{testphase=phase-III}

88
89
89
89
89

91
91
91

91

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 (article, report,
and 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 partiallywork) but at this stage it is not very likely, at least notfor packages or classes that excessively alter internals of
LATEX.
Also note that there are still several environments andcommands described in the LATEX manual that do nothave tagging support yet, notably tabulars, tabbing,the various math environment and a few others. They
will get this support as part of phase-III, but some ofthem will be delayed until after the June release.
A prototype for math tagging (including support for
the amsmath environments) is already available, but it ismainly intended for experimentation and feedback andthe 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:\DocumentMetadata{testphase={phase-III,math}}
Note that the math tagging code at this point in time will
clash with packages that redefine the $ character (whichthen may lead to strange errors) and that packages thatuse 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 latex-lab bundle contains various (still untagged) documentation files about the new code thatcan be accessed with texdoc -l latex-lab.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2023, all rights reserved.

–87

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

New or improved commands
Extending hooks to take arguments
Hooks have always been containers for code whose
outcome was entirely dependent on the contents of thehook alone. If any type of contextual information had
to be passed to the hook, it had to be done by settingsome variable before the hook so that the code in thehook 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 “hook before thehook” to do that setup.
To make things a bit easier, 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#1, #2, etc., so now hooks can behave more like macros
than like token lists (using expl3 terminology). Regularargument-less hooks continue to work exactly like they
did before: this extension is completely compatible witholder documents and packages.
To declare a hook with arguments, use\NewHookWithArguments {<hook>} {<num-args>}

then, similarly, to use the code in the hook, supposing ahook declared with 2 arguments, write\UseHookWithArguments {<hook>} {2} {<arg1>} {<arg2>}

Or, if you want to add some code to a hook that takes
arguments, write\AddToHookWithArguments {<hook>} [<label>] {<code>}

exactly like you would for regular hooks, except thatthe ⟨code⟩ can use the arguments by referencing #1, #2,
etc. In this case, if you want to add an actual parameter
token (#) to the ⟨code⟩, you have to double it, as usual.
Additionally, if you want to add “regular” code toa hook with arguments, you can still use \AddToHook— in that case # tokens are not doubled. This meansthat a package author can decide to add arguments toan existing hook without worrying about compatibility:\AddToHook will do the right thing and will not
mistakenly reference the newly added arguments.
The commands \NewReversedHookWithArguments,\NewMirroredHookPairWithArguments,\AddToHookNextWithArguments,\UseOneTimeHookWithArguments, and the expl3
counterparts of the commands discussed in this section
were also added. The complete documentation can befound in the lthooks documentation [2].
Generic cmd hooks with arguments: Along with thepossibility of passing arguments to a regular hook as
discussed above, generic cmd hooks can now access thearguments 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\title command using hooks, you could access theactual title given in the argument. Thus, to write thetitle of the document in the terminal you could use:
\AddToHookWithArguments{cmd/title/before}{\typeout{Document title: #1}}
As with regular hooks, code added to a cmd hook using\AddToHook will not be able to access the command’sarguments. This means that, as with regular hooks, thischange is completely backwards compatible, so previous
usages of cmd hooks will work exactly as they did before.
Providing copy and show functions for environments
To copy a command definition we introduced\NewCommandCopy in 2022. This even allows you
to copy commands that consist of several internal
components, such as robust commands or those witha complex signature. To do the same with environments, e.g., to define the environment myitemize to beequivalent to itemize, you can now write\NewEnvironmentCopy{myitemize}{itemize}
There are also \Renew... and \Declare..., which may
be useful depending on the circumstances.
In addition, we offer a \ShowEnvironment command, which displays the \begin and \end codeof the environment passed as an argument. E.g.,\ShowEnvironment{center} results in the following
output:» \begin{center}=environment:» -»\trivlist \centering \item \relax .
«recently read» }l. ...\ShowEnvironment{center}» \end{center}:» -»\endtrivlist .
«recently read» }l. ...\ShowEnvironment{center}(github issue 963)

\IfFileAtLeastTF
The 2020-10-01 LATEX release introduced the CamelCase
tests \IfClassAtLeastTF and \IfPackageAtLeastTF
for checking class and package dates. We have now
added \IfFileAtLeastTF to allow the same to happen
for generic files which contain a \ProvidesFile line.
(github issue 1015)\DeclareLowercaseMapping,\DeclareTitlecaseMapping and\DeclareUppercaseMapping
The move from a case-changing approach using \lccodeand \uccode data to one where information is stored bya kernel-managed structure left a gap in the ability of–88

the user to tune the case changing outcomes. This has
now been addressed by the addition of three commands• \DeclareLowercaseMapping• \DeclareTitlecaseMapping• \DeclareUppercaseMapping
which can be used to customise the outcome forcodepoints. This can be applied generally or to a specificlocale (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\DeclareUppercaseMapping{"01F0}{\v{J}}allows J̌ to be produced in 8-bit engines: without thiscustomisation, an error would occur as there is no
pre-composed J̌ in Unicode. More detail is given in
usrguide.
(github issue 1033)\BCPdata
Improvements in the Unicode handling for case changing
have highlighted that the kernel has not to-date been
locale-aware. The packages babel and polyglossia provide
comprehensive locale support, but did not have anagreed unified interface to pass that information back toother code. Following discussion with the maintainers of
those two bundles, the kernel now defines \BCPdata as astub (so it is always defined), and babel and polyglossia
will redefine it to provide the locale data. An agreed
set of keywords mean that \BCPdata can be queried
in a structured way by both the kernel and any other“consumer” packages.
(github issue 1035)
Improve \samepage
The \samepage declaration sets various parameters
to 10000 to prevent undesired page breaks. The\predisplaypenalty parameter has already by default
a value of 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 adisplay formula within the scope of \samepage whenusing such classes. This has now been corrected and\predisplaypenalty is also explicitly set to 10000.
(github issue 1022)

Groups in \MakeUppercase
Prior to 2022, \MakeUppercase and \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 \MakeTitlecase),although the underlying L3 text case commands do notuse grouping.
(github issue 1021)

Extension of the \label command
Previously, in standard LATEX, the \label command
wrote a \newlabel declaration into the .aux file andstored two values in the second argument of this\newlabel command: \@currentlabel, which normallycontains the state of the current counter and \thepage
for the current page number.
The packages hyperref and nameref then patchedthe \label command to store five values instead. In
addition to the above they saved \@currentlabelname,which normally contains the current title text and canbe retrieved with \nameref, and \@currentHref, whichis the name of the destination needed to create an
active link. The fifth argument was only used if externalreferences were loaded with the xr-hyper package.
Starting with this release, the number of values
stored in \newlabel has been unified. \label now
writes a \newlabel command that always contains fivevalues in the second argument (each in a brace group):\@currentlabel, \thepage, \@currentlabelname,\@currentHref, and \@kernel@reserved@label@data(which is reserved for the kernel).
Additionally, a hook with the name label has
been added. It takes one argument: the label string.
Code added to the hook can refer to this argumentwith #1. The hook is executed directly before the\label command writes to the .aux file but after the\@bsphack command has done its spacing magic, and it
is located inside a group; thus, its code only affects thewrite operation.

Code improvements
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 repeatedfilesystem calls are avoided.
doc: Handle \␣ correctly in the index
Due to some problems in the code it wasn’t possible to prevent \␣ from showing up in the index—\DoNotIndex{\ }, etc. had no effect. This has now beencorrected.
(github issue 943)
doc: Support the upquote package
The default quote and backquote characters in typewriter
fonts are typographical quotes, e.g., the input\verb/‘prog ’my input’‘/is rendered as ‘prog ’my input’‘ and not as`prog 'my input'` as preferred by many programmers.
This can be adjusted, for example, with the upquote
package, which results in the second output. However,for historical reasons doc had its own definition of–89

\verb and verbatim and as a consequence the two
packages did not cooperate. This has now been fixedand loading upquote together with doc has the desired
effect.
(github issue 953)
Default definition for \do
The command \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\begin{document} was executed, with a result thata user definition in the preamble was unconditionally
overwritten at this point. To properly alert the userthat this command is not freely available we now make adefinition in the format, so that \newcommand and friends
produce a proper error message instead of allowing adefinition that doesn’t last.
(github issue 975)
New key for filecontents
The 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 nowarn key that redirects the overwriting warning
to the transcript file. We think that some record of theaction 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 force
key was not used), is not altered and still shows up on
the terminal.
(github issue 958)
A further hook for shipping out pages
Since October 2020 the shipout process offers anumber of hooks to adjust what is happening before,
during, and after the \shipout. For example, withthe shipout/before hook, packages can reset code
they have altered (e.g., \catcodes during verbatimlike processing) and with shipout/background andshipout/foreground material can be added to thepages. Details are given in [1].
However, still missing was a hook that allows apackage writer to manipulate the completed page (withforeground and background attached) just before theactual shipout happens. For this we now provide theadditional hook shipout. One use case (sometimes
needed in print production) is to mirror the whole
page via \reflectbox including all the extra data that
may have been added into the fore- or background.
(github issue 920)

Displaying release information in the .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 openedat this point. While this is normally true, it is not thecase if the LATEX run was started passing additional TEX
code on the command line, e.g.,

pdflatex '\PassOptionsToClass{11pt}{article}\input{myarticle}'
In this case the release information is displayed when
\PassOptionsToClass is processed but the transcript
file is only opened when the output file name is known,i.e., after \input has been seen, and as a result therelease 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 filewhere we can be sure that it is open and ready to receive
material.
(github issue 944)

Bug fixes
Incompatibility between doc and unicode-math
The unicode-math package alters the catcode of | but
does not adjust its value for use in doc, with theresult that “or” modules, i.e., ⟨A|B⟩ are displayed ina strange way. This is now fixed with some firstaidcode that will eventually be moved into unicode-math.
(github issue 820)

A fix for \hspace
The change to \hspace, done in 2020 to make it
calc-aware, had the unfortunate side effect that startinga paragraph with \hspace would result in the executionof \everypar inside a group (i.e., any local changes
would immediately be revoked, breaking, for example,
wrapfig in that special situation). This got fixed withthe 2022-11 PL1 hotfix, so was already corrected in theprevious release, but is only now documented in the
newsletter.
(github issue 967)
Ensure that \cs is defined in ltxdoc
The class ltxdoc defined the command \cs to typeset
a command name with a backslash in front. Thisdefinition was moved to the doc package itself. This
meant that it was suddenly missing when reverting tothe old doc package implementation via the class option
doc2. This has now been corrected.
(github issue 981)
Improve spacing at top of minipages
A list and several other document elements add somevertical space in front of them. However this should not
happen at the beginning of a box (such as a 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 \colorcommand, a hyperref anchor, a \write or other suchitems, then the list is no longer empty and TEX nolonger drops the vertical space.
With the new paragraph handling introduced in
2021 it is now finally possible to detect and avoid thisproblem and apply appropriate counter measures sothat from now on the spacing will always be correct.
(github issue 989)
–90

A fix for \NewCommandCopy and \ShowCommand
When copying and showing definitions of (nonexpandable) document commands (a.k.a. commands
defined by \NewDocumentCommand and friends) containing empty or only m-type arguments, these commands
were wrongly recognized as expandable ones. This isfixed in the present LATEX release.
(github issue 1009)
Corrections for switching math version
Some internal code improvements improve support for
switching math version when nested within an outermath expression. This will improve \boldsymbol and\bm and similar commands.
(github issue 1028)
Allow par as a filename\input{par} or \includegraphics{par} could give
spurious errors. This has been fixed by making aninternal command \long.
(github issue 942)
Correct setting of \endlinechar in +v arguments
In the particular case of a document command witha +v-type argument used inside \ExplSyntaxOn/Off,
newlines would be misinterpreted as spaces because
the value of \endlinechar was set too late. This has
been fixed, and now newlines are correctly translated to“the character ^^M”.
(github issue 876)
Correct handling of hooks with only ‘next’ code
When \AddToHookNext was used on a not-yet-declaredhook, that hook would be incorrectly identified as empty
by \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
\AddToHookNext is used.
(github issue 1052)
Ignoring space after $$Space is normally ignored after a closing $$, butinternal LATEX font handling code could interfere
if \eqno was used. \eqno and \leqno have been
redefined to add \ignorespaces after the math group.

material has been carried forward in the class/package
guide than in the user guide, but both are worth are-read by experienced LATEX users.
Displaying the exact release dates for LATEXIn some situations it is necessary to find out theexact 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 ofa certain feature and you therefore want to use\IfFormatAtLeastTF{⟨date⟩} or the rather horrible
construction \@ifl@t@r\fmtversion{⟨date⟩}, 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 ⟨date⟩, in whichcase you could use \NeedsTeXFormat{LaTeX2e}[⟨date⟩]
to ensure that users are alerted if their format is too old.
The big problem is knowing the exact ⟨date⟩ to put
into such commands; in the past, that was not that easy
to find. You could have looked in the file changes.txt,
but that is hidden somewhere in your installation andif you try texdoc -l changes.txt you get more than
thirty results and the right file is by no means the first.
Yukai Chou (@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: inltnews.pdf and that file conveniently also contains all
major features and changes to LATEX over the years—oneof which is most likely the reason you need the ⟨date⟩ inthe first place.
The date is now given in parentheses in the newsletter
title, thus this newsletter tells you that on 2023-06-01
the command \NewEnvironmentCopy, a new shipout
hook, etc. was made available. And looking into
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.
(github issue 982)

(github issue 1059)

Documentation improvements
Updates to the guides
When LATEX 2ε was released, the team provided documentation for both document authors and package/classdevelopers in the two files usrguide and 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 lessclarity than desirable regarding the approaches that arerecommended today.
The two files have now been (partially) re-written,
with the versions available previously now frozen as
usrguide-historic and clsguide-historic. MoreFresh from the press: “The LATEX Companion, third edition”
is now in print
The third edition of 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 theinformation 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, todescribe new important functionality and features. Morethan 5,000 add-on packages have been analyzed in detail,out of which roughly 10% have been chosen for inclusion
in The LATEX Companion. All important aspects ofthese packages are described to provide the user once–91

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 istherefore produced as a two-volume set and sold as abundle. 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
https://www.latex-project.org/news/
2023/03/17/TLC3
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.

Changes to packages in the tools category
multicol: Better support for CJK languages
The default minimum depth of each column in a
multicols corresponds to the depth of a “p” in thecurrent font. This helps to get some uniformity if rules
are used between the columns and makes sense for Latinbased 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 havethe same height and depth. And even with Latin-based
languages one might want to use the depth of a \strut
or that of a parenthesis. So we now offer a way to adjust
this while maintaining backward compatibility: redefine\multicolmindepthstring to hold whatever you wantto get measured for its depth (the width is not relevant).
(github issue 698)

multicol: Fix handling of nested environments
If multicols environments have been nested into
each other (the inner one boxed) it could fail if theboxed environment appeared near a page break. The
problem was that the output routine was called whilethe \hsize was still altered to fit the column widthof the inner multicols — thereby messing up theplacement of columns of the page. This has now been
fixed.
(github issue 1002)

References[1] Frank Mittelbach, LATEX Project Team:The ltshipout documentation.
Run texdoc ltshipout-doc to view.
[2] Frank Mittelbach, Phelype Oleinik,
LATEX Project Team: LATEX’s hook management.
Run texdoc lthooks-doc to view.

–92LATEX News
Issue 38, November 2023 (LATEX release 2023-11-01)

Contents
News from the “LATEX Tagged PDF” project
Approaching an important milestone . . . . . .
A GitHub repository dedicated to the project .

93
93
93

Hooks, sockets and plugs

93

Document properties and cross-referencing

94

New or improved commands
Testing for the LATEX3 programming layer
version: \IfExplAtLeastTF . . . . . . . .

95
95

Code improvements
95
Support for tabs in \verb* and verbatim* . . 95
Improved argument checking for box commands 95
Aligning status of tilde with other active
characters . . . . . . . . . . . . . . . . . . 95
In the programming layer . . . . . . . . . . . . 96
Removed kernel commands

96

Changes to packages in the tools category
longtable: correct p-column definition . . . . . .

96
96News from the “LATEX Tagged PDF” project
The multi-year project to automatically tag LATEX
documents in order to make them accessible [3] isprogressing steadily (at this point in time mainly as
experimental latex-lab code).
Just recently we added support for automatic tagging
of tabular structures including environments fromtabularx and longtable. The code is still in its earlystages and lacks configuration possibilities—these will
be added in the future.
Approaching an important milestone
Nevertheless, with this new addition we are more or lessable to automatically tag any document that confines
itself to the commands and environments described in
Leslie Lamport’s LATEX Manual [1] by simply adding asingle configuration line at the top.
In addition, a number of extension packages that
go beyond Lamport are already supported, mostimportantly perhaps amsmath (providing extended
math capabilities) and hyperref (enhancing LATEXwith interactive hyperlinking features). Also alreadysupported are some of the major bibliography support
packages such as natbib and biblatex.
For now activation is done through the line
\DocumentMetadata{testphase={phase-III,math,table}}
The math and the tabular support are not yet
incorporated into phase-III but need their own
activation, so that we can better experiment withadditions and code adjustments.
The latex-lab bundle contains various (still untagged) documentation files about the new code thatcan be accessed with texdoc -l latex-lab.
A GitHub repository dedicated to the project
We have also started a new GitHub repository mainly
intended for reporting issues, and offering a platform
for discussions. For example, there is one discussion
on ways to extend the LATEX tabular syntax to allow
describing the logical structure of tables (e.g., whichcells are header cells, etc.).
Having all issues and discussions related to the projectin a single place instead of being spread across multiple
repositories such as latex2e, latex3, tagpdf, hyperref,
pdfresources, etc., helps people to find information
easily and report any issue related to the project
without needing to know in which code repository the
problematic code resides.
You find this repository at https://github.com/
latex3/tagging-project and the mentioned discussion
on tabular syntax at https://github.com/latex3/
tagging-project/discussions/1.
Your feedback is important and reporting what
doesn’t yet work is beneficial to all users, so we hope
to see you there and thank you for any contribution,
whether it is an issue or a post on a discussion thread.

Hooks, sockets and plugs
In previous releases of LATEX we introduced the general
concept of hooks (both specific and generic ones). Theseare places in the code into which different packages(or the user in the document preamble) can safely
add their own code to extend the functionality ofexisting commands and environments without the need
to overwrite or patch them in incompatible ways. An
important feature of such hooks is that the code chunks
added by different packages can be ordered by rules,
if necessary, thereby avoiding problems arising fromLATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2023, all rights reserved.

–93differences in package loading order. See LATEX Newsissues 32–34 [2] for more information.
However, sometimes you need a kind of “hook” into
which only a single chunk of code is placed at any time.1
For example, there is code that implements footnote
placement in relation to bottom floats (above or belowthem). But at any time in the document only one suchplacement code can be in force. Or consider the extra
code needed for making LATEX documents accessible(e.g., adding tags to the PDF output). Such code iseither there (perhaps in alternative versions) or not at
all, but it cannot have code from other packages addedat the same point interfering with the algorithm.
For these use cases we now introduce the concept ofsockets and plugs. A socket is a place in the code into
which one can put a plug (a chunk of code with a name)after which the socket is in use; to put in a different
plug, the former one has to be taken out first.2 A socket
may or may not have inputs that can then be used by
the plugs. While this is technically not much different
to putting a command in the code and at some point
alter its definition, the advantage is that this offersa consistent interface, allows for status information,
supports tracing, etc.
You declare a new socket and possibly some plugs forit with\NewSocket{⟨socket name⟩}{⟨# of inputs⟩}\NewSocketPlug{⟨socket name⟩}{⟨plug name⟩}{⟨code⟩}
For example, after the declaration \NewSocket{foo}{0}
you can immediately use this socket in your codewith \UseSocket{foo}. The \NewSocket declaration
automatically defines a simple plug with the namenoop for the socket and assigns it to the socket (plugs
it in), thus your \UseSocket sits idle doing nothing3
until you assign it a different plug, which is done with
\AssignSocketPlug. This takes the current plug out
and puts the new one in. All the declarations andcommands are also available in the LATEX3 programminglayer as \socket_new:nn, \socket_new_plug:nnn, etc.
With this concept we can, for example, add tagging
support for the “LATEX Tagged PDF” project to various
packages without altering their behavior if the tagging
code is inactive. Activating one or the other form oftagging then just means to assign named plugs to thedifferent sockets.
This is just a brief introduction to the mechanism; for more detailed documentation see texdoc
ltsockets-doc.
1 While this is in theory possible to model with the existing hookmechanism, it is inefficient and cumbersome.
2 Think of electric outlets and plugging something into them.
3 Sockets with one input also define an identity plug and initially assign that to the socket—this means that their input is simply returned without processing.

Document properties and cross-referencing
Traditional LATEX uses \label{⟨key⟩} to record thevalues of two “local” properties of the document: thetextual representations of the current page number
and the current \ref value set by \refstepcounterdeclarations [1, p. 209]. (These declarations are issued,
for example, by sectioning commands, by numberedenvironments like equation, and by \item in an
enumerate or similar environment.)
These two recorded values can then be accessed andtypeset (from anywhere in the next run of the document)by use of the (non-expandable) commands \ref and\pageref using the key that was specified as theargument to \label when recording these values. This
supported basic cross-referencing (within a document),
using these recorded values to provide both page-related
and counter-related information (such as the page xvii
or the subsection number 4.5.2).4
Over the years LATEX packages have appeared that
extend this basic “label-ref system” in various ways.
For example, the refcount package made a small but
significant change to the functions used to accessrecorded values, by making them expandable. And
the smart-ref package supports the storage of a larger
collection of counter values so that, for example, a crossreference can refer to the relevant chapter together withan equation tag. The cleveref package stores (by meansof a second, internal “logical label”) extra informationsuch as the name of the counter. The hyperref package
adds the \autoref command, which tries to retrieve
the name of a counter from the logical name used for alink target. The tikzmarks library records information
about labelled positions on the page when using tikz.
Finally, the zref package implements many related
ideas, including a general idea of properties and lists ofproperties, with methods to record, and subsequently
access, the value of any declared property.
Starting with this release, the LATEX kernel provides
handling of general document properties as a corefunctionality with standard interfaces. This is based on
concepts introduced by the zref package but with somedifferences in detail, particularly in the implementation.
It supports the declaration of new properties, and therecording of the values of any list of properties. These
values are retrieved expandably.
To set up a new property that is the current chapter
number, for example, here is the declaration to use.
\NewProperty{chapter}{now}{?}{\thechapter}
4 In the Spring 2023 release of L
AT X, the \label command wasEextended to record, in addition, both a title (such as the text used
in a section head) and the logical name used for an associated linktarget provided these have been set by packages such as namerefor hyperref.
–94

The second argument means that the property value will
be recorded immediately (“now”), and not “during thenext \shipout”. The third argument sets a default to be
used when, for example, an unknown label is supplied.
The final argument contains the code that will, as partof the recording process, be expanded to obtain thevalue to record for this property.
Then, to record the value of this new property,
together with others, use this command.
\RecordProperties{mylabel}{chapter,page,label}This records the current values for the properties
chapter, page, and label, using mylabel as the label,or key, for the record.
To reference (i.e., retrieve) this recorded value
for use in a cross-reference to this chapter, use the\RefProperty command with two arguments: the label,or key, and the property.
\RefProperty{mylabel}{chapter}
The LATEX kernel itself contains declarations for some
generally useful properties, including these:label the textual representation of the current \refvalue, see above;
page the textual representation of the page number forthe page currently under construction;
title the title, if set by, e.g., nameref;target the logical name of the associated link target, if
set by, e.g., hyperref;
pagetarget the logical name of the target added byhyperref at the origin of each shipped out page;
pagenum the value of the LATEX counter page in Arabic
numerals;abspage the absolute page number of the page underconstruction, i.e., one more than the number of pages
shipped out so far (thus it starts at 1 and is increasedby 1 whenever a page is shipped out);
counter the name of the counter that produced thecurrent \ref value, i.e., the counter that was stepped in
the most recent \refstepcounter within the current
scope;
xpos, ypos the position on the shipped out page as set
by the most recent \pdfsavepos: recording theseproperties should be done as soon as possible aftersaving the position.
Both LATEX 2ε commands (using camel-case names)and LATEX3 programming layer commands are provided.
For a more complete documentation, see texdoc
ltproperties-doc.

New or improved commands
Testing for the LATEX3 programming layer version:\IfExplAtLeastTF
The integration of expl3 (the LATEX3 programminglayer) into the kernel means that programmers can use
all of the features available without needing to load
it explicitly. However, as expl3 is upgraded separatelyfrom LATEX 2ε and is not a separate package, itsversion is different from that of LATEX 2ε and cannot be
tested using \IfPackageAtLeastTF. To date, low-level
methods have therefore been needed to check for theavailability of features in expl3. We have now added\IfExplAtLeastTF as a test working in the same way
as \IfPackageAtLeastTF but focused on the pre-loaded
programming layer. Programmers can check the date of
expl3 they are using in the .log, as it appears both at
the start and end in the format
L3 programming layer <YYYY-MM-DD>
just after the line which identifies the format (LaTeX2e,etc.).
(github issue 1004)

Code improvements
Support for tabs in \verb* and verbatim*
LATEX converts a single tab to a single space, which isthen treated like a “real” space in typesetting. The samehas been true to date inside \verb, but was done in a
way that meant that they remained as normal spaces
even in \verb*, etc. We have now adjusted the code sothat tabs are retained within the argument to \verb and\verb*, and the verbatim and verbatim* environments,
independently from spaces, and are set up to print in thesame way spaces do. This means that they now generate
visible spaces inside \verb* and verbatim*, and their
behavior can be adjusted if required to be different fromthat of spaces.
(github issue 1085)
Improved argument checking for box commands
Previously if an alignment option had an unexpectedvalue, such as \makebox[4cm][x]{text}, no warning
was given but the box content was silently discarded.
This will now produce a warning and act like the default
c alignment. \framebox and \parbox have a similarchange.
(github issue 1072)
Aligning status of tilde with other active characters
Some time ago we revised the definition of active
characters in pdfTEX to allow the full range of UTF-8
codepoints to be used in for example labels, file names,
etc. However, ~ was not changed at that point as it isactive independent of the engine in use. This has now
been corrected: the definition of ~ is an engine-protected
one which gives the string version of the character ifused inside a csname.
–95

In the programming layer
In the programming layer (expl3), we have revised the
behavior of the titlecasing function to enable this toeither titlecase only the first word of the input, or totitlecase every word. This should be transparent at the
document level but will be useful for programmers.
We have also added the ability to define variables
and functions inside \fpeval (at the expl3 level thisis \fp_eval:n). This allows programmers to create
non-standard functions that can then be used inside\fpeval. For example, this could be used to create a
new function dinner:

Changes to packages in the tools category\ExplSyntaxOn\fp_new_variable:n{duck}\fp_new_function:n{dinner}\fp_set_function:nnn{dinner}{duck}{duck - 0.25 * duck}\fp_set_variable:nn{duck}{1}$\fp_eval:n{duck}>\fp_eval:n{dinner(duck)}\fp_set_variable:nn{duck}{dinner(duck)}>\fp_eval:n{dinner(duck)}\fp_set_variable:nn{duck}{dinner(duck)}>\fp_eval:n{dinner(duck)}\fp_set_variable:nn{duck}{dinner(duck)}>\fp_eval:n{dinner(duck)}$\ExplSyntaxOff[1] Leslie Lamport. LATEX: A Document Preparation
System: User’s Guide and Reference Manual.
Addison-Wesley, Reading, MA, USA, 2nd edition,
1994. ISBN 0-201-52983-1. Reprinted withcorrections in 1996.

longtable: correct p-column definition
In general the longtable implementation follows the arrayusage but the package didn’t take over a change made1992 in array which adjusted the handling of the strut
inserted at the begin of p-columns. As a consequence
there are a number of inconsistencies in the output of
p-columns between tabular and longtable. This has beencorrected; longtable now uses for the strut the samedefinition as array.
(github issue 1128)

References[2] LATEX Project Team. LATEX 2ε news 1–38.
https://latex-project.org/news/
latex2e-news/ltnews.pdf[3] Frank Mittelbach and Chris Rowley. LATEX Tagged
PDF—A blueprint for a large project.
https://latex-project.org/publications/indexbyyear/2020/

The computation above would then generate
1 > 0.75 > 0.5625 > 0.421875 > 0.31640625
Users will be able to access added functions without
needing to use the expl3 layer. It is possible that a
future release of LATEX will add the ability to create andset floating point variables at the document level: thiswill be examined based on feedback on the utility of the
programming layer change.

Removed kernel commands
It is very rare that commands are removed fromthe LATEX kernel. However, in this release we haveelected to remove \GetDocumentCommandArgSpec,\GetDocumentEnvironmentArgSpec,\ShowDocumentCommandArgSpec and\ShowDocumentEnvironmentArgSpec from the kernel. These commands have been moved back to the“stub” xparse provided in l3packages. The reason forthis change is that the removed commands exposed
implementation details. They were essentially debugging
tools which with hindsight should not have been madeavailable directly in the kernel.
–96

LATEX News
Issue 39, June 2024 (LATEX release 2024-06-01)

Contents
Introduction

97

News from the “LATEX Tagged PDF” project97

Enhancements to the new mark mechanism

98

Providing xtemplate in the format

98

New or improved commands
doc: Provide \ProvideDocElement . . . . . . .
doc: Better support for upquote . . . . . . . . .
ifthen: Allow active characters in comparisons .
New conditionals: \IfClassAtLeastT andfriends . . . . . . . . . . . . . . . . . . . .

99
99
99
99
99

Code improvements
99
Load packages only at the top level . . . . . . . 99
Keep track of lost glyphs . . . . . . . . . . . . 99
Improve fontenc error message . . . . . . . . . . 99
Warn if counter names are problematic . . . . . 100
Extended information in \listfiles . . . . . . 100
Optimize creation of simple documentcommands . . . . . . . . . . . . . . . . . . 100
Handling of end-of-lines in +v arguments of\NewDocumentCommand and friends . . . . 100
Declaring appropriate sub-encodings for TS1
symbol fonts . . . . . . . . . . . . . . . . 100
Behavior when loading textcomp without options 101
Rollback improvements . . . . . . . . . . . . . 101
Documentation improvements
101
Further updates to the guides . . . . . . . . . . 101
Bug fixes
101
Fix inconsistent expansion of the package
option list . . . . . . . . . . . . . . . . . . 101
Fix logic for first mark (page region) . . . . . . 101
Struts at the end of footnotes or p columns . . 102
Changes to packages in the amsmath category 102
amsmath: Correct equation tag placement . . . 102
Changes to packages in the tools category
102
array, longtable, tabularx: Support tagging . . . 102
array: No \unskip in math cells . . . . . . . . . 102
verbatim: \verb showed visible spaces . . . . . 102
verbatim: Support tabs in \verbatiminput* . . 102

multicol: \columnbreak interferes with markmechanism . . . . . . . . . . . . . . . . . 102
showkeys: Allow \newline in amsthm to work . 102
xr: Support links and properties . . . . . . . . . 102
Changes to files in the cyrillic category
102
Correct definition of \k . . . . . . . . . . . . . 102

Introduction
The LATEX Project team remains strongly focusedon producing automatically tagged PDF output foraccessibility and reuse. At the beginning of 2024
the ISO PDF/UA-2 and the WTPDF (well-taggedPDF) standards were released and we are glad to beable to report that it is now possible to use LATEX toautomatically produce documents that conform to these
new standards.1 A sample collection of such documents
ranging from classical texts, such as the Bible, to recent
technical papers submitted to arXiv.org can be foundat https://github.com/latex3/tagging-project/discussions/72.
In February Ulrike and Frank presented the current
project status during the 5th International Workshop
on “Digitization and E-Inclusion in Mathematics andScience 2024” (DEIMS 2024) at Nihon University,
Tokyo, Japan; see [8].

News from the “LATEX Tagged PDF” projectIn the previous LATEX News [7] we announced some
prototype support for tagged tabulars. Some of thenecessary code has now been moved from latex-lab tothe corresponding packages (using sockets and plugs)
and to the LATEX kernel (for those parts that are also
necessary for other aspects of tagging).
The kernel code specific to tagging is implemented
in the file lttagging.dtx. For now it contains\UseTaggingSocket, a special invocation command forsockets that are specific to tagging. This enables us toalso provide \SuspendTagging and \ResumeTagging,i.e., a very efficient way to temporarily disable thewhole tagging process. This is, for example, necessary
if some code is doing trial typesetting. In that case
1 At the present time we are still in a trial/prototype phase inwhich only a limited set of document classes and packages are supported. Over the next releases we expect to gradually lift theserestrictions and eventually provide the full functionality as part ofthe core distribution, rather than through latex-lab modules.

LATEX News, and the LATEX software, are brought to you by the LATEX Project Team; Copyright 2024, all rights reserved.

–97

the trials should not generate tagging structures—only
the finally-chosen version should. Thus, tabularx, forexample, stops the tagging while doing its trials tofigure out the correct column widths to use, and thenre-enables tagging when the table is finally typeset.
Over time, lttagging.dtx will hold more generaltagging code as appropriate. For now it is only
documented as part of source2e.pdf but long term wewill provide a separate guide for tagging, which will thenalso include the information currently found in various
other places, e.g., tagpdf.pdf.
We also added support for a few missing commands
described in Leslie Lamport’s LATEX Manual [1]: If
phase-III is used the \marginpar command will beproperly tagged (depending on the PDF version) as
an Aside or a Note structure. In the standard classes\maketitle will be tagged if the additional testphasemodule title is used.
The math module has been extended and now includes
options to attach MathML files to the structures.
First tests with a PDF reader and screen reader that
support associated files look very promising. Examplesof PDF files tagged with the new method can be foundat https://github.com/latex3/tagging-project/discussions/72.
At last various small bugs and problems reported athttps://github.com/latex3/tagging-project havebeen fixed. Such feedback is very valuable, so we hope
to see you there and thank you for any contribution,
whether it is an issue or a post on a discussion thread.

Enhancements to the new mark mechanism
In June 2022 we introduced a new mark mechanism [2,p. 76] that allows keeping track of multiple independentmarks. It also properly supports top marks, somethingthat wasn’t reliably possible with LATEX before.
There was, however, one limitation: to retrieve
the marks from the page data it was necessary to\vsplit that data artificially so that TEX would
produce split marks that the mechanism could thenuse. Unfortunately, TEX gets very upset if it finds
infinite negative glue (e.g., from \vss) within this data.
This is not totally surprising because such glue would
allow splitting off any amount of material as such glue
would hide its size. TEX therefore responds with anerror message if it find such glue while doing a \vsplit
operation (and it does so even if a later glue item cancels
the infinite glue).
To account for this, the code in 2022 attempted todetect this situation beforehand and if so did not do any
splitting but, of course, it would then also not extract
any mark information.
In this release the approach has been changed and wealways do a \vsplit operation and thus always get theright mark data extracted. While it is not possible to
avoid upsetting TEX in case we have infinite negativeglue present, it is possible to hide this (more or less)from the user.2 With the new code TEX will neither
stop nor show anything on the terminal. What we can’t
do, though, is avoid an error being written to the log
file, but to make it clear that this error is harmless andshould be ignored we have arranged the code so that theerror message, if it is issued, takes the following format:! Infinite glue shrinkage found in box being split.
<argument> Infinite shrink error above ignored !
l. ... }Not perfect (especially the somewhat unmotivated<argument>), but you can only do so much when error
messages and their texts are hard-wired in the engine.
So why all this? There are two reasons: we do not
lose marks in edge cases any more, and perhaps more
importantly we are now also reliably able to extract
marks from arbitrarily boxed data, something thatwasn’t possible at all before. This is necessary, forexample, to support extended marks in multicols
environments or extract them from floats, marginpars,etc.
Details about the implementation can be foundin texdoc ltmarks-code or in the shorter texdoc
ltmarks-doc (which only describes the general concepts
and the command interfaces).

Providing xtemplate in the format
In LATEX News 32, we described the move of one
long-term experimental idea into the kernel: the package
xparse, which was integrated as ltcmd. With this edition,
we move another long-term development idea to stablestatus: templates.
In this context, templates are a mechanism to abstract
out various elements of a document (such as “sectioning”)
in such a way that different implementations can beinterchanged, and design decisions can be implemented
efficiently and controllably.
In contrast to ltcmd, which provides a mechanism thatmany document authors will exploit routinely, templates
are a more specialised tool. We anticipate that they will
be used by a small number of programmers, providing
generic ideas that will then be used within documentclasses. Most document authors will therefore likely
directly encounter templates only rarely. We anticipate
though that they will be using templates provided by
the team or others.
2 A note to l3build users that make use of its testing capabilities:
the new mechanism temporarily changes \interactionmode and,for implementation reasons in TEX, that results in extra newlines
in the .log file, so instead of seeing [1] [2] you will see each on
separate lines. This means that test files might show differences ofthat nature, once the code is active, and must therefore be regenerated as necessary.

–98The template system requires three separate ideas• Template type: the “thing” we are using templatesfor, such as “sectioning” or “enumerated-list”• A template: a combination of code and keys thatcan be used to implement a type. Here for example
we might have “standard-LATEX-sectioning” as atemplate for “sectioning”• One or more instances: a specific use case of atemplate where (some) keys are set to known
values. We might for example see “LATEX-section”,“LATEX-subsection”, etc.
As part of the move from the experimental xtemplate
to kernel integration, the team have revisited thecommands provided. The stable set now comprises• \NewTemplateType• \DeclareTemplateInterface• \DeclareTemplateCode• \DeclareTemplateCopy• \EditTemplateDefault• \UseTemplate• \DeclareInstance• \DeclareInstanceCopy• \EditInstance• \UseInstance• \IfInstanceExistsTF and variants
To support existing package authors, we have released
an updated version of xtemplate which will worksmoothly with the new kernel-level code. The existingcommands provided in xtemplate will continue to work,
but we encourage programmers to move to the set above.

New or improved commands
doc: Provide \ProvideDocElement
In addition to \NewDocElement and \RenewDocElement
we now also offer a \ProvideDocElement declarationthat does nothing unless the doc element could be
declared with \NewDocElement. This can be useful if
documentation files are processed both individually andcombined.
doc: Better support for upquote
In LATEX News 37 [6] we wrote that support for theupquote package was added to the doc package, but backthen this was added only for \verb and the verbatim
environments. However, in a typical .dtx file, mostof the code will be in the body of some macrocode or
macrocode* environments, and neither of these wasaffected by adding upquote. We have now updated doc
so that upquote alters the quote characters in theseenvironments as well.
(github issue 1230)

ifthen: Guard against active characters in comparisonsThe \ifthenelse command now ensures that <, = and> are safe in numeric tests, even if they have been
made active (typically by babel language shorthands).
(github issue 756)

New conditionals: \IfClassAtLeastT and friends
Around 2020 we added a number of conditionals with CamelCase names, i.e.,\IfClassAtLeastTF, \IfClassLoadedTF,\IfClassLoadedWithOptionsFF, \IfFormatAtLeastTF,\IfPackageAtLeastTF, \IfPackageLoadedTF, and\IfPackageLoadedWithOptionsTF to help arranging
conditional code that depends on the release of aparticular class, package or format. However, we only
provided the TF commands and not also the T and F
variants. This has now been changed.
In 2023 we introduced \IfFileAtLeastTF but we
did not also provide \IfFileLoadedTF at the sametime. This conditional and its T and F variants have
now also been added. Remember that one can only
test for files that contain a \ProvidesFile line. We
did the same for the conditionals \IfLabelExistsTF
and \IfPropertyExistsTF, also introduced in 2023.3(github issues 1222 1262)

Code improvements
Load packages only at the top level
Classes and packages must be loaded only by using
the commands \documentclass and \usepackage or
the class interface commands such as \LoadClass or\RequirePackageWithOptions; moreover, all of thesemust always be used at the top level, and not inside agroup of any type (for example, within an environment).
Previously LATEX did not check this, which would often
lead to low level errors later on if package declarations
were reverted when a group ended. LATEX now checks
the group level and an error is thrown if the class or
package is loaded in a group.
(github issue 1185)
Keep track of lost glyphs
A while ago we changed the LATEX default value for\tracinglostchars from 1 to 2 so that missing glyphs
generate at least a warning, but we forgot to make thesame change to \tracingnone. Thus, when issuingthat command LATEX stopped generating warnings
about missing glyphs. This has now been corrected.
(github issue 549)

Improve fontenc error message
If the fontenc package is asked to load a font encoding
for which it doesn’t find a suitable .def file then it
3 By mistake they were initially introduced under the names\IfLabelExistTF and \IfPropertyExistTF; we corrected that at
the same time. This is a breaking change, but the commands havebeen used so far only in kernel code.

–99

generates an error message indicating that the encoding
name might be misspelled. That is, of course, one of thepossible causes, but another one is that the installation
is missing a necessary support package, e.g., that no
support for Cyrillic fonts has been installed. The error
message text has therefore been extended to explain theissue more generally.
(github issue 1102)
Warn if counter names are problematicIn the past it was possible to declare, for example,\newcounter{index} with the side-effect that thisdefines \theindex, even though LATEX has a theindex
environment that then got clobbered by the declaration.
This has now been changed: if \the⟨counter⟩ is alreadydefined it is not altered, but instead a warning message
is displayed.
(github issue 823)
Extended information in \listfiles
The \listfiles command provides useful information
when finding issues related to variation in package
versions. However, this has to date relied on theinformation in the \ProvidesPackage line, or similar:that can be misleading if for example a file has beenedited locally. We have now extended \listfiles totake an optional argument which can include the MD5hash and size of each file in the .log. Thus for example
you can use\listfiles[hashes,sizes]
to get both the file sizes and file hashes in the .log as wellas the standard release information.
(github issue 945)
Optimize creation of simple document commands
Creating document commands using declarations such as\NewDocumentCommand, etc., provides a very flexible wayof grabbing arguments. When the document command
only takes simple mandatory arguments, this has to-dateadded an overhead that could be avoided. We have
now refined the internal code path such that “simple”
document commands avoid almost any overhead atpoint-of-use, making the results essentially as efficient as
using \newcommand for low-level TEX constructs. Notethat as \NewDocumentCommand makes engine-robustcommands, the direct equivalent to \newcommand is\NewExpandableDocumentCommand. (github issue 1189)
Handling of end-of-lines in +v arguments of\NewDocumentCommand and friends
The +v argument type provided by declarations such as\NewDocumentCommand, etc., allows grabbing of multiplelines of text in a verbatim-like argument. Almost always,
the result of this grabbing will be used in a typesetting
context. Previously, the end-of-line characters werestored literally as category code 12 (“other”) ^^M tokens.
However, these are difficult to work with in general. We
have now revised this behavior, such that end-of-line
characters are converted to the \obeyedline command

when parsed by +v-type arguments. This change may
require adjustments to the source of some documents,
but the enhanced ability of users and programmers to
exploit the +v-type argument means we believe it isnecessary.
Declaring appropriate sub-encodings for TS1 symbol fonts
In 2020 we incorporated support for the TS1 symbol
encoding directly into the kernel and in this way
removed the need to load the textcomp package [3] tomake commands such as \texteuro available.
There is, however, a big problem with this TS1 symbol
encoding: only very few fonts provide every glyph thatis supposed to be part of TS1. This means that changing
font families might result in certain symbols becoming
unavailable. This can be a major disaster if, for example,
the symbol \texteuro (€) or \textohm (W) no longer
gets printed in your document, just because you altered
the text font family.
To mitigate this problem, in 2020 we also introduced
the declaration \DeclareEncodingSubset. Thisdeclaration is supposed to be used in font definition files
for the TS1 encoding to specify which subset (we havedefined 10 common ones) a specific font implements.
If such a declaration is used then missing symbols areautomatically taken from a fallback font.
While this is not perfect, it is the best you can doother than painstakingly checking that your document
uses only glyphs that the font supports and, if necessary,
switching to a different font or avoiding the missing
symbols. See also the discussion in [4].
To jumpstart the process we also added declarations to
the LATEX kernel for most of the fonts found in TEX Liveat the time—with the assumption that such declarations
would over time be superseded by declarations in the .fd
files. Unfortunately, this hasn’t happened yet (or notoften) and so many of the initial declarations went stale:several fonts got new glyphs added to them (so theirsub-encoding should have been changed but didn’t);
others (mainly due to license issues) changed the familyname and thus our declarations became useless andthe renamed fonts (now without a declaration) ended
up in the default sub-encoding that offers only a few
glyphs; yet others such as CharisSIL (which triggered
the GitHub issue) were simply not around at the time.
We have, therefore, again attempted to provide the(currently) correct declarations, but it is obvious that
this is not a workable process. As we do not maintain the
fonts we do not have the information that something haschanged, and to regularly check the ever growing fontsupport bundles is simply not possible. It is therefore
very important that maintainers of font packages not
only provide .fd files but also add such a declaration to
every TS1...fd font definition file that they distribute.
To simplify this process, we now provide a simple–100

LATEX file (checkencodingsubset.tex) for determining
the correct (safe) sub-encoding. If run, it asks for a fontfamily and then outputs its findings, for example, for
AlgolRevived-TLF you will get:----------------------------------------Testing font family AlgolRevived-TLF(currently TS1-sub-encoding 9)----------------------------------------Some glyphs are missing from sub-encoding 8:==> \textcelsius (137) is missing==> \texttwosuperior (178) is missing==> \textthreesuperior (179) is missing==> \textonesuperior (185) is missing
Some glyphs are missing from sub-encoding 7:==> \texteuro (191) is missing
All glyphs between sub-encoding 6 and 7 exist
All glyphs between sub-encoding 5 and 6 exist
All glyphs between sub-encoding 4 and 5 exist
Some glyphs are missing from sub-encoding 3:==> \textwon (142) is missing
All glyphs between sub-encoding 2 and 3 exist
Some glyphs are missing from sub-encoding 1:==> \textmho (77) is missing==> \textpertenthousand (152) is missing
All glyphs between sub-encoding 0 and 1 exist
All glyphs in core exist----------------------------------------TS1 encoding subset for AlgolRevived-TLF (ok)Use sub-encoding 9----------------------------------------This output is meant for human consumption, e.g.,
you see which glyphs are missing and why a certain
sub-encoding is suggested, but it is not that hard to use
it in a script and extract the suggested sub-encoding bygrepping for the line starting with Use sub-encoding.
Of course, this check will only work if the missing
glyphs are really missing: some fonts placed “tofu”4 intosuch slots and in this case it looks to TEX as if the glyph
is provided. For example, for the old Palatino fonts(family ppl) it would report----------------------------------------TS1 encoding subset for ppl (bad)Use sub-encoding 0 (not 5)----------------------------------------thus it claims that all glyphs are provided, while
in reality more than twenty are missing and subencoding 5, as declared in the kernel, is in fact correct.
(github issue 1257)

Behavior when loading textcomp without options
When incorporating the textcomp package into the
LATEX kernel, in the February 2020 release [3], the4 Little squares to indicate a missing symbol.

default type of its package messages was changed frompackage info (Package textcomp Info) to LATEX kernel
info (LaTeX Info). But if textcomp was loaded without
options, the message type got restored to package info.
This restoration has now been canceled.
Note that loading textcomp with one of the options
error, warn, or info still changes the message type toan error, warning, or info message from the textcomp
package.
(github issue 1333)
Rollback improvements
When requesting a rollback of the LATEX kernel
and/or packages, several packages produced the error“Suspicious rollback date” because their rollback section
contained only data about recent releases even if the
package, such as array, was available since the firstrelease of LATEX 2ε in 1994. We now suppress thiserror and load the first release that is still part of the
distribution (and hope for the best). This change was
implemented for the packages amsmath, array, doc,
graphics, longtable, multicol, showkeys, textcomp, andvarioref.
(github issue 1333)

Documentation improvements
Further updates to the guides
We reported about the updated versions of usrguideand clsguide in LATEX News 37 [6]. We have now
revised fntguide as well to reflect the changes andmacros added to the kernel over the last years ofdevelopment. Note that the file name hasn’t changed
and there is no fntguide-historic.

Bug fixes
Fix inconsistent expansion of the package option list
LATEX applies one-step expansion to the raw option listof packages and classes, so that constructions such as\def\myoptions{opt1,opt2}\usepackage[\myoptions]{foo}are supported. But if a package declares its options
using the new key/value approach [5] and it gets loaded
a second time, then its raw option list will not be
expanded and so an error might be raised. This has now
been corrected.
(github issue 1298)
Fix logic for first mark (page region)
In the new mark mechanism introduced in June 2022 [5]the result of \FirstMark on a two-column page wasincorrect if the first column contained no marks. In thatcase it should have returned the first mark of the second
column but didn’t. This has now been corrected.
Documents using \leftmark are not affected, becausethat command is still using the old mechanism for now.
(github issue 1359)–101

Struts at the end of footnotes or p columns
To produce consistent spacing in footnotes and tabularp-cells LATEX adds a strut at the beginning and end of
the content. This assumed, however, that the content of
the footnote or tabular cell ended in horizontal mode andso, until now, these struts were unconditionally added;
as a result, if this content ended with vertical material
then this strut started a new paragraph consisting ofa single line with just the strut in it. This has finallybeen corrected and now the placement logic for the strutchanges when vertical mode is detected.
(First seen in a bug report for footmisc in combination
with bigfoot)Changes to packages in the amsmath categoryamsmath: Correct equation tag placement
If there is not enough space to place an equation tag on
the same line as the equation then amsmath calculates asuitable offset and it places the tag above (or below) theequation. In the case of the gather environment thisoffset was not reset at the end, with the result that it
also got applied to any following environment, resulting
in incorrect spacing in certain situations. This has now
been corrected.
(github issue 1289)

Changes to packages in the tools category
array, longtable, tabularx: Support tagging
These three packages have been extended so they cannow, on request, produce tagged tabular. This is doneby adding a number of sockets (see [7]) that, by default,
do nothing; but when tagged PDF is requested they getequipped with appropriate plugs.
In the previous LATEX release this was handled inlatex-lab, by patching the packages when tagging was
requested.
array: No \unskip in math cells
Math cells in the standard array environment of thekernel are not subject to space removal at the right endof the cell, i.e., explicit spaces from \hspace or \␣, etc.
are honored (normal spaces are automatically ignoredin math). In the array package all spaces got removed
by calling \unskip unconditionally, regardless of thetype of cell. This difference in behavior has now been
removed by correcting the processing of math cells inarray.
(github issue 1323)
verbatim: \verb showed visible spaces
A recent change in the kernel was not reflected in theverbatim package, with the result that \verb showedvisible spaces (␣) after the package was loaded. This
has already been corrected in a hotfix for the November
2023 release.
(github issue 1160)

verbatim: Support tabs in \verbatiminput*
Mimicking the November 2023 kernel update thatallowed \verb* to mark tabs as spaces, the verbatim
package has now been updated so that \verbatiminput*
also marks tabs as spaces.
(github issue 1245)
multicol: \columnbreak interferes with mark mechanism
The multicol package has to keep track of marks(from \markright or \markboth) as part of its output
routine code and can’t rely on LATEX handling that
automatically. It does so by artificially splitting page
data with \vsplit to extract the mark data. With
the introduction of \columnbreak that code failed
sometimes, because it was not seeing any mark that
followed such a forced column break.
This has now been corrected, but there is further
work to do, because as of now multicol does not yet
handle marks using the new mark mechanism—see
the discussion at the beginning of the newsletter.
(github issue 1130)

showkeys: Allow \newline in amsthm to work
Previously showkeys added an extra box layer which
disabled the \newline of amsthm theorem styles. This
extra box has now been avoided.
(github issue 1123)
xr: Support links and properties
The xr package implements a system for eXternal
References. The xr-hyper package (in the hyperrefbundle) extended this to also support links to external
documents. Using last year’s extension of the \labelcommand, which unified the label syntax of LATEX andhyperref, it became possible to merge the two packages
and thus make xr-hyper obsolete. With this change it
is also possible to refer to properties that are stored
in external documents using \RecordProperties.
(github issue 1180)

Changes to files in the cyrillic category
Correct definition of \kAges ago, the encoding-specific definitions for various
accent commands were changed to guard against alteringsome parameter values non-locally by mistake. For somereason the definition for \k in the Cyrillic encodings T2A,
T2B, and T2C didn’t get this treatment. This oversighthas now been corrected.
(github issue 1148)

References[1] Leslie Lamport. LATEX: A Document Preparation
System: User’s Guide and Reference Manual.
Addison-Wesley, Reading, MA, USA, 2nd edition,
1994. ISBN 0-201-52983-1. Reprinted withcorrections in 1996.
[2] LATEX Project Team. LATEX 2ε news 1–39. June,
2024. https://latex-project.org/news/
latex2e-news/ltnews.pdf–102

[3] LATEX Project Team. LATEX 2ε news 31. February,
2020. https://latex-project.org/news/
latex2e-news/ltnews31.pdf[4] LATEX Project Team. LATEX 2ε news 33. June 2021.
https://latex-project.org/news/
latex2e-news/ltnews33.pdf[5] LATEX Project Team. LATEX 2ε news 35. June 2022.
https://latex-project.org/news/
latex2e-news/ltnews35.pdf[6] LATEX Project Team. LATEX 2ε news 37. June 2023.
https://latex-project.org/news/
latex2e-news/ltnews37.pdf[7] LATEX Project Team. LATEX 2ε news 38. November
2023. https://latex-project.org/news/
latex2e-news/ltnews38.pdf[8] Frank Mittelbach and Ulrike Fischer. Enhancing
LATEX to automatically produce tagged andaccessible PDF. TUGboat 45:1, 2024.
https://latex-project.org/publications/indexbyyear/2024/–103