菜单

构建流程

相关源文件

本文档提供了 Fira Code 构建过程的技术概述,解释了字体如何从源文件构建成各种分发格式。本页面重点介绍用于生成字体文件的构建脚本、工具和命令。有关开发环境设置的信息,请参阅 开发环境设置

概述

Fira Code 构建过程将源 Glyphs 文件(FiraCode.glyphs)转换为多种字体格式(OTF、TTF、Variable Font、WOFF、WOFF2),以适应不同的使用场景。构建通过 shell 脚本进行编排,并使用 Docker 来确保一致的构建环境。

构建系统架构

来源: script/build.sh96-101 Makefile3-7

构建环境

构建环境在 Dockerfile 中定义,确保跨不同系统构建的一致性

来源: Dockerfile1-9 Makefile4

构建过程步骤

1. 主要构建入口

构建过程以 make build 命令开始,该命令在 Docker 容器内运行 build.sh 脚本

这确保了一个包含所有必需依赖项的一致构建环境。

来源: Makefile3-4

2. 构建脚本流程

主构建脚本(build.sh)协调整个过程

  1. 解析命令行参数以进行自定义
  2. 创建临时 Glyphs 文件
  3. 如果指定,则应用功能
  4. 根据需要调整字体族名称
  5. 调用各个构建脚本以生成不同的字体格式

来源: script/build.sh1-103

3. 字体格式构建

每种字体格式都有一个专门的构建脚本,该脚本

  • 创建输出目录
  • 清理任何现有文件
  • 使用适当的工具生成字体文件
  • 应用格式特定的后处理

生成的主要字体格式包括:

格式文件扩展名描述生成者
OpenType.otf桌面安装,注重打印build_otf.sh
TrueType.ttf桌面安装,注重屏幕显示,带微调build_ttf.sh
可变字体.ttf (VF)单一文件包含所有字重build_variable.sh
WOFF.woffWeb 字体格式,兼容性更广build_woff.sh
WOFF2.woff2Web 字体格式,压缩效果更好build_woff2.sh

来源: script/build_otf.sh1-27 script/build_ttf.sh1-31 script/build_variable.sh1-42 script/build_woff.sh1-28 script/build_woff2.sh1-28

4. 字重

默认情况下,构建过程会生成以下字重的字体:

字重描述
细体最细字重
常规标准字重
Retina为高 DPI 显示器优化
中等中等字重
半粗体半粗字重
粗体最粗字重

来源: script/build_otf.sh15 script/build_ttf.sh15

字体生成详情

OTF 构建流程

OpenType 字体 (OTF) 构建流程

对于每个字重,调用 fontmake 直接从源 Glyphs 文件生成 OTF 文件

来源: script/build_otf.sh18-27

TTF 构建流程

TrueType 字体 (TTF) 构建流程包含一个额外的微调步骤

TTF 生成包括:

  1. 使用 fontmake 生成
  2. 使用 ttfautohint 进行微调

来源: script/build_ttf.sh18-31

可变字体构建流程

可变字体构建流程需要特殊处理

可变字体生成包括:

  1. 修改 Glyphs 文件以禁用 Retina 导出
  2. 使用 fontmake 的可变字体选项生成
  3. 使用 gftools 进行后处理,以修复元数据和微调

来源: script/build_variable.sh18-42

Web 字体构建

Web 字体格式 (WOFF/WOFF2) 是从 TTF 文件生成的

来源: script/build_woff.sh21-27 script/build_woff2.sh21-27

构建自定义

构建过程支持多种命令行选项以进行自定义

示例

来源: script/build.sh12-58 script/build.sh67-77

打包与分发

构建完成后,可以使用以下命令将字体打包分发

这将运行 script/package.sh 来创建一个包含所有生成字体文件的分发包。

来源: Makefile6-7

输出文件结构

构建过程在以下目录结构中生成字体文件

distr/
├── otf/
│   └── Fira Code/
│       ├── FiraCode-Bold.otf
│       ├── FiraCode-Light.otf
│       ├── FiraCode-Medium.otf
│       ├── FiraCode-Regular.otf
│       ├── FiraCode-Retina.otf
│       └── FiraCode-SemiBold.otf
├── ttf/
│   └── Fira Code/
│       ├── FiraCode-Bold.ttf
│       ├── FiraCode-Light.ttf
│       ├── FiraCode-Medium.ttf
│       ├── FiraCode-Regular.ttf
│       ├── FiraCode-Retina.ttf
│       └── FiraCode-SemiBold.ttf
├── variable_ttf/
│   └── Fira Code/
│       └── FiraCode-VF.ttf
├── woff/
│   └── Fira Code/
│       ├── FiraCode-Bold.woff
│       ├── FiraCode-Light.woff
│       ├── FiraCode-Medium.woff
│       ├── FiraCode-Regular.woff
│       └── FiraCode-SemiBold.woff
└── woff2/
    └── Fira Code/
        ├── FiraCode-Bold.woff2
        ├── FiraCode-Light.woff2
        ├── FiraCode-Medium.woff2
        ├── FiraCode-Regular.woff2
        └── FiraCode-SemiBold.woff2

来源: script/build_otf.sh9 script/build_ttf.sh9 script/build_variable.sh9-10 script/build_woff.sh8-9 script/build_woff2.sh8-9

运行完整构建

要运行完整的构建和打包过程,您可以使用

或者,您可以使用便捷脚本

该脚本会按顺序执行构建步骤和打包。

来源: script/everything1-9