# 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