We haven't had this question since many years (2016, 2014, 2010), but especially the question from 2014 has been viewed for more than 50k times, so it seems we should provide an up-to-date answer once in a while.

So what are the most important improvements of LaTeX & Friends during the last ten years, and why? The new hook management (cf. lthooks-code.pdf) or pdf management including pdf/A output? LuaLaTeX being as fast as PDFLaTeX? Version 1.x of LuaTeX? Many new tabular packages? Or a developement of one of the broader packages (TikZ, pstricks, KOMA-script e.g.)? The L3 programming layer? UTF-8 as default encoding? Usage of chinese, arab, hebrew ... languages?

  • 41
    tikzducks?..... Jan 4 at 15:16
  • 3
    Do you mean improvements that are visible to the users, or improvements made internal to the system (such as rewriting some internal code and such)? I think most users care about the first type of improvements. Is improvement to tex4ht allowed also?
    – Nasser
    Jan 4 at 15:54
  • 1
    Or for package/class developers? Jan 4 at 16:01
  • 1
    @JavierBezos All of them: users and developers. All of it: for me a really great improvement is the usage of python, jinja2 and LaTeX. So yes, tex4ht is allowed.
    – Keks Dose
    Jan 4 at 16:12
  • 3
    to me the new tabularray and nicematrix packages have been amazing and a major improvement. I mostly use tabularray as it is more of a tabu replacement, in terms of syntax, which is what I used to use, but both have amazing features covering pretty much most needs.
    – ArTourter
    Jan 5 at 1:15

7 Answers 7


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.


Using (La)TeX online is a major change since 2013. The sites that were WriteLaTeX and ShareLaTeX have merged to form Overleaf, which has over 10 million registered users (and I understand a significant amount of active users). The ease of use of Overleaf for newer users or collaborative work cannot be underestimated. There are of course other sites offering similar online LaTeX experiences, but I think it's fair to say that Overleaf is the market leader at the time of writing.

In a somewhat similar area, the LearnLaTeX site has been set up to help new users get started with LaTeX without needing to buy a book or to install anything. Key to that work has been effort by David Carlisle to provide a simple online LaTeX compiler that takes input from a form and returns a PDF: a system called TeXLive.net. (He's actually done a lot more: the system works with other TeX formats, can return HTML, etc.!) TeXLive.net has been picked up by other sites that want to provide 'real' (La)TeX typesetting examples in the web browser, so is being used well beyond the new users targetted by LearnLaTeX.

  • 1
    underestimated -> overestimated? (I'd edit if I knew how and was sure.)
    – GeoffV
    Jan 12 at 16:20
  • @GeoffV Nope, I do mean underestimated ;)
    – Joseph Wright
    Jan 12 at 16:21
  • 1
    But if I say 'Overleaf has helped only five users' then I've underestimated its impact, which you say cannot be done. :) I understand the point you are making in your original message, though, so this is a rather trivial comment.
    – GeoffV
    Jan 13 at 9:36

Backend support in the kernel

For a long time LaTeX was basically engine and backend agnostic: backend specific code was only loaded and maintained in external packages like color, graphicx, hyperref, bookmark, animate, pdfcomment, transparent, pdflscape, tikz and more. In such a setup the actual support for backends and engines can differ from one package to the other and every package maintainer has to develop and maintain their own backend support. It also means that basic functions which should be provided by a format like for example colors or adding a link are only available by loading packages.

With the move of expl3 into the kernel this has changed: Now every LaTeX run also loads a file from l3backend which contains the needed backend code for various task e.g. to use colors, to rotate boxes, to add graphics, to create links and other PDF objects, and so will allow to offer in future abstracted and consistent interfaces for users and package authors which works out of the box.

If additionally the PDF management code is loaded with \DocumentMetadata more backend code is loaded to manage central PDF resources needed for example for opacity and XMP-metadata.

hyperref, the new form field code in l3pdffield-testphase and also the code of the tagging project make already use of the new backend code (if the PDF management code is loaded): they then use the abstracted interfaces and lets the kernel backend code handle the details.


The answer to this question clearly depends on you interests. Being interested in typographical matters, my vote would go to LuaHBTeX, the combination of LuaTeX and Harfbuzz, which is the default engine for LuaLaTeX. Well, with ‘Lua-non-HB-TeX’ you can do a lot of very useful things, like boustrophedon writing (see chickenize). In this regard, luatexja is a very good example on what it can be achieved.

But when you combine it with Harfbuzz to typeset any language in the World following their typographical conventions, there is no real alternative.

The possibility to work with the internal node lists has allowed babel to introduce ‘transforms’, based on the Omega OTPs, as well as several justificacion modes, for Arabic (kashida), Tibetan (trailing tshegs) or Uyghur (hyphenated Arabic script, although sadly the work on the patterns for this language seems abandoned).

No doubt the L3 programming layer is great, because it makes things a lot easier, and that a faster LuaTeX makes things, well, faster, but LuaHBTeX is not about ‘easier’ or ‘faster’, but about ‘you can’ vs. ‘you cannot’.


Tables have for a long time been regarded by many as a weak point with LaTeX. There are packages to enhance tables such as booktabs and one can create some complex tables using a combination of additional packages such as multirow, array, tabularx, tabulary, longtable, colortbl, makecell,... But the code rapidly becomes convoluted. Then came tabu which aimed to combine a lot of the functionalities of a lot of the previous packages into one rather complete package simplifying complex table creation immensely. Unfortunately for multiple reasons which are off topic here, tabu stopped being maintained and became broken after changes in other packages despite efforts from the community to try and keep it working while waiting for a newer version.

Since then many of us have been in that limbo state of using the patched version of tabu knowing that at any point it would break, or go back to the old ways! None of which were optimal

Then in 2018 and 2021, thanks to another major improvement to LaTeX (LaTeX3/expl3), came two packages which brought tables back into play using two different approaches:


nicematrix uses pgf to draw and is written in LaTeX3. It almost treats tables and mathematical array the same way and facilitate the inclusion of tikz elements to highlight values in cells/rows/columns.


tabularray is again written in LaTeX3 and uses regexp to parse and generate the table. This package is the closest to the old tabu in terms of syntax and can be almost used in its place without too much modifications. However, one still needs to modify the code to take full advantages of its advanced features. One thing that tabularray allows which seems to be very much in keeping with (La)TeX ethos of separating formatting from content is the ability of put most if not all formatting code in the table header.


For developers of (La)TeX macro packages, a number of changes in the overall 'ecosystem' have made life easier.

Most notably, the LaTeX team have developed l3build as a tool for testing TeX code. The main method used is by normalising data in the .log file, but it can also work with PDF files (typeset output) or other normalised formats. This ability to test TeX code reliably is very useful in enhancing development. At the same time, l3build is also able to build code for release, and supports a range of code layouts. This makes producing releases reliably much easier than it was in the past.

More general programming developments couple to this. The advances in online Git hosts, most notably GitHub, GitLab and BitBucket mean that it is now easy to carry out collaboration with a range of users and other developers. At the same time, these sites all offer continuous integration support, usually without needing third-party tools. Coupled with l3build, this allows testing of every change to package code and automated building of releases when for example a tag is created.

Somewhat linked to my other answer but more in the 'developer space' is the provision by the LaTeX team of 'dev' pre-releases of LaTeX kernel versions. These allow testing by a wider pool of interested users/developers before a LaTeX kernel update hits CTAN. This type of testing is almost always carried out by people with links to development, even if they are not themselves writing code routinely. Pre-release testing is an important part of allowing packages to adapt to LaTeX kernel changes and spotting potential issues.


vscode extension

For novice users, the biggest advantage since 2013 is probably that you can now use vscode for LaTex, thanks to James Yu's extension.

Made getting started way more convenient for me, as I was able continue to use a tool I already knew.

  • 1
    Well, in this regard the pdf-tools package within Emacs has been a great improvement as well: One buffer displays the source, one the resulting pdf and of course you can have a LaTeX-run as soon as you save your file.
    – Keks Dose
    Feb 12 at 19:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .