- 开发工具
- CLI
【免费下载链接】nerd-fonts
Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more
本文以 Nerd Fonts 仓库内 patched-fonts/iA-Writer/Duo/README.md 为主线,系统讲解 iA Writer Duo 字体的来源、命名规则、内置图标集、三种补丁变体的选型逻辑,并结合仓库内 font-patcher 源码说明其底层实现。读完本文,你将能够判断「下载现成补丁字体」与「自行运行 font-patcher 打补丁」两条路径的适用场景,并理解为何 Duo 与 Quattro 只有 Nerd Font 与 Nerd Font Propo 两种变体、而没有 Nerd Font Mono 变体。
iA Writer Duo 是什么:来自 iA 的准等宽书写字体
iA Writer 系列字体来自信息架构公司 iA(Information Architects),是其写作应用 iA Writer 配套开发、面向写作场景优化的字族。根据 Duo 目录 README 的自述:
These are fonts from iA. Duo and Quattro are almost monospaced but allow more room for some letters.
也就是说,iA Writer 三个子家族中:
- Duo 与 Quattro:近似等宽(almost monospaced),即大多数字符保持等宽节奏,但为部分字母留出更宽松的空间,兼顾等宽对齐感与书写可读性;
- Mono:真正的等宽字体,适合严格对齐的终端与代码场景。
同时 README 明确说明它是 IBM Plex 字体的派生修改版("It is a modification of IBM's Plex font."),版本号为Version 2.000(Dec 2018)。仓库中的原始(未打补丁)字体位于 src/unpatched-fonts/iA-Writer/,其子目录结构 Duo / Mono / Quattro 与打补丁后的目录一一对应。
为什么叫 iMWriting 而不是 iA Writer:OFL 保留字体名机制
这是该 README 花篇幅解释的核心问题之一:打补丁后的字体文件被命名为iMWritingDuoNerdFont-Regular.ttf(而不是iAWriterNerdFont-*),原因是必须遵守SIL Open Font License(OFL)中的Reserved Font Name(保留字体名)机制。
在 patched-fonts/iA-Writer/Duo/Regular/LICENSE.md 中可以找到两份版权与保留名声明:
- iA Writer Typeface:Copyright © 2018 Information Architects Inc.,保留字体名"iA Writer";
- Based on IBM Plex Typeface:Copyright © 2017 IBM Corp.,保留字体名"Plex"。
OFL 1.1 对保留字体名的约束是(README 与 src/readme-rfn-addendum.md 中均引用了原文):
No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
即:未经原版权方书面许可,修改版(Modified Version)不得使用保留字体名作为呈现给用户的主字体名。Nerd Fonts 团队没有向 iA 申请例外,而是选择将家族名从 "iA Writer" 改写成 "iMWriting"("iA" 缩写为 "iM" 后拼接 "Writing"),从而在保留字族可识别性的同时合规。README 还总结了该机制的四大设计目标:避免冲突(Avoid collisions)、保护作者(Protect authors)、最小化支持成本(Minimize support)与鼓励衍生作品(Encourage derivatives)。Nerd Fonts 把这些通用说明抽取成了可复用的模板文件 src/readme-rfn-addendum.md,凡涉及保留字体名的字族(不止 iA Writer,还包括 IBM Plex、Hack 等)都会在其 per-directory README 中注入同一段说明。
Duo 字体中集成了哪些图标:图标集清单与 glyphs 源码目录
iA Writer Duo 的补丁字体并非只加几个符号,而是将 Nerd Fonts 的整套图标体系合并进字面。README 以表格形式完整列出了当前构建所集成的图标集及其版本与许可,全文继承如下:
| 图标集 | 上游项目 | 版本 | 许可 |
|---|---|---|---|
| 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 |
这 14 个图标集并非临时捏合,而是与仓库源码一一对应:这些图标集的原始符号字体全部存放在 src/glyphs/ 目录下,可以看到codicons/、devicons/、font-awesome/、font-awesome-extension.ttf、font-logos.ttf、materialdesign/、octicons/、pomicons/、powerline-extra/、powerline-symbols/、weather-icons/、extraglyphs.sfd以及Unicode_IEC_symbol_font.otf(对应 Power Symbols IEC)等文件。也就是说,表格即构建时打进去的符号源清单,而 src/glyphs/ 就是这些符号源的实际载体。
三种变体怎么选:NFM / NF / NFP 的 TL;DR 与底层原理
README 用「TL;DR」一节给出了最实用的选型建议,完整保留如下:
- 如果你的环境被限制为等宽字体(例如终端),请选择名称中含
Nerd Font Mono(缩写NFM)的字体; - 如果你希望图标更大(通常是普通字母宽度的 1.5 倍左右),请选择不含
Mono的Nerd Font(缩写NF)。大多数终端支持这种方案,但效果因人而异(ymmv); - 如果你工作在比例(proportional)上下文(GUI 元素、演示文稿编辑等),请选择
Nerd Font Propo(缩写NFP)。
这套「一变三」的命名规则并不是 README 的约定俗成,而是 font-patcher 命令行参数的直接产物。从 font-patcher 的参数定义可以看到:
--single-width-glyphs:将新增图标生成为单倍宽而不是默认的双倍宽(对应 Nerd Font Mono);--mono/-s:创建等宽字体,已有与新增字形均为单倍宽,且隐含--single-width-glyphs;--variable-width-glyphs:不调整字符推进宽度(即不做「overhang」溢出处理),对应 Nerd Font Propo;- 不加任何上述参数时,默认输出双倍宽图标、带 overhang 的 Nerd Font(NF)变体。
因此:NFM 是图标被压成单倍宽以便塞进严格等宽终端;NF 是图标保持双倍宽、视觉更大;NFP 是不做宽度调整、贴合比例排版。三者共享同一套字形与图标,差异集中在推进宽度策略上。仓库根目录还提供 10-nerd-font-symbols.conf,可在 Linux 下将 Nerd Font Symbols 字体注册为图标回退字体,配合 NF 变体使用。
连字(Ligatures)处理
README 明确说明补丁字体会保留原始字体的连字("Ligatures are generally preserved in the patched fonts.")。需要留意的历史变化是:
- Nerd Fontsv2.0.0时期的
Nerd Font Mono字体不带连字; - 这一限制自v2.1.0起被移除,即后续版本的 NFM 字体同样保留连字。
如果你使用支持连字的终端却不希望看到连字效果,通常可以在终端设置里手动关闭连字选项,无需更换字体。此外,font-patcher 还提供了--removeligs/--removeligatures专家选项,可配合配置文件(见 src/config.sample.cfg 中[Subtables]的ligatures列表)按正则规则删除指定连字子表——这是需要精细化定制时才用得上的进阶手段。
获取方式:下载现成补丁字体,还是自己打补丁
README 给出的「Which font?」解答中,选型完成后的获取路径有两条,二选一即可:
Option 1:直接下载已打补丁的字体
- 稳定版:从 Nerd Fonts 的发布页下载
iA-Writer.zip或iA-Writer.tar.xz压缩包(后者体积更小); - 开发版:直接使用本仓库 patched-fonts/iA-Writer/ 目录中按 Duo / Mono / Quattro 分好族、按 Bold / BoldItalic / Italic / Regular 分好字重的现成 ttf 文件。
Option 2:用 font-patcher 自己打补丁
如果你需要 README 中提到的「自定义变体」(例如不包含全部符号以控制小字号下的体积),可以自行运行仓库根目录的 font-patcher 脚本。它是一个依赖 FontForge 的 Python 脚本(在 Debian/Ubuntu 上需先安装fontforge与python3-fontforge),基本用法如下:
# 打满全部 14 个图标集(等价于发布版默认行为) ./font-patcher --complete src/unpatched-fonts/iA-Writer/Duo/Regular/iAWriterDuoS-Regular.ttf # 只挑选部分图标集,缩小符号规模 ./font-patcher --fontawesome --octicons --powerline iAWriterDuoS-Regular.ttf # 指定输出目录与输出变体 ./font-patcher --outputdir ./out --mono iAWriterDuoS-Regular.ttf # 生成 NFM 变体 ./font-patcher --outputdir ./out --variable-width-glyphs iAWriterDuoS-Regular.ttf # 生成 NFP 变体其中符号选择参数(--complete与--codicons、--fontawesome、--fontawesomeext、--fontlogos、--material、--octicons、--pomicons、--powerline、--powerlineextra、--powersymbols、--weather、--braille等)与上文图标集表格一一对应;--glyphdir可指定符号源目录(默认即 src/glyphs/)。更多参数说明可直接运行./font-patcher --help查看(注意需先装好 FontForge 的 Python 绑定)。
为什么 Duo 没有 Nerd Font Mono 变体:abort-mono-patch 机制
细心的读者会发现一个有趣现象:在 patched-fonts/iA-Writer/Duo/ 的每个字重目录中,只有两个文件,例如 Regular 目录下是:
iMWritingDuoNerdFont-Regular.ttf(NF 变体)iMWritingDuoNerdFontPropo-Regular.ttf(NFP 变体)
没有iMWritingDuoNerdFontMono-Regular.ttf。对比 patched-fonts/iA-Writer/Mono/ 的同一字重却有三个文件(NF / NFM / NFP 齐全),差异的根源在打补丁前的配置文件里。
查 src/unpatched-fonts/iA-Writer/ 可以看到,只有Duo/与Quattro/两个子目录带有config.cfg,且内容完全一致:
[Config] abort-mono-patch: True这正是「准等宽」字体的特殊性:Duo(与 Quattro)并不是严格等宽字体,硬把全部字形压成单倍宽反而会破坏其字面设计。因此 Nerd Fonts 通过配置明确禁止对它们执行--mono补丁。对应实现位于 font-patcher:脚本在解析到--mono时,会先读取配置文件中abort-mono-patch的值,若为True则直接打印 "No trying --mono as requested by configfile; exiting" 并退出,从而不产出 NFM 文件。这就是为何 Duo / Quattro 只提供 NF 与 NFP 两种变体、而真正等宽的 Mono 字族可以提供 NFM 的原因——也印证了 README 中「Duo and Quattro are almost monospaced」的定位。该配置项在通用示例 src/config.sample.cfg 中同样存在,且配置文件还支持commandline:键注入默认命令行参数,说明这是一套可复用的补丁行为控制机制。
安装与使用建议
拿到 ttf 文件后,安装方式与普通字体无异:双击安装、放入系统字体目录,或在 Linux/macOS 终端里执行仓库根目录提供的 install.sh、在 Windows 下执行 install.ps1。若选择 NFP/NF 变体用于 GUI 或编辑器,请确保应用开启字体 fallback;若用于终端,可结合 10-nerd-font-symbols.conf 让符号字体自动回退。字体家族名在系统中显示为iMWriting Duo Nerd Font与iMWriting Duo Nerd Font Propo,而字重目录(Bold / BoldItalic / Italic / Regular)与字形文件名一一对应,可直接按需下载单字重文件。
小结
iA Writer Duo 补丁字体是「写作向准等宽字体 × 图标字体聚合」的典型代表:它以 IBM Plex 为底、以 iMWriting 之名遵守 OFL 保留字体名机制、集成 14 套图标集,并通过abort-mono-patch配置在准等宽字体上规避强制等宽化。无论你是终端用户、GUI 排版者,还是想用 font-patcher 定制符号子集的进阶玩家,都可以从 patched-fonts/iA-Writer/Duo/README.md 与上述源码证据中快速定位到正确变体与操作路径。
- 开发工具
- CLI
【免费下载链接】nerd-fonts
Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more
相关推荐
Hasklig(Hasklug)Nerd Font 实战指南:编程连字字体、SIL OFL 保留字体名机制与 NF/NFM/NFP 变体选型
Hasklig(Hasklug)Nerd Font 实战指南:编程连字字体、SIL OFL 保留字体名机制与 NF/NFM/NFP 变体选型 Hasklig 是
开发工具CLINerd Fonts 中的 iA Writer(iMWriting)补丁字体:半等宽书写字体的获取、选择与定制指南
Nerd Fonts 中的 iA Writer(iMWriting)补丁字体:半等宽书写字体的获取、选择与定制指南 导读 :iA Writer 是一套为书写场景
开发工具CLIiA Writer 字体的 Nerd Fonts 改造:iMWriting 的命名由来、图标集成与 NF/NFM/NFP 变体选择实战指南
iA Writer 字体的 Nerd Fonts 改造:iMWriting 的命名由来、图标集成与 NF/NFM/NFP 变体选择实战指南 本文聚焦 Nerd
开发工具CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考