我有一个带有 f_i 和 f_l 连字符的字体 (Dolly),需要一个功能文件才能使它们工作。使用以下方法一切正常:
# dolly.fea
languagesystem DFLT dflt;
languagesystem latn dflt;
feature liga {
sub f l by f_l ;
sub f i by f_i ;
} liga ;
与我的 .tex 文件位于同一目录中
\documentclass[12pt]{article}
\usepackage{microtype}
\usepackage{fontspec}
\newfontfeature{Microtype}{protrusion=default;expansion=default;}
\setmainfont[
FeatureFile = {dolly.fea},
Microtype,
Renderer=Basic,
Ligatures={TeX},
ItalicFont = {Dolly Italic},
]{Dolly Roman}
....
但问题是我不想.tex
每次都把它放在与我的文件相同的目录中。fontspec 手册建议使用完整路径应该可以,但是当我这样做时:
....
\setmainfont[
FeatureFile = {/path/to/dolly.fea},
Microtype,
Renderer=Basic,
Ligatures={TeX},
ItalicFont = {Dolly Italic},
]{Dolly Roman}
....
我收到错误
! LuaTeX error ...2/texmf-dist/tex/luatex/luaotfload/otfl-font-otf.lua:228: bad
argument #1 to 'attributes' (string expected, got boolean).
<to be read again>
relax
l.16 ]{Dolly Roman}
$TEXMF/fonts/fea/
当我将它放入或放在我的目录中时,它似乎也找不到它$TEXINPUTS
。它只是继续编译没有连字符的文件。(请注意,它kpsewhich
看到了它)。
所以,我的问题是:有没有办法设置一个我可以在整个系统内使用的功能文件,或者至少不需要将它复制到我想要运行的每个目录lualatex
中?
答案1
我已经找到答案了,以防其他人好奇。这适用于 TexLive 2013,我不确定它是否适用于其他地方。
将功能文件放在可以找到它的地方kpse
(我使用了/usr/local/texlive/texmf-local/luatex/luaotfload/
)并运行texhash
。确保文件具有小写名称(这让我困惑了一段时间)。
看起来很明显,但要么是我尝试了错误的目录,要么是之前忘记运行texhash
,要么是标题大小写不正确。无论是哪种情况,现在都可以正常工作了。
答案2
在当前的 miktex 和 texlive 2014 中,可以使用以下命令获取字体功能文件的搜索路径
kpsewhich --show-path="font feature files"
这给出了类型的路径<texmf-tree>/fonts/fea
。
我在两个系统上对其进行了测试,更新 fndb/ls-R 后它运行良好。