Luaotfload 为 emdash 连字符

Luaotfload 为 emdash 连字符

使用 lualatex、TeXlive 2023。

我发现了一些东西,可以用“蛮力”来实现。现在,我想让它“按照规则”发挥作用。

情况:在文字处理器中,两个连字符被转换为 emdash。但在纯文本中--有三个连字符,TeX Ligatures(功能)将其转换为 emdash。阅读 TeX 教程(!)后,用户在文字处理器中输入,文字立即被更改为 emdash 后跟一个连字符。这很难注意到。当将文本导出为纯文本,然后由 LuaLaTeX 排版时,结果是 emdash 后跟连字符(在 PDF 中也很难注意到)。---tlig---

期望结果:让 LuaLaTeX 将 emdash 连字符转换为仅 emdash。目前尚无已知情况需要 emdash 后跟连字符。

暴力解决方案(有效):在文件中,在定义luaotfload-features.luaemdash 后立即添加以下代码:tlig

[0x2014] = {0x2014, 0x002D},

我的问题是:除了破解文件之外luaotfload-features.lua,还能做些什么?

评论:文学作家经常需要与编辑沟通,编辑只会审查 MS Word 格式的文件(没有任何 TeX 标记)。

答案1

首先说明一下“强力解决方案”:虽然它确实成功地变成—-,但它破坏了正常的---连字符,随后变成了–-(一个短划线后跟一个连字符)。

通常,更改现有功能的行为不是一个好主意,因为它们不再以预期的方式运行,而且很难找出更改来自何处。相反,可以通过添加新的自定义功能(然后可以在 fontspec 中默认启用此功能(如果需要))来完成此类更改。这可以通过在序言中添加以下内容来完成:

\directlua{
  fonts.handlers.otf.addfeature {
    name = 'rallg_hyphens',
    type = 'ligature',
    data = {
      [0x2014] = {0x2014, 0x002D},
    },
  }
}
% To enable it by default in fontspec similar to tlig also add:
\defaultfontfeatures+
 [\rmfamily,\sffamily]
 {RawFeature=rallg_hyphens}

相关内容