Warum funktionieren meine Ligaturen nicht?
\documentclass[12pt,a4page]{article}
\usepackage{fontspec}
\setmainfont[FeatureFile=pytanie.fea,
Path = /usr/share/fonts/dejavu/,
Extension=.ttf]{DejaVuSerif}
\begin{document}
ambona amarant żółw flaming i filharmonia.
młot
\end{document}
Dateipytanie.fea
languagesystem DFLT dflt;
languagesystem latn dflt;
feature liga {
sub \a \m by \fl;
sub 0061 by uniF731;
sub m ł by uni0062;
} liga;
Ich muss am
in eine Standardligatur f_l
,
a
in Unicode-Zeichen F731
und mł
in konvertieren b
.
Antwort1
Ich kann Ihnen nicht sagen, warum der Featurefile-basierte Ansatz nicht funktioniert. Glücklicherweise ist es jedoch nicht allzu schwierig, eine Lua-Funktion und einige TeX-seitige „Wrapper“-Makros (mit den Namen \myligsOn
und \myligsOff
) zu schreiben, um die Glyphenersetzungen direkt durchzuführen.
Im folgenden Code habe ich die Schriftart von DejaVuSerif
auf geändert Garamond Premier Pro
, da erstere an der Position kein Glyph zu haben scheint uniF731
.
% !TEX TS-program = lualatex
\documentclass{article}
%% load fontspec package and specify main font
\usepackage{fontspec}
\setmainfont{Garamond Premier Pro}% -- DejaVuSerif has no glyph at pos. F731
%% Lua-side code
\usepackage{luacode}
\begin{luacode*}
function myligs ( s )
s = unicode.utf8.gsub ( s , '(\\?)([%a@]+)' , function( backslash, text )
-- no substitutions inside (La)TeX macros
if backslash=='' then
text = unicode.utf8.gsub (text, 'mł', 'b' )
text = unicode.utf8.gsub (text, 'am', 'fl' )
text = unicode.utf8.gsub (text, 'a', '\\char"F731' )
end
return backslash .. text
end)
return s
end
\end{luacode*}
%% TeX-side code
\newcommand\myligsOn{\directlua{luatexbase.add_to_callback(
"process_input_buffer", myligs, "myligs")}}
\newcommand\myligsOff{\directlua{luatexbase.remove_from_callback(
"process_input_buffer", "myligs")}}
\begin{document}
\myligsOn
\small % Note: The 'a' in '\small' is *not* being converted to '\char"F731'.
mł am a
\myligsOff
mł am a
\end{document}