我在 Ubuntu 上使用 TeXlive 2016 和 LuaLaTex,全部都是最新版本。大约一周前,以下代码对我有用。它使用 Lua 代码定义了一个新的自定义 Open Type 功能,如其他人所述。在序言中:
\ExplSyntaxOn
\DeclareDocumentCommand \CreateFontFeature { m m }
{
\IfEndWith{#1}{,}{\StrGobbleRight{#1}{1}[\@fakezero]}{\def\@fakezero{#1}}
\def\@fakeone{["\@fakezero"}
\StrSubstitute{\@fakeone}{=}{"]="}[\@faketwo]
\StrSubstitute{\@faketwo}{,}{",\space["}[\@fakethree]
\directlua{
fonts.handlers.otf.addfeature {
name = "#2",
{type = "substitution", data = {\@fakethree},},
"feature #2 for some fonts",
}
}
}
%
\ExplSyntaxOff
\CreateFontFeature{emdash=emdash.alt}{emda}
%
\newfontfamily\agp[RawFeature=+emda]{Adobe Garamond Pro}
然后在文档中,我使用该字体作为{\agp text}
。
它所做的就是用较短的破折号代替通常的长破折号。遗憾的是,较短的破折号不属于 OT 功能集之一。
就在今天,我发现上面的代码不再起作用了。显然+emda
不再处理并传递给字体。
可能性 1:在我的总代码中,作为 MWE,它太长了,无法在这里发布,我做了一些干扰上述操作的事情。
可能性 2:我注意到 fontspec 和 luaotfload 最近有一些更新。有问题吗?
所以我的问题是:还有其他用户做过类似的事情吗?截至今天为止的经验?
答案1
语法好像变了。看看在当前上下文中起作用的一些上下文示例(例如http://minimals.metatex.org/current/context/test/doc/context/tests/mkiv/fonts/extensions-001.tex) 不同之处在于data
和type
不再位于子表中,并且解释性文本已被删除。这对我来说有效:
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature {
name = "emda",
type = "substitution",
data = {emdash="A"},
%"feature for xxx" %makes it fail
}}
\newfontfamily\agp[RawFeature=+emda]{Arial}
\begin{document}
— {\agp —}
\end{document}