基本问题陈述
我想启用 OpenType 字体中的部分(但不是全部)风格替代“.end”字符,条件是它们可以替换终端单词中的字符。
不幸的是,使用此+salt
功能可以让他们全球在整个文本中,我不想要这样。
到目前为止,我已经尝试使用\directlua
来构建chainsubstitution
,然后通过添加它RawFeature
,但这产生了非常奇怪的结果。
\directlua
我认为这可能是我个人使用上的错误,如能得到纠正我将非常感激。
事实上,在我看来,我的方法有点儿不靠谱,尤其是在列出触发替换的所有条件时。如果有完全不同的方法可以巧妙地进行这种替换,我很乐意听听。
平均能量损失
这是一个简单的例子。我使用的是 Adobe Garamond Premier Pro。遗憾的是,我不知道手头有没有可以用于这种情况的免费选择,其中包含相同的“.end”字符。
为了方便起见,(我认为)我设置“a.end”来在“a”出现在句点之前时替换“a”。
使用此代码片段,只有使用普通罗马字体和粗体字体时,输出才符合预期。所有斜体形状都会以某种方式产生“d.end”字符。
\documentclass{minimal}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature{
name = "asub",
type = "chainsubstitution",
lookups = {
{
type = "substitution",
data = {
["a"] = "a.end",
},
},
},
data = {
rules = {
{
after = { { "." } },
current = { { "a" } },
lookups = { 1 },
},
},
},
}
}
\setmainfont[{RawFeature=+asub}]{Garamond Premier Pro}
\begin{document}
a.
{\itshape a. }
{\bfseries a. }
{\bfseries\itshape a. }
\end{document}
MWE 输出
笔记
- 使用
+salt
做生成正确的“a.end”字形,无论选择哪种粗体和/或斜体。使用 FontForge 检查不同的 OTF 文件时,我发现“a.end”字形在每个字体中的位置并不相同,但名称始终相同。 - 这只是这种错误替换的一个例子。“h.end”字符的行为类似。
答案1
这是由 中的一个错误引起的luaotfload
。它将在 1.19 版本中修复,但在此版本发布之前,可以使用开发版本来避免错误:
跑步:
git clone --branch dev --depth 1 https://github.com/latex3/luaotfload.git
cd luaotfload
l3build install
然后进行编译lualatex-dev
将使用 luaotfload 的开发版本而不是最新版本,并且问题中的代码可以正常工作。