菜单

OpenType 特性

相关源文件

本文档解释了 Fira Code 中实现的 OpenType 功能,以及它们如何增强字体以用于编程。它涵盖了功能定义的技​​术方面、它们的工作方式以及如何在不同环境中启用或禁用它们。有关 Fira Code 中可用连字(ligatures)的特定信息,请参阅连字和编程符号。有关可用字符变体和样式集的详细信息,请参阅字符变体和样式集

OpenType 功能概述

OpenType 功能是内置于字体中的特殊排版功能,可实现高级文本渲染功能。Fira Code 使用这些功能来实现编程连字、替代字符形式和字形定位调整。

来源:FiraCode.glyphs6-17 CHANGELOG.md38-68

功能实现

在 Fira Code 中,OpenType 功能通过功能文件(.fea)实现,这些文件定义了基于上下文的字形替换规则。这些文件在主字体定义文件(FiraCode.glyphs)中引用,并在构建阶段进行处理。

来源:features/calt/equal_arrows.fea1-73 features/ss09.fea1-21 features/ss10.fea1-32

上下文交替(calt)

calt 功能是实现 Fira Code 编程连字的主要机制。它使用上下文敏感规则将字符序列替换为自定义字形。

例如,在features/calt/equal_arrows.fea中,存在复杂的替换规则,可以实现

  1. 任意长度的箭头序列(->-->--->
  2. 基于等号的箭头(=>==>===>
  3. 高级组合(<=>>=><===>

来源:features/calt/equal_arrows.fea7-29 features/calt/center.fea1-25

字符变体与风格集

字符变体(cv01-cv32)和样式集(ss01-ss10)提供了字符或字符组的替代设计

  • 字符变体为单个字形提供替代形式(例如,替代的 'a'、'g'、'0')
  • 样式集将相关的替代项分组(例如,ss02 影响比较运算符)

来源:features/ss09.fea1-21 features/ss10.fea1-32 CHANGELOG.md44-68

OpenType 功能的演变

Fira Code 的 OpenType 功能随着时间的推移发生了显著变化,这在更新日志中有记载。值得注意的发展包括

版本功能变更
7.0-6.0重新组织了功能,将某些连字移至样式集
6.0添加了许多字符变体(cv01-cv32)
5.0-4.0实现了组合箭头替换
3.0-2.0添加了更多符号和连字
1.0liga 切换到 calt 以获得更好的编辑器兼容性

最重大的架构变化发生在 4.0 版本,当时单个箭头连字被替换为一个组合系统,该系统允许任意长度的箭头序列,从而大大提高了性能和灵活性。

来源:CHANGELOG.md5-68 CHANGELOG.md93-104

技术实现细节

替换机制

让我们看一下等号箭头替换的工作原理

替换通过 OpenType 引擎的多个传递(passes)进行增量式处理

  1. 首次传递:检测潜在的连字序列的开始
  2. 中间传递:将中间字符替换为特殊的连接字形
  3. 最后传递:将最后一个字符替换为结束字形

这实现了 Fira Code 特有的任意长度序列,例如箭头。

来源:features/calt/equal_arrows.fea7-72

查找规则和优先级

Fira Code 中的 OpenType 功能是通过查找表实现的,这些表定义了替换规则。规则按顺序处理,后面的规则可能会覆盖前面的规则。

一些重要的规则类型

  1. 替换规则:根据上下文将一个字形替换为另一个字形

    sub [equal_start.seq equal_middle.seq] equal' by equal_end.seq;
    
  2. 忽略规则:在特定上下文中阻止替换

    ignore sub greater' equal less;  # Prevents >=< ligature
    
  3. 多重替换:一次替换多个字形

    sub less' less equal by less.spacer;  # Handles <<= sequence
    

来源:features/calt/equal_arrows.fea3-72 features/calt/center.fea11-17

使用 OpenType 功能

启用和禁用功能

不同的应用程序和环境提供不同的控制 OpenType 功能的方法

CSS (Web)

代码编辑器

VS Code

JetBrains IDE: 设置 > 编辑器 > 字体 > 启用连字

有关编辑器特定的详细信息,请参阅编辑器和终端兼容性

常用功能组合

根据展示和用户偏好,一些有用的功能组合包括

  1. 编程优化:默认连字,带 ss02 以实现清晰的比较运算符
  2. 可读性关注:启用 cv01cv02ss01 以获得更清晰的字母形式
  3. 极简:禁用 calt,仅启用 ss10 以实现传统的文本连字

来源:extras/showcases.txt45-136 CHANGELOG.md38-68

故障排除

如果 OpenType 功能不起作用

  1. 检查您的应用程序是否支持 OpenType 功能
  2. 验证字体是否已正确安装
  3. 尝试通过应用程序设置明确启用功能
  4. 某些环境可能需要特定配置(请参阅桌面安装

技术参考

Fira Code 中可用的 OpenType 功能

功能描述示例
calt上下文交替(主要连字)-> → 箭头,=> → 粗箭头
liga标准连字fi fl ft
zero带斜线的零0 → 带斜线的 0
onum旧式数字0123456789 → 旧式数字
cv01-cv32字符变体特定字符的替代形式
ss01-ss10样式集分组的替代设计

来源:FiraCode.glyphs6-17 CHANGELOG.md38-68 extras/showcases.txt102-136