View on GitHub


The multilingual framework for localizing LaTeX, LuaLaTeX, XeLaTeX

What’s new in babel 3.49


⚠ There is a severe bug in this version: in some cases, main= is no-op and silently ignored. Fixed in 3.50.

Request ini files with class or package options

The standard way to set a language in LaTeX is by means of class or package options. Class options can be recognized by packages to act accordingly, and babel is not an exception. However, until now ini files had to be loaded following a separate mechanism, which was clearly not ideal, because it doesn’t set the language as a global option, which may be required in many applications.

Now there is a package option to tell babel to load all or some languages passed as options with \babelprovide and not from the ldf file, with a few typical cases, as for instance:



Here provide=* means ‘load the main language with the \babelprovide mechanism instead of the ldf file’ using the basic features, which in this case means import, main. There are (currently) three options:

(The value will allow in the future other options, as for example onchar or mapdigits, but for the moment you must restrict yourself to *. Also, a similar tool for languages loaded on the fly can be useful, for the reasons explained in issue #82, but I’ve left it to a later version.)

Note babel itself is not the responsible to ‘set’ which languages are to be used in the document. It recognizes the options passed by the user as class or package options.

French spacing with ini files

This feature has been (at last) added. It behaves much like the settings for lefthyphenmin and righthyphenmin in the sense this setting is only applied in newly defined languages. So, it cannot be used to modify an ldf file, and there is a reason — it works in a somewhat different way, because the corresponding values are only switched when they have a standard one (eg, . is either 1000 or 3000, but not, say, 1001 or 2999), and the values before we enter a language are restored when we exit.

The original model followed in ldf’s is, as explained in the section ‘Known issues’ of the manual, problematic because the values are not always restored correctly in some (infrequent) cases.

Other changes