For the LaTeX kernel, there are several very important changes over the past decade. Picking out the highlights from LaTeX News
New change/bug fix policy
Probably most significant of all, work on kernel development re-started in around 2014 with a new bug fix policy. Rather than having a frozen kernel with changes in fixltx2e
, a rollback mechanism was introduced using latexrelease
. This has then led to a wider re-start of kernel development meaning new features can be integrated: all of the rest of this entry rely on that.
UTF-8 Default
LaTeX now assumes that documents are UTF-8 unless otherwise specified, meaning you do not need to load inputenc
explicitly. Previously, the format was really 7-bit safe only, and whilst some people 'got away' with certain 8-bit chars without loading inputenc
, this was more luck than judgement.
Formal support for Unicode engines
LaTeX is now formally tested with LuaTeX and XeTeX. At the same time, when these engines are used, the standard font setup uses TU
(Unicode) font encoding and the Latin Modern font: this is the most sensible starting point with these engines.
Requiring e-TeX and more primitives
e-TeX is now required by the format, as are a number of additional ('pdfTeX') primitives. These allow functionality that was previously much more complex to set up. This is mainly a benefit to package authors, who no longer need to consider multiple code paths. e-TeX also brings with it a lot more registers, meaning an end to No room for a new ...
in almost all real documents.
expl3
and ltcmd
(was xparse
) in the format
The programming layer expl3
and ltcmd
(which provides \NewDocumentCommand
, etc.) are now integrated into the format. This means faster load times for users, and easier setup for package authors. \NewDocumentCommand
, etc., provide for users and coders much easier approaches to grabbing arguments when one goes beyond a simple set of mandatory ones.
Hook management
LaTeX now provides a rich set of hooks which can be sorted. This includes for example hooks that occur at the start of shipout, before, during and after the start of a document, etc. This incorporates several hooks that were previously dependent on packages. The ability to sort and manage hook entries is new, and allows for better handling of package interactions. Generic hooks can be added to a range of commands, to reduce the need to patch commands in fragile ways.
Floating point calculation support
The command \fpeval
is now available out-of-the-box to carry out floating point calculations by expansion within LaTeX.
Keyval option handling
Building on the loading of expl3
, keyval handling is now available in the kernel. Most notably, this has been extended to allow package/class options to take keyval entries out-of-the box. These mechanisms are available to package authors without needing to switch to expl3
. They also allow packages to be loaded repeatedly with different options without triggering an error: the package is able to determine the interaction between options.
Better Unicode support
The LaTeX team now distribute a set of Unicode data files for general use with TeX. The data from these is used to support some functions in the LaTeX kernel, most notably an enhanced case changing setup. The latter integrates the ideas from the textcase
package into the kernel, but enhances them further. Full Unicode case changing is now available directly, even with 8-bit engines. Enhanced Unicode support also means that the full Unicode range can now be used in the \label
/\ref
mechanism and when loading files, without needing to go through tricks.
Extended NFSS
The (New) Font Selection Scheme (NFSS) has been extended to allow proper support for combining small caps with other changes. The system has also been extended to separate out font weight and font width.
tabularray
andnicematrix
packages have been amazing and a major improvement. I mostly usetabularray
as it is more of atabu
replacement, in terms of syntax, which is what I used to use, but both have amazing features covering pretty much most needs.