View on GitHub


The multilingual framework for localizing LaTeX, LuaLaTeX, XeLaTeX


The Greek language is available for pdftex, xetex, and luatex. Depending on your needs you may prefer the ldf file, currently supported by Günter Milde, or the ini files.

The support for pdftex is based on the non-standard LGR encoding, which may be a source of issues (see for example here). It’s strongly recommended to use xetex or luatex.

As ldf

It supports Monotonic, Polytonic and Ancient Greek, but only one at a time. A minimal preamble with Monotonic Greek and pdftex is:


With pdftex it is advisable, as in the example, to load explicitly the font encoding (the greek style does it if necessary, but in a non-standard way). With xetex and luatex, fontspec must not be loaded.

As ini

This method is available for xetex and luatex (it might work with pdftex, but it has not been extensively tested). It supports Monotonic, Polytonic and Ancient Greek, which can be used at the same time. A minimal example with Monotonic and xetex or luatex is:


\usepackage[greek, provide=*]{babel}


Η ελληνική γλώσσα κατέχει υψηλή θέση στην ιστορία του Δυτικού κόσμου.


The default names for the other variants are polytonicgreek and ancientgreek.

There is a full example in Polytonic Greek in the repository (tex, pdf):


With the ini method and if the locale has been explicitly requested, a macro is defined, \greeknumeral{number}, which converts the number to Ionian (alphabetic) form, as represented by the original babel greek style, and with the same upper limit (999999). However, the code has been rewritten from scratch, and now it’s fully expandable. There are three macros to customize it, which are redefined with \renewcommand:

In the ini file itself, which means they are available even if loaded on the fly, the following ‘locale’ counters are defined (see the explanation in the babel manual about \localecounter and localenumeral): lower.modern, upper.modern, lower.ancient, upper.ancient (in Ancient Greek, only the latter). There are some limitations, because they aren’t directly configurable and the upper limit is 9999.


Only luatex. The transform diaeresis.hyphen removes the diaeresis above iota and upsilon if hyphenated just before. It works with the three variants.


Only luatex. The transform applies the transliteration system devised by Yannis Haralambous for the Omega system. Although the provided combinations are not exactly the same (a few are currently missing), this transform follows its syntax: = for the circumflex, v for digamma, and so on. For better compatibility with Levy’s system, ~ (as ‘string’) is an alternative to =. The character ' is tonos in Monotonic Greek, but oxia in Polytonic and Ancient Greek.

This transliteration system does not convert the sigma at the end of a word (on purpose). The transform does it. To prevent the conversion (an abbreviation, for example), write "s.

A way to make ~ a valid character for the circumflex is:


This declaration applies to the whole document, but if you prefer to preserve the default meaning in other languages, you can write: