fontspec for LuaTeX
As previously
mentioned,
TeX Live 2010 will contain the first version of fontspec
to support
LuaTeX.
This has been made possible by a partial port of the ConTeXt OpenType
font handling system by Khaled Hosny and Elie Roux in their luaotfload
package (links:
CTAN,
Github). This package allows
users to load OpenType fonts in plain LuaTeX is much the same way as in
plain XeTeX:
\font\tenrm="name:Adobe Garamond Pro:+onum" at 10pt
\tenrm ...
Fonts may also be loaded by filename, as well.
\font\tenrm="file:AGaramondPro-Regular.otf:+onum" at 10pt
\tenrm ...
fontspec
uses these features to provide the same interface in LuaTeX
for loading fonts for LaTeX use:
\setmainfont[Numbers=OldStyle]{Adobe Garamond Pro} ...
Important comment #1: Before luaotfload
can load fonts by name as
in the example above, it must first create a database of installed fonts
in the operating system and in the TeX distribution. This performed by
executing the following script included with luaotfload
mkluatexfontdb.lua
(Use the --help
option for further info.) It will take a couple of
minutes the first time it is run, is quite fast to execute subsequently.
This script must be run whenever a font is added or removed from your
system. Work is ongoing to automate this process, but for now it still
requires manual attention.
When using fontspec
with XeLaTeX, it is usually recommended to load
the xltxtra
package, which addresses some infelicities of LaTeX (and
related packages) to ensure the output using unicode fonts is as good as
it should be (or even working at all).
Important comment #2: For LuaTeX, we’ve decided that there’s no
point requiring a separate package to do these things, so the core of
xltxtra
has been simplified and included within fontspec
itself. For
backwards compatibility, XeTeX users should continue to use the
xltxtra
package, however.
Some parts of xltxtra
have not been incorporated into fontspec
itself. The most important feature that has not been included is
automatic access to OpenType superscripts and subscripts. This feature
of xltxtra
has caused several headaches over the years with problems
related to poor font support and conflicts with other packages that also
redefine sub/superscript commands (especially related to footnotes).
This feature will be released as a separate package in the near future.
A similar philosophy has been taken with Ross Moore’s xunicode
package. This package defines LaTeX interfaces for a wide variety of
accents, accented letters, and symbols for unicode fonts. For example,
writing ’ \"u
’ to output ’ u ‘, and so on. This is the function that
is usually performed transparently (for 8-bit TeX fonts) by LaTeX’s
“font encoding” definitions. At the moment, xunicode
is restricted to
running under XeTeX only. Therefore, for LuaTeX support, we have decided
(for now, at least) to incorporate the functionality of xunicode
within the unicode font encoding definition used by fontspec
to load
its fonts (see the euenc
package if you’re interested in the details).
This might be a decision we reverse or revisit later. But for now,
important comment #3 is to avoid loading the xunicode
package
when using LuaTeX.
TeX users are long accustomed to using shorthand ligatures to type
quotes and other punctuation while restricted to ASCII keyboard
characters. For example, writing ’ ---
’ for an em-dash. In XeLaTeX,
the standard way to achieve this same behaviour was to load the
tex-text
input mapping:
\setmainfont[Mapping=tex-text]{...}
Important comment #4: In LuaLaTeX, a different notation is used. Instead, you must write
\setmainfont[Ligatures=TeX]{...}
If you use the XeLaTeX syntax in LuaLaTeX, a warning will be issued but
the correct behaviour will still result. The new syntax
(Ligatures=TeX
) is supported under XeLaTeX as well.
In summary of the above, when using LuaLaTeX simply load fontspec without any other packages:
\usepackage{fontspec}
And remember to run mkluatexfontdb.lua
to keep the font database in
sync.
LuaTeX support for fontspec is very new and still undergoing
development. We might change the way some things currently work, and
there might still be rough edges in the current behaviours. Ongoing
development for LuaLaTeX is discussed on the lualatex-dev
mailing
list. Your feedback
with suggesting improvements and reporting bugs is greatly appreciated.