使用 lualatex、TeXlive 2023。
我发现了一些东西,可以用“蛮力”来实现。现在,我想让它“按照规则”发挥作用。
情况:在文字处理器中,两个连字符被转换为 emdash。但在纯文本中--
有三个连字符,TeX Ligatures(功能)将其转换为 emdash。阅读 TeX 教程(!)后,用户在文字处理器中输入,文字立即被更改为 emdash 后跟一个连字符。这很难注意到。当将文本导出为纯文本,然后由 LuaLaTeX 排版时,结果是 emdash 后跟连字符(在 PDF 中也很难注意到)。---
tlig
---
期望结果:让 LuaLaTeX 将 emdash 连字符转换为仅 emdash。目前尚无已知情况需要 emdash 后跟连字符。
暴力解决方案(有效):在文件中,在定义luaotfload-features.lua
emdash 后立即添加以下代码: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}