Nerd Fonts 中的 Ubuntu Mono:图标集构成、字体变体选择与自行补丁完整指南
Nerd Fonts 中的 Ubuntu Mono:图标集构成、字体变体选择与自行补丁完整指南
Nerd Fonts 是一个为开发者字体批量注入图标字形的开源项目,而 Ubuntu Mono 是其已补丁字体家族之一(上游版本 0.80)。本文以 patched-fonts/UbuntuMono/README.md 为核心,完整介绍该字体的背景、内置的 14 套图标集、Nerd Font / Nerd Font Mono / Nerd Font Propo 三种变体的选择逻辑,以及"直接下载"与"用 font-patcher 自行补丁"两条实战路径。读完本文,你可以准确判断哪种 Ubuntu Mono 变体适合你的终端与 GUI 场景,并能在需要定制图标集时独立完成补丁操作。
Ubuntu Mono 字体背景
Ubuntu Mono 出自 Ubuntu 字体家族(Ubuntu Font Family),这是一套配套开发的开源自由字体。根据 patched-fonts/UbuntuMono/README.md 的说明:
- 主要开发期为 2010–2011 年,并在 2015 年 进行了进一步的扩展与缺陷修复;
- 开发由 Canonical Ltd 出资,面向更广泛的自由软件社区与 Ubuntu 项目;
- 具体的技术字体设计与实现由 Dalton Maag 完成;
- 无论是最终交付的 TrueType/OpenType 字体文件,还是用于生成字体家族的设计文件,都以开源许可发布,官方明确鼓励用户尝试、修改、分享与改进。
Nerd Fonts 主仓库的字体清单 readme.md 中也将 Ubuntu Mono 列为已补丁字体家族之一,上游版本号同样为 0.80。本目录内的补丁字体即基于该版本制作。
仓库中的补丁字体文件构成
在 patched-fonts/UbuntuMono/ 目录下,除了每个字重子目录(Bold/、Bold-Italic/、Regular/、Regular-Italic/)中的许可证与说明文件外,顶层直接提供 12 个已补丁的 .ttf 字体文件,按"变体 × 字重"组织:
| 变体 | Bold | Bold Italic | Italic | Regular |
|---|---|---|---|---|
UbuntuMonoNerdFont-* |
UbuntuMonoNerdFont-Bold.ttf |
UbuntuMonoNerdFont-BoldItalic.ttf |
UbuntuMonoNerdFont-Italic.ttf |
UbuntuMonoNerdFont-Regular.ttf |
UbuntuMonoNerdFontMono-* |
UbuntuMonoNerdFontMono-Bold.ttf |
UbuntuMonoNerdFontMono-BoldItalic.ttf |
UbuntuMonoNerdFontMono-Italic.ttf |
UbuntuMonoNerdFontMono-Regular.ttf |
UbuntuMonoNerdFontPropo-* |
UbuntuMonoNerdFontPropo-Bold.ttf |
UbuntuMonoNerdFontPropo-BoldItalic.ttf |
UbuntuMonoNerdFontPropo-Italic.ttf |
UbuntuMonoNerdFontPropo-Regular.ttf |
命名规律是 Nerd Fonts 项目的通用约定:NerdFont(NF)、NerdFontMono(NFM)、NerdFontPropo(NFP) 三种变体各覆盖四个字重,方便终端、IDE 与 GUI 场景直接选用。主仓库 readme.md 的 Variations 一节说明,这些变体对应的是"双宽(variable/proportional)、单宽(fixed/monospaced)、比例(proportional)"三类图标字形。
内置图标集一览
补丁字体的核心价值在于内置的图标字形。Ubuntu Mono 的补丁版本集成了下列图标集(名称、上游版本号与许可证均摘自 patched-fonts/UbuntuMono/README.md 的 Icon sets 表格):
| 图标集名称 | 上游来源 | 版本 | 许可证 |
|---|---|---|---|
| Codicons | microsoft/vscode-codicons | 0.0.45 | CC BY 4.0 |
| Devicons | devicons/devicon | 2.17.0 | MIT |
| extraglyphs | source-foundry/Hack | - | MIT |
| Font Awesome | FortAwesome/Font-Awesome | 6.5.1 | CC BY 4.0 |
| Font Awesome Extension | AndreLZGava/font-awesome-extension | 0.0.3 | MIT |
| Font Logos | lukas-w/font-logos | 1.3.0 | unlicensed |
| MaterialDesign | Templarian/MaterialDesign-Font | Oct 6, 2022 | Apache 2.0 |
| Octicons | primer/octicons | 18.3.0 | MIT |
| Seti and original | jesseweed/seti-ui | 0.8.1 | MIT |
| Pomicons | gabrielelana/pomicons | 1.001 | OFL 1.1 RFN |
| Powerline Extra | ryanoasis/powerline-extra-symbols | 1.200 | MIT |
| Powerline Symbols | powerline/powerline | 1.000 (ca 2013) | MIT |
| Power Symbols IEC | jloughry/Unicode | Feb 2015 | MIT |
| Weather Icons | erikflowers/weather-icons | 2.0.10 (1.100) | OFL 1.1 |
这些图标集也正是项目主仓库 readme.md 所描述的项目定位——"以 Font Awesome、Devicons、Octicons 等流行图标字体补充开发者字体字形"的具体落地。值得注意的一点是:不同图标集采用不同开源许可证(MIT、CC BY 4.0、Apache 2.0、OFL 1.1 等),若你计划将补丁字体或其中的图标用于再分发,需要留意各上游图标集的许可要求。
如何选择字体变体:NF / NFM / NFP
原文档的 "Which font?" 章节给出了简明决策规则(TL;DR):
- 受限等宽(monospaced)场景(如终端、代码编辑器):选择名称带
Nerd Font Mono(缩写NFM)的变体; - 希望图标更大(通常是正常字母宽度的约 1.5 倍):选择不带
Mono的Nerd Font(缩写NF),大多数终端支持这种用法,但"因环境而异"(原文即注明 ymmv); - 比例(proportional)上下文(如 GUI 元素、幻灯片演示等):选择
Nerd Font Propo(缩写NFP)。
关于连字(Ligatures)
补丁字体通常保留原字体的连字。历史上 Nerd Fonts v2.0.0 在 Nerd Font Mono 字体中不包含连字,这一限制自 v2.1.0 起已取消。因此如果你使用支持连字的终端且不想看到连字效果,通常可以在终端设置中直接关闭连字功能,无需更换字体。
底层实现佐证
三种变体的差异来自 font-patcher 脚本的参数控制。从源码的参数定义(font-patcher 第 2228–2233 行附近)可以看到:
--mono(-s):创建等宽字体,已有与新增字形均为单宽,且隐含--single-width-glyphs;--single-width-glyphs:将字形生成为单宽而非默认的双宽(对应Nerd Font Mono);--variable-width-glyphs:不调整字形前进宽度、不产生"伸出(overhang)"效果(对应Nerd Font Propo)。
即三种变体本质上是同一套补丁流程在"字形宽度处理"上的三种策略,这也解释了为何同一字体家族会同时发布三套文件。
Option 1:直接下载已补丁字体
原文档给出的第一种获取方式,是直接使用别人已补丁好的字体,适合大多数只想"拿来用"的用户:
- 稳定版本:从项目的 Release 页面下载字体包(Ubuntu Mono 对应
UbuntuMono.zip或体积更小的UbuntuMono.tar.xz归档); - 开发版本:直接从当前仓库的 patched-fonts/UbuntuMono/ 目录下载对应字重的
.ttf文件。
主仓库 readme.md 还提供了在脚本中自动化下载最新 Release 归档的方式(将示例中的字体名替换为 UbuntuMono 即可)。拿到 .ttf/.otf 文件后,仍需按操作系统安装到字体目录:Linux/macOS 通常放入 ~/.local/share/fonts 或 /usr/share/fonts,Windows 则右键选择"为所有用户安装"。仓库根目录还提供了辅助脚本 install.sh(Linux/macOS)与 install.ps1(Windows PowerShell)用于批量安装补丁字体。
Option 2:使用 font-patcher 自行补丁
如果默认的补丁结果不满足需求(例如希望不包含全部图标以缩小字体体积,或需要调整图标集组合),可以选择第二条路径:使用项目提供的 font-patcher 脚本对任意字体自行补丁。这也是原文档明确推荐的做法——"Patch your own variations with the various options provided by the font patcher"。
环境依赖
根据主仓库 readme.md 的说明,运行 font-patcher 需要:
- FontForge(可作系统包安装,macOS 可用
brew install fontforge,也可使用官方 AppImage); - Python 3;
- python-fontforge 与 argparse 包。
注意:仅下载 font-patcher 单个脚本是不够的,它依赖 src/glyphs/ 目录下的图标源文件,因此应下载完整的 FontPatcher.zip 归档解压使用。
基本用法
推荐方式(通过 FontForge 调用脚本):
fontforge -script font-patcher PATH_TO_FONT
若环境允许,也可以直接执行:
./font-patcher PATH_TO_FONT
使用 FontForge AppImage 时,所有路径必须是绝对路径且必须显式指定输出目录(例如用 $PWD 表示当前目录):
./FontForge.AppImage -script $PWD/font-patcher $PWD/BaseFont.ttf -out /tmp
与本文主题相关的关键参数
结合 font-patcher 中 argparse 的定义(第 2221–2287 行附近),与"变体选择"和"图标集"直接相关的参数包括:
--mono/-s:生成等宽(单宽字形)变体,对应Nerd Font Mono;--variable-width-glyphs:生成比例变体,对应Nerd Font Propo;--single-width-glyphs:将字形生成为单宽(不隐含其他行为);--complete/-c:加入全部可用图标(完整补丁);- 各图标集开关:
--fontawesome、--fontawesomeext、--material(--mdi)、--octicons、--codicons、--pomicons、--powerline、--powerlineextra、--powersymbols、--weather、--fontlogos、--braille等,可按需只加入部分图标集——这正是原文档所说的"不包含所有符号以缩小字体"的定制方式; --outputdir/-out:指定输出目录(默认当前目录);--configfile:从配置文件读取参数,可参考 src/config.sample.cfg。
使用 Docker 补丁
主仓库还提供 Docker 镜像 nerdfonts/patcher 作为免安装依赖的替代方案,例如将字体目录挂载进容器并指定输出目录:
docker run --rm -v /path/to/fonts:/in:Z -v /path/for/output:/out:Z nerdfonts/patcher [OPTIONS]
可通过环境变量 PN 控制并行任务数(如 PN=1 单进程、PN=10 十个并行任务),并可用 docker pull nerdfonts/patcher 更新镜像。
许可证与 Reserved Font Name 注意事项
Ubuntu Mono 补丁字体目录随附 patched-fonts/UbuntuMono/LICENCE.txt,即 Ubuntu Font Licence Version 1.0。该许可允许字体被自由使用、研究、修改与再分发,允许捆绑、嵌入和再分发衍生作品,但衍生字体不能改用其他许可证发布。同时,该要求不限制使用这些字体(或其衍生品)制作的文档的发布许可,只要文档的主要目的不是作为字体分发的载体即可。
另外,Nerd Fonts 的通用说明 src/readme-rfn-addendum.md 提到:部分上游字体带有 Reserved Font Name(RFN) 机制——未经版权持有者书面许可,修改版不得使用保留字体名。其目的包括避免命名冲突、保护原作者、减少支持负担与鼓励衍生作品。从主仓库 readme.md 的字体清单看,Ubuntu Mono 标注为 RFN = NO(未使用保留字体名),因此其补丁版本可直接以 UbuntuMonoNerdFont* 命名分发,无需额外授权。
小结
围绕 Ubuntu Mono,本指南覆盖了三条主线:它是什么(Canonical 资助、Dalton Maag 设计的开源字体家族,补丁版本为上游 0.80);它内置了什么(14 套图标集及其许可证);怎么用(按 NF/NFM/NFP 决策规则选择变体,或通过 font-patcher 自定义补丁)。无论你是终端用户、插件开发者还是需要定制字体的打包者,都可以依据本文在 patched-fonts/UbuntuMono/ 与 font-patcher 之间找到适合自己的工作流。