View on GitHub

Babel

The multilingual framework to localize LaTeX, LuaLaTeX, XeLaTeX

What’s new in babel 25.14

Development. Very tentative draft.

Potentially breaking change. Extensive tests are being carried out.

Significant hanges are currently unlikely, but it’s still work in progress.

Due to be released (hopefully) in October, 20.

The following notes refer to the traditional ldf mechanism (which is not necessarily ‘old’).

Deprecated names (bahasai, samin, usorbian and a few more) will show a warning.

Special cases and known issues with ldf styles

See also What’s new in babel 25.11.

greek, monotonicgreek, polytonicgreek, ancientgreek

They are recognized, in addition to attributes and modifiers. However, using them at the same time is not supported. The \localename is always greek, but they can be selected with the corresponding names. Actually, internally both greek and the name of the selected variant are mixed, so as a hack the new loader defines two languages [under study]. With pdftex and xetex this is very likely irrelevant, but with luatex can be relevant (eg, transforms).

The correct BCP 47 tags are set only with greek, monotonicgreek, polytonicgreek, and ancientgreek, and not with greek + a modifier or attribute.

The name polutonikogreek is discouraged (deprecated?).

austrian, german, swissgerman

They refer to the old 1901 variant, not the modern one. For the modern 1996 variant, use naustrian and ngerman. For the moment, this legacy behavior is kept, and a warning highlighting it will be shown with german and austrian.

Breaking change swissgerman is now assigned to the language with tag gsw. For modern Swiss High German (tag de-CH) you can use swisshighgerman (the Unicode CLDR name) and nswissgerman (the legacy name). The \localename is in both cases nswissgerman.

serbian, serbianc

For the moment, the legacy behavior is kept, so that serbianc is for the Cyrillic script and serbian is for the Latin script. The latter will show a warning highlighting this doesn’t conform the standard naming.

ethiop, amharic

ethiop is still recognized, but you can also load and select it with amharic, which is the recommended name.

turkish

hindi

kurmanji, kurdish

Pending of sorting out.

farsi

pdftex: Error with \MakeUppercase

Fixes and other changes

Determining the main language

There was long-standing bug which has remained unnoticed for decades. The documented behavior is the last declared language is set as the main one. That’s true with:

\usepackage[langA,langB,langA]{babel}

But it’s not true with the following, which oddly set langB as the main language:

\documentclass[langA,langB,langA]{article}

It was partly caught by babel, but for another situation (as a warning in the log revealed), namely, a language declared as both class and package option, whose behavior was not well-defined (but preserved for compatibility). The main purpose of the main key was to overcome this problem.

Note languages as class options options doesn’t mean ‘set it as main language’, but rather ‘pass it as option to all packages’. Admittedly, this can be counter-intuitive, and after all in monolingual documents it’s the main language, too.

After more than 10 years showing a warning, it’s time to normalize the behavior, and now the very last language (considering all of them in class and package options, in this order) is the main language. What main does is just to move it at the end.

Other fixes

Other fixes: 352, 354, 356.

The option main was ignored after the first \babelprovide for a certain language. This could also solve #351.

Config files

They are deprecated. They can break document portability and there are better ways to customize the behavior of languages (for example, hooks and packages).