lualatex 中的系统范围功能文件

lualatex 中的系统范围功能文件

我有一个带有 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 后它运行良好。

相关内容