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 theLATEX 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 orlater, 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 asif 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.

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 aspecific 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 ofLuaTEX). 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 describedbelow.
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 tooutput 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 youcan 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 thetexlua interpreter distributed with modern TEX
distributions. It is already separately available fromCTAN. 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.

–2