[[LuaTeX]] and [[MkIV]] allow advanced usage and manipulation of [[Open Type]] <i>open-type features</i>. Some features, such as <i>onum</i> (oldstyle) and <i>smcp</i> (smallcaps) are known to most users of Open Type fonts, and virtually every open type font has default features for kerning (<i>kern</i>) and ligatures (<i>liga</i>). More advanced OT fonts can have lots more, including the Stylistic Set feature <i>ss<nn></i> (where <i>nn</i> stands for any numeral between 01 and 99).
== Featuresets ==
A featureset is a composed of a set of open-type features. Featuresets are specified using <{{cmd>|definefontfeature</cmd>}}. For each given body font in the typeface we specify the ''global'' default set of <i>open-type</i> features to be used for that font. This is usually done in the preamble to our document, an environment file, or a typescript file, or the like.
For example, using TeX-Gyre Schola we can specify the following default, global set open-type features in the preamble:
</texcode>
<{{cmd>|definefontfeature</cmd>}}
All other open-type features in the font are not included in the processing.
Now when we want to change the default, we use <{{cmd>|definefontfeature</cmd> }} to specify local featuresets. The command <{{cmd>|feature</cmd> }} and its siblings is then used to control the action of those featuresets. Here are the commands:
<texcode>
In the above note that we start with just a global, default feature set of kerns, ligatures, and line numerals.
Now when we want to change the default, we use <{{cmd>|definefontfeature</cmd> }} to specify featuresets. The command <{{cmd>|feature</cmd> }} and its siblings is then used to control the action of those featuresets.
At this stage which open-type feature is being plugged into or unplugged from the stack is invisible to the user. We just speak in terms of featuresets. TeX-Gyre Schola has a decent set of open-type features. Using a few of them, let us set up a few featuresets: