基本问题陈述

基本问题陈述

基本问题陈述


我想启用 OpenType 字体中的部分(但不是全部)风格替代“.end”字符,条件是它们可以替换终端单词中的字符。

不幸的是,使用此+salt功能可以让他们全球在整个文本中,我不想要这样。

到目前为止,我已经尝试使用\directlua来构建chainsubstitution,然后通过添加它RawFeature,但这产生了非常奇怪的结果。

\directlua我认为这可能是我个人使用上的错误,如能得到纠正我将非常感激。

事实上,在我看来,我的方法有点儿不靠谱,尤其是在列出触发替换的所有条件时。如果有完全不同的方法可以巧妙地进行这种替换,我很乐意听听。

平均能量损失


这是一个简单的例子。我使用的是 Adob​​e 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 输出


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 的开发版本而不是最新版本,并且问题中的代码可以正常工作。

相关内容