Nerd Fonts 中 JetBrains Mono NoLigatures ExtraBold 变体完整使用指南:字体选择、连字处理与安装实战
Nerd Fonts 中 JetBrains Mono NoLigatures ExtraBold 变体完整使用指南:字体选择、连字处理与安装实战
本篇技术指南聚焦 Nerd Fonts 仓库内 JetBrainsMono 系列中 NoLigatures/ExtraBold 变体,讲解在终端、编辑器与 GUI 场景下如何正确选择 Nerd Font / Nerd Font Mono / Nerd Font Propo 三种字体家族,剖析 NoLigatures 版本与连字(Ligature)处理的内在机制,并给出从官方发布包下载、使用 font-patcher 自修补、以及通过 install.sh 安装的完整可操作方案。阅读完成后,你将能够依据实际使用场景精准选用 JetBrains Mono 的 Nerd Fonts 变体,并理解 NoLigatures 字体在仓库中的生成原理。
字体与变体概览
JetBrains Mono 是 JetBrains 推出的专为开发者设计的等宽字体,在 Nerd Fonts 项目中它被完整整合进 patched-fonts 目录,当前补丁版本为 2.304。在 patched-fonts/JetBrainsMono/ 下,字体按两个维度组织:
- Ligatures / NoLigatures 两套并排目录:带连字版本在 Ligatures/ 下,不带连字版本在 NoLigatures/ 下;
- 每套目录内按字重细分:Bold、BoldItalic、ExtraBold、ExtraBoldItalic、ExtraLight、ExtraLightItalic、Italic、Light、LightItalic、Medium、MediumItalic、Regular、SemiBold、SemiBoldItalic、Thin、ThinItalic 共 16 个字重样式。
以本文主题的 NoLigatures/ExtraBold 为例,其目录 ExtraBold/ 中存放了三种命名后缀的 TTF 文件(文件名中的 NL 即 No Ligatures 的缩写):
JetBrainsMonoNLNerdFont-ExtraBold.ttf—— 标准 Nerd Font 变体;JetBrainsMonoNLNerdFontMono-ExtraBold.ttf—— Nerd Font Mono 变体(单宽图标);JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf—— Nerd Font Propo 变体(比例图标)。
三个文件与 OFL.txt(SIL Open Font License 许可证)及本 README 一起构成该字重完整可用的发布单元。ExtraBold 是字重较重的样式,适合代码高亮、标题、终端中需要强调输出的场景。
三大家族怎么选:NF、NFM、NFP
原文档用 "TL;DR" 给出了最直接的选字决策依据,这里结合上述实际文件逐一展开:
| 需求场景 | 选择 | 文件名后缀示例 | 图标宽度特征 |
|---|---|---|---|
| 受限等宽环境(传统终端等) | Nerd Font Mono(NFM) |
...NerdFontMono-ExtraBold.ttf |
单字宽图标,与字母等宽对齐 |
| 希望图标更大更醒目(多数现代终端都支持) | Nerd Font(NF) |
...NerdFont-ExtraBold.ttf |
图标约 1.5 个普通字母宽 |
| 比例排版环境(GUI 组件、演示文稿等) | Nerd Font Propo(NFP) |
...NerdFontPropo-ExtraBold.ttf |
图标采用比例宽度,融入文本流 |
选字遵循两步:先定字体家族与字重(如 JetBrains Mono ExtraBold),再定图标变体(NF / NFM / NFP)。需要注意,NF 与 NFP 的图标较宽,个别终端渲染等宽字体时可能出现对齐异常,因此"Most terminals support this, but ymmv"(多数终端支持,但需自行验证)。在不知道选哪个时,建议先试 NF 变体,若出现光标偏移或对齐问题再切换到 NFM。
连字处理专题:NoLigatures 版本的来龙去脉
仓库中的连字策略
Nerd Fonts 对连字的基本策略是:修补后的字体默认保留连字。作为例外,NoLigatures 目录下的字体(文件名带 NL)专门移除了连字表。JetBrains Mono 本身以丰富的编程连字(=>、->、!= 等)著称,因此在需要严格逐字符等宽、或终端对连字支持不佳的场景,可直接使用 NoLigatures 版本。
历史上 Nerd Fonts v2.0.0 曾在 Nerd Font Mono 字体中移除连字,该行为自 v2.1.0 起被取消——也就是说,现在即使是 Mono 变体也会保留连字。如果使用的是支持连字的终端却不想要连字,通常可以在终端设置里关闭连字选项,无需更换字体文件。
如何用 font-patcher 生成自己的无连字字体
除了直接下载 NoLigatures 成品,也可以对任意原字体自行移除连字。仓库提供了配置文件样例 src/config.sample.cfg,其 [Config] 段明确给出了无连字修补的推荐参数:
# These config files are read by the font-patcher
# They are INI style files, but some keys have JSON values
[Config]
commandline: --removeligatures --makegroups 2
abort-mono-patch: True
[Subtables]
# List of either
# - a simple string (of the subtable to be removed)
# - a 2 element list consisting of regex on font fullname and subtable name
# the regex can be prepended with '!' to invert it
ligatures: [
"'dlig' Discretionary Ligatures lookup 12 contextual 0",
"'dlig' Discretionary Ligatures lookup 11 subtable",
"'dlig' Discretionary Ligatures lookup 9 subtable",
["!Italic", "'liga' Standard Ligatures in Latin lookup 6 subtable"] ]
使用方式为:先通过 --configfile 指定该配置文件,同时传入 --removeligs(其别名 --removeligatures)开关。在 font-patcher 的参数定义中可以看到:
'--removeligs', '--removeligatures', dest='removeligatures', default=False,
action='store_true', help='Removes ligatures specified in configuration file (needs --configfile)'
即该开关需要配合 --configfile 使用。
底层实现原理
从源码看,remove_ligatures 方法 是连字移除的核心:
- 读取配置
Subtables段的ligatures列表(JSON 格式); - 列表项分两类:简单字符串(直接作为要删除的 GSUB 子表名)和 两元素复合项(
[正则, 子表名],正则匹配字体 fullname,决定是否对该字体执行删除); - 复合项的正则若以
!开头表示取反——例如样例中的["!Italic", "'liga' ..."]表示除 Italic 样式外的所有字体都删除标准连字子表; - 对选中的子表调用 FontForge 的
removeLookupSubtable执行删除。
这解释了 NoLigatures 版本的技术来源:JetBrainsMonoNLNerdFont-* 等文件正是通过该机制在修补时移除了 dlig(可选连字)与 liga(标准连字)子表。该方法的设计初衷(见源码注释)是处理等宽字体中被压缩成单格的 fi 连字及 ldot 等,保证严格等宽环境下字符间距一致。
获取已修补字体:两种路径
路径一:直接下载成品
- 稳定版:从项目的 release 页面下载字体包(JetBrainsMono 有独立的
.zip与体积更小的.tar.xz打包,包含全部 Ligatures / NoLigatures 与 NF / NFM / NFP 变体); - 开发版:直接从本仓库 patched-fonts/JetBrainsMono/ 目录取用单个 TTF 文件。
路径二:自行修补
对已有原字体运行 font-patcher,可获得发布包之外的自定义组合,例如:
- 只打入部分图标集,以减小字体体积(对应
--fontawesome、--octicons、--material等按需开关,各图标集定义见 font-patcher); - 调整垂直度量以适配特殊终端(
--metrics); - 按上文方式移除连字(
--removeligatures+--configfile)。
安装到系统并验证
仓库根目录提供跨平台安装脚本 install.sh,可直接安装 JetBrains Mono NoLigatures 的指定变体:
# 仅安装 NoLigatures 目录下的 JetBrains Mono
./install.sh JetBrainsMono/NoLigatures
# 只看会安装哪些文件(dry run)
./install.sh --list JetBrainsMono/NoLigatures
# 安装单宽图标变体(NerdFontMono 系列)
./install.sh --mono JetBrainsMono/NoLigatures
# 安装比例图标变体(NerdFontPropo 系列)
./install.sh --use-proportional-glyphs JetBrainsMono/NoLigatures
脚本行为要点(结合 install.sh 源码):
- 默认以 copy 模式安装到用户字体目录:Linux 下为
$HOME/.local/share/fonts/NerdFonts(尊重XDG_DATA_HOME),macOS 下为$HOME/Library/Fonts;--install-to-system-path则安装到系统目录(Linux 为/usr/local/share/fonts/NerdFonts,需 root 权限); --mono(-s)与--use-proportional-glyphs(-p)对应源码中variant参数的 M / P 两种过滤模式,分别只收集*NerdFontMono*与*NerdFontPropo*文件;默认变体则排除 Mono/Propo 只装标准 Nerd Font;--link以符号链接方式安装(不复制文件),--clean会先清空旧的 NerdFonts 目标目录,--remove可卸载已安装的字体;- 安装完成后脚本会自动执行
fc-cache -vf刷新 Linux 字体缓存。
安装后可在支持字体设置的终端中直接选用 JetBrainsMonoNLNerdFont ExtraBold(或其 Mono/Propo 变体)作为默认字体,并通过输入 nf 相关图标的提示符验证图标是否正常渲染。若遇到图标宽度错位,可退回 NFM 变体,或按上文所述在终端中关闭连字。
许可证说明
JetBrains Mono 以 SIL Open Font License 授权,NoLigatures/ExtraBold 目录内的 OFL.txt 即为随包许可证文件;修改版字体未使用上游保留字体名(RFN 机制),符合 src/readme-rfn-addendum.md 中关于避免命名冲突的约定。分发或商用该字体时请保留许可证文本。