# luatex: Feature File
([Malipivo, 2014](http://tex.stackexchange.com/a/179284/10995))
Am einfachsten geht es mit LuaLaTeX und einem Feature-File. Zeichen ersetzen geht dabei mit Hilfe einer Ligatur. Man kennt Ligaturen normalerweise daher, dass zum Beispiel `ff` durch `ff` ersetzt wird. Dieser Mechanismus erlaubt es jede beliebige Kombination von Zeichen durch eine andere zu ersetzen. Hier ersetzen wir `one` durch `one.alt001`.
feature liga {
sub one by one.alt001;
} liga;
Eine ausführliche Dokumentation zur Syntax von Feature-Files gibt es auf der Seite von [Adobe](https://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html).
\documentclass{article}
\begin{filecontents*}{scala-one.fea}
# Script and language coverage
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligature formation
feature liga {
sub one by one.alt001;
} liga;
\end{filecontents*}
\usepackage{fontspec}
\setromanfont[Extension=.otf,UprightFont= *Regular,FeatureFile=scala-one.fea]{ScalaPro-}
\begin{document}
01234
\end{document}
> ![alt text][1]
# xetex: Character Classes
([egreg, 2011](http://tex.stackexchange.com/a/23295/10995))
In XeTeX gibt es das Konzept der Character Classes. Jedes Zeichen gehört standardmäßig zur Character Class 1 (mit einigen Ausnahmen, z.B. bei CJK, siehe [Docs](http://texdoc.net/texmf-dist/doc/xetex/xetexref/xetex-reference.pdf#page=14)). Die Wortgrenzen, also Leerraum jeder Art, sind aus Class 255.
Mit `\XeTeXinterchartoks` lässt sich zu Laufzeit Material zwischen Zeichen beliebiger Klassen einfügen. Wir erstellen zunächst eine neue Klasse und fügen das Zeichen `1` hinzu.
\newXeTeXintercharclass\aalt
\XeTeXcharclass`1=\aalt
Nun fügen wir zwischen allen Zeichen der Klasse 0 und `\aalt` sowie 255 und `\aalt` Material ein.
\XeTeXinterchartoks 0 \aalt = {\begingroup\addfontfeatures{RawFeature=+aalt}}
\XeTeXinterchartoks 255 \aalt = {\begingroup\addfontfeatures{RawFeature=+aalt}}
\XeTeXinterchartoks \aalt 0 = {\endgroup}
\XeTeXinterchartoks \aalt 255 = {\endgroup}
Das bedeutet, dass wenn eine 1 im Text gefunden wird, wird davor `\begingroup\addfontfeatures{RawFeature=+aalt}` und danach `\endgroup` eingefügt. Wir schalten also lokal das Feature `+aalt` an. Zu guter Letzt müssen wir die `\XeTeXinterchartoks` noch aktivieren. Das geht mit
\XeTeXinterchartokenstate=1
Möchte man die Funktionalität kurz deaktivieren, so setzt man die Variable einfach auf 0.
\documentclass{article}
\pagestyle{empty}
\usepackage{fontspec}
\setromanfont[Extension=.otf,UprightFont= *Regular]{ScalaPro-}
\newXeTeXintercharclass\aalt
\XeTeXcharclass`1=\aalt
\XeTeXinterchartoks 0 \aalt = {\begingroup\addfontfeatures{RawFeature=+aalt}}
\XeTeXinterchartoks 255 \aalt = {\begingroup\addfontfeatures{RawFeature=+aalt}}
\XeTeXinterchartoks \aalt 0 = {\endgroup}
\XeTeXinterchartoks \aalt 255 = {\endgroup}
\XeTeXinterchartokenstate=1
\begin{document}
01234
\end{document}
> ![alt text][2]
[1]: http://texwelt.de/wissen/upfiles/test_95.png
[2]: http://texwelt.de/wissen/upfiles/test_96.png