When the LaTeX Project team took over maintenance of LaTeX from Leslie Lamport, LaTeX2e was planned as an intermediate release to resolve immediate issues with the then-current LaTeX2.09. The ‘e’ (or properly ε) was meant to indicate a small change from LaTeX2.09, with longer-term plans centred on LaTeX3. As we know, that proved rather hopeful, and we are still using LaTeX2e today: at least, that’s how it still announces itself.

The 1990s plans

The plans for LaTeX3 developed by the team in the early 1990s envisaged reimplementing LaTeX with a much cleaner underlying programming framework and well-defined separation of user interface, design functions and programming. A lot of these ideas were prototyped very early on, with a version of the programming layer created well before LaTeX2e was finalised. But performance was the big issue: yes, you could test things as a developer, but that was basically it. At the same time, some ideas were not fully ready: before e-TeX (pdfTeX extensions, etc.), there was less that the engine could do, and whilst Knuth’s TeX is an excellent piece of software, the LaTeX3 ideas pushed it to the limit.

So LaTeX2e was released in 1994, and development focussed on packages for many years. That meant that ‘LaTeX3’ became something of an amusing idea: talked about but with no likelihood of (visible) delivery.

Development into the 2010s

Development of ‘LaTeX3’ ideas never stopped, of course: it was just that they moved from being primarily targeting a new kernel to building on top of LaTeX2e. That results in a bundle called l3in2e and one called xpackages on CTAN, although both were marked as experimental.

When I joined the LaTeX Project team in 2009, that’s largely where things were. However, the landscape had evolved: computers had become more powerful, e-TeX and pdfTeX extensions to TeX were very widely available and development was easier. That meant that LaTeX3 ideas, particularly the programming language (expl3) was usable in real documents: the fontspec package in particular was written in expl3 and was quite usable. I picked that up and wrote the second version of siunitx in expl3.

At the same time, some of my first work on the team was in getting expl3 to the point that the ‘experimental’ was no longer really true: you could use it in a package and be happy that the code would continue to work between releases. The other major task early in my team career was getting us into a position that releases, first of expl3 and then of the LaTeX2e kernel, were easy to make from whatever platform we wanted: Linux, macOS and Windows.

Over the 2010s, this meant the team could round out ideas that had been suggested first over 20 years before. Development was still as packages adding on to the kernel, but xparse (document commands), xtemplate (flexible document structures) and xgalley (a new approach to the main vertical list) were all revised and testable.

The 2020s: LaTeX2e 2020-02-02 and beyond

By 2020, work on the core idea of a programming layer had reached the point that the code was stable and performant, and that the team wanted to be able to rely on it for kernel developments. So we took the step to integrate loading expl3 into the LaTeX2e kernel, with the rather cryptic description ‘Improved load times for expl3’ in LaTeX News. Following that, xparse and xtemplate have also been (largely) added to the kernel, tightening up the parts that worked from those that do turn out to have been purely experiments.

With this functionality available, new ideas such as hook management and re-implementation of older ones such as lists is possible: some of that is currently only activated if you use \DocumentMetadata as a ‘marker’. For updated documents, that means many of the LaTeX3 ideas are being used: the programming layer, a way of making document commands (\NewDocumentCommand originally from xparse) and templates (originally from xtemplate and used to update list code, etc.).

There are also more subtle changes across the kernel, for example updating commands to use UTF-8 everywhere, make more functions engine-robust, etc. Put together, the 2024 LaTeX2e is quite different from the 1994 one: but you can still rely on the long-term stability that’s always been there.

Conclusions

Whilst there will never be a stand-alone ‘LaTeX3’ format, the ideas that were first explored by the LaTeX Project team in the early 1990s are now available to users in the LaTeX kernel. They are being used to deliver an updated LaTeX capable of producing accessible documents, and more widely to bring customisation to the kernel. So whilst ‘LaTeX3’ might not be something you’ll ever say you use, if you use LaTeX, you are getting those features today.