是否应使用某些连字(如果字体中可用)至少在理论上取决于所使用的语言。例如,传统的德语文本没有“ffl”连字,但有“ft”以及“ch”和“ck”。
pdfTeX 支持禁用选定的连字符,但您始终会禁用以某个字符开头的全套连字符,因此不可能删除“ffl”但保留“fi”。(我还没有检查 pdfTeX 实际上做了什么,这是我从 microtype 手册中理解的)。
通过阅读 LuaTeX 手册,我发现理论上应该有更精细的控制,但我没有看到可以与连字机制挂钩的概念,以便轻松提供基于语言的抽象。在我看来,机制应该在排版阶段(或接近排版阶段)应用,而不是在输入准备期间应用,即“可以抑制某些单词的连字吗?”在游戏中过早地解决了这个问题。
我的问题是:
- 已经为这个编程了什么吗?
- 如果不是,考虑到 LuaTeX 的当前功能,它会有多复杂,或者是否仍然缺少一些有用的接口?
不幸的是,这并没有解决如何指定某些语言可能需要“连字字距”的问题,即,一些额外的字距调整只在特定语言中使用,以使一些字符对比其他语言更靠近。
答案1
除了这个问题可以(或多或少)自动抑制某些单词的连字吗?(以及相关答案)您已经在帖子中提到,您可能还想查看后续问题的内容:对于允许禁用(预)选定单词的连字的新软件包的功能,有什么建议/要求吗?和如果字符串是宏或标签的一部分,如何抑制 luatex 定义的宏对字符串的操作. 无耻的自我引用警报!
特别是在后一个问题中,我提供了 lua 代码的雏形,用于禁止对某些单词使用某些(或所有)连字符。此代码可以很容易地通过将其链接到 中的语言选项集的使用来特定于语言babel
。
不幸的是,我最初计划创建一个独立的包来实现这种方法,但在我发现代码太强大了:无法指示连字符替换(或抑制)算法不是对 TeX 宏进行操作;例如,如果有一个名为的宏\auflaufen
,显然不能指示 luatex 不要将字符串“auflaufen”替换为“auf{\hspace{0pt}}laufen}”,从而导致不可预测的混乱后果。同样,不能指示连字抑制算法不对某些宏的参数进行操作,例如\label
和\ref
(以及,等等\vref
)\cref
。出于这些原因,我暂时放弃了将其制作成一个独立包,因为它的适用性充其量也只是“实验性的”。希望有更多的 lua 编程工具和钩子可用,这样就可以设置所需的例外(例如,不要对 TeX 宏的名称进行操作,不要对、等的参数进行操作\label
)\ref
,使我开发的方法可供公众使用。
答案2
OpenType 字体将连字分为必需、通用、上下文、罕见/自由裁量和历史;并且每个连字都有“功能”(rlig
、liga
、clig
、dlig
、 & hlig
),可以通过 fontspec (大概还有 ConTeXt,但我不确定)单独启用或禁用。
例如,在这个答案,字母间距 Fraktur 要求保留某些连字符(ch、ck、ſt 和 tz),但禁用其他连字符。因此,给出的 fontspec 调用禁用了“常用”连字符,但明确启用了“必需”连字符;—这是重要的部分—该示例中使用的字体已为此目的正确分类连字。
因此,这只是部分答案。它只适用于 OpenType 字体,因为这种连字符分类已经正确地完成,并且在任意情况下它都是无用的(例如)启用“fi”但禁用“fl”。(另一方面,字体设计德语可能根据语言设置启用不同的连字表。YMMV。
(在紧握的手上,看到在 LuaLaTeX 中更改字体字距的示例,这表明在字体加载时可以包含对有缺陷的 OpenType 表(可能包括连字表)的补丁。)