菜单

字体特性

相关源文件

本页面概述了 Fira Code 的关键排版和编程特定功能,这些功能使其独具特色。它涵盖了连字、字符变体、样式集以及字体中提供的其他 OpenType 功能。有关特定连字实现的详细信息,请参阅连字与编程符号。有关如何在不同环境中启用这些功能的说明,请参阅安装与使用

核心功能概览

Fira Code 是一款专为编程设计的等宽字体,包含多项独特功能。

  1. 编程连字 - 将多个字符组合渲染为单个逻辑标记
  2. 字符变体 - 特定字符的替代设计
  3. 样式集 - 替代字符设计的集合
  4. 特殊符号支持 - 广泛涵盖编程和数学符号
  5. 框线绘制和控制台 UI - 增强对终端界面的支持

来源:README.md1-63 FiraCode.glyphs593-653

编程连字

Fira Code 最显著的特点是其编程连字。这些连字将常见的多个字符组合在视觉上合并为单个逻辑标记,使代码更易于阅读,同时保留了底层的 ASCII 文本。

Fira Code 包含十多种类别的 100 多个连字。

类别示例目的
相等运算符== === != !==提高比较操作的可读性
箭头运算符-> => <- <=在函数类型和操作中清晰地显示方向
比较运算符<= >= <>使比较更清晰
赋值运算符:= =:= <-区分不同的赋值类型
逻辑运算符&& ||使逻辑运算更突出
标点符号序列:: ... ..提高分隔符和范围的可读性
数学运算符/= *> <*使数学运算更清晰

Fira Code 4.0+ 的一项关键功能是组合箭头系统,允许构建任意长度的箭头。

基础组合示例
- 为基础--> <-- <--> 及更长变体
= 为基础==> <== <==> 及更长变体
~ 为基础~> <~ <~> 及更长变体

来源:README.md7-17 README.md29-45 CHANGELOG.md97-101

字符变体

Fira Code 通过 OpenType 字符变体(cv01-cv32)为许多字符提供了多种替代设计。这允许在不更改字体的情况下自定义字体外观。

以下是可用字符变体的一些示例。

字符变体OpenType 功能
a标准和替代cv01
g标准和替代cv02
i四种不同样式cv03-cv06
l四种不同样式cv07-cv10
0带斜杠和圆点,不带斜杠和圆点cv11-cv13
3标准和替代cv14
*居中对齐和顶部对齐,六边形cv15-cv16
~标准和顶部对齐cv17
%标准和替代cv18
<=不同样式cv19-cv20
{}标准和替代cv29
|标准和长形cv30

来源:README.md43-49 CHANGELOG.md44-67

样式集

样式集是可以一起启用的替代字符设计组。Fira Code 包含 10 个样式集(ss01-ss10)。

一些值得注意的样式集

  1. ss01 - 替代的小写 'r' 设计
  2. ss02 - 替代的小于/大于号(<=, >=)设计
  3. ss03 - 替代的“与”号设计
  4. ss04 - 替代的美元符号设计
  5. ss08 - 在相等运算符中添加小间隙以提高区分度
  6. ss10 - 'fi', 'fl', 'Fl', 'Tl', 和 'ft' 的传统连字

来源:README.md43-49 CHANGELOG.md44-67 CHANGELOG.md185-197

OpenType 特性

Fira Code 通过 OpenType 功能的组合来实现多种标准功能,这些功能控制着字体渲染的各个方面。

Fira Code 中的主要 OpenType 功能包括:

功能标签描述
上下文交替calt编程连字的主要机制
标准连字liga传统的文本连字(默认禁用)
斜零zero为零字符应用斜线形式
旧式数字onum将数字形状改为不同高度
区分大小写形式case调整标点符号以适应全大写文本
样式集ss01-ss10样式替代组
字符变体cv01-cv32单个字符替代

calt 功能尤为重要,因为它支持 Fira Code 的大部分编程连字。它会分析字符序列,并根据周围字符的上下文应用连字。

来源:FiraCode.glyphs593-653 FiraCode.glyphs954-959

特殊符号支持

Fira Code 为编程、数学和终端界面中常用的特殊符号提供了广泛的支持。

框线绘制和控制台 UI

Fira Code 对 ASCII/框线绘制字符有极佳的支持,使其成为终端和控制台界面的理想选择。

┌───────────────────┐
│ Box drawing demo  │
├───────────────────┤
│ ╔═══╗ ┏━━━┓ ┏━━━┓ │
│ ║   ║ ┃   ┃ ┣━━━┫ │
│ ╚═══╝ ┗━━━┛ ┗━━━┛ │
└───────────────────┘

进度条

Fira Code 是第一个为渲染进度条提供专用字形的编程字体。

[■■■■■■■■··] 80%
[■■■·······] 30%
[■■■■■■····] 60%

数学符号

该字体包含全面的 Unicode 覆盖,用于数学书写。

类别示例
逻辑符号
集合运算
比较
箭头
杂项

来源:README.md50-67 CHANGELOG.md117-125 CHANGELOG.md138-181

实现细节

Fira Code 的功能是通过字形设计和 OpenType 功能编程的组合来实现的。了解这些功能的实现方式有助于进行故障排除和自定义。

连字实现

Fira Code 中的连字主要通过 calt(上下文交替)OpenType 功能来实现。该实现使用复杂的替换规则,以确保连字在适当的上下文中应用,并且不会引起混淆。

例如,箭头连字系统使用一系列查找来将字符组合成任意长度的箭头。

lookup equal_arrows {
  # Disable |||
  ignore sub bar bar' bar equal;
  ignore sub bar bar' equal;
  ignore sub [equal_start.seq equal_middle.seq] bar' bar bar;

  # equal middle & end
  sub [less_equal_start.seq ...] equal' [equal less greater ...] by equal_middle.seq;
  ...
}

此查找是允许组合箭头构造的复杂系统的一部分,该系统已在 Fira Code 4.0 中引入。

来源:FiraCode.glyphs966-1779 CHANGELOG.md93-103

字符变体与风格集

字符变体和样式集作为单独的 OpenType 功能(cv01-cv32 和 ss01-ss10)实现。这些功能执行从一个字形到另一个替代设计的简单替换。

在 OpenType 功能代码中,这些定义了简单的替换规则。

# Example of a character variant (cv01 - alternative 'a')
sub a by a.cv01;

# Example of a stylistic set (ss01 - alternative 'r')
sub r by r.ss01;

来源: FiraCode.glyphs620-649 CHANGELOG.md44-67

特性演进

Fira Code 的功能随时间不断发展。主要里程碑包括

版本关键功能添加
7.0错误修复和维护
6.0新增 Unicode 字符,修订了变体系统
5.0垂直对齐符号,新增数学字符
4.0组合箭头系统,无限箭头组合
3.0数学符号,集合运算,控制台改进
2.0方框绘制改进,数学角度括号
1.0多种字重,切换到上下文变体

最重要的是,4.0 版本引入了组合箭头系统,该系统取代了单独的箭头连字,提供了一个更灵活的系统,通过字符组合创建任意长度的箭头。

来源: CHANGELOG.md5-11 CHANGELOG.md18-67 CHANGELOG.md93-103

兼容性和限制

虽然 Fira Code 的功能在大多数现代环境中都能正常工作,但也有一些限制需要注意

  1. 编辑器支持 - 并非所有编辑器都能完全支持 OpenType 功能。如需完整的列表,请参阅 安装和使用

  2. 终端支持 - 终端支持差异很大。iTerm2、Windows Terminal 和 Kitty 等终端支持良好,而其他终端可能支持有限或不支持。

  3. 连字冲突 - 某些连字可能与特定语言的语法结构冲突。Fira Code 尝试通过在可能发生冲突的上下文中禁用连字来避免这种情况。

  4. 性能 - 在某些环境中大量使用连字可能会影响文本渲染性能。

来源: README.md74-146 README.md149-171 CHANGELOG.md65-67

自定义选项

Fira Code 可以在构建时进行自定义,以永久启用特定功能。这对于无法切换功能的不可定制的环境非常有用。

这将构建一个 Fira Code 的自定义版本,默认启用指定的功能。您还可以使用 --weights 选项选择要构建的字重。

来源: README.md254-270