如何从源码构建 Iosevka 的 quasi-proportional 准比例变体(Aile/Etoile 风格)
【免费下载链接】IosevkaVersatile typeface for code, from code.项目地址: https://gitcode.com/GitHub_Trending/io/Iosevka
如果你不满足于直接安装发布包,想从源码自行构建 Iosevka 的准比例(quasi-proportional)字体——也就是 sans-serif 的 Aile 风格或 slab-serif 的 Etoile 风格——那么整个流程依赖仓库自带的构建系统:nodejs(≥ 18.0.0)、ttfautohint,以及npm脚本。完成构建后,字体文件会出现在仓库的dist/目录中。以下内容依据 doc/custom-build.md 和仓库中的 build-plans.toml 整理。
准备条件:获取源码并安装依赖
构建前需要满足 doc/custom-build.md 中"Getting the files"和"Building"两节的要求:
获取源码文件。文档给出两种方式:下载源码归档后解压,或用 Git 克隆:
git clone --depth 1 https://github.com/be5invis/Iosevka.git安装
nodejs(≥ 18.0.0)和ttfautohint,并确认两者都可以通过PATH环境变量访问到。在终端中
cd进入包含 Iosevka 源码的目录,运行:npm install该命令会安装全部 NPM 依赖。
文档还提供了一个可选分支:使用 Docker 构建,说明在 docker/README.md。下文按本地构建展开。
直接构建官方的 Aile 与 Etoile 构建计划
关键事实是:build-plans.toml中已经内置了两个官方准比例构建计划,无需额外创建计划文件。
- build-plans.toml 中
[buildPlans.IosevkaAile]:family = "Iosevka Aile",spacing = "quasi-proportional",并在variants.design小节中定义了一组字形变体(例如i = "serifless"、f = "flat-hook-serifless"、w = "straight-flat-top-serifless"等),同时只定义了widths.Normal(shape = 600)。 [buildPlans.IosevkaEtoile]:family = "Iosevka Etoile",spacing = "quasi-proportional",并加serifs = 'slab',同样只有 Normal 一种宽度。
因此最短路径是直接按计划名构建:
npm run build -- contents::IosevkaAile或
npm run build -- contents::IosevkaEtoilecontents::<plan>是文档列出的构建选项之一,含义为构建"Everything (TTF + webfont, hinted + unhinted)"。如果你的目标产物不同,可以换成其他选项(均摘自 doc/custom-build.md 的 Customized Build 一节):
| 命令参数 | 产物 |
|---|---|
ttf::<plan> | 仅 TTF |
ttf-unhinted::<plan> | 仅无 hint 的 TTF |
webfont::<plan> | 仅 Web 字体(CSS + WOFF2) |
webfont-unhinted::<plan> | 仅无 hint 的 Web 字体(CSS + WOFF2) |
woff2::<plan> | 仅 WOFF2 |
woff2-unhinted::<plan> | 仅无 hint 的 WOFF2 |
验证构建结果
文档给出的成功条件是:构建完成后,在dist/目录中会找到 TTF 文件、WOFF(2) 网页字体文件以及一份 Webfont CSS。也就是说,判断构建是否完成的检查方式是查看dist/目录是否生成了对应字体文件;如果你使用了ttf::<plan>之类的选项,dist/中也只会出现该选项声明的产物。
可选:创建自己的 quasi-proportional 变体
如果你需要的不是官方 Aile/Etoile 计划本身,而是"同一风格"的自定义变体(自定义家族名、只保留部分字重或宽度等),按 doc/custom-build.md 的 Customized Build 流程操作:
若仓库根目录(与
build-plans.toml同层)不存在private-build-plans.toml,先创建它。仓库提供了一个注释详尽的模板 private-build-plans.sample.toml,可参照其格式。在
[buildPlans.<计划名>]小节中写入计划属性。文档建议计划名使用 PascalCase。与准比例变体直接相关的属性:family:String,必填,定义你的自定义变体的家族名(字体菜单中显示的名称)。spacing:可选 String,取quasi-proportional或quasi-proportional-extension-only。前者让字体变为准比例;后者只把宽字母(如M)加宽,不会压缩窄字母(如i)。其余有效值还有normal、term、fontconfig-mono、fixed、wide-mosaic。serifs:可选 String,设为slab时字体转为 slab-serif,否则为 sans-serif。对应到"Aile 风格"即不设置或设为 sans,"Etoile 风格"即serifs = "slab"。variants小节:可用inherits = "buildPlans.<Plan name>"继承其他构建计划的变体配置——例如inherits = "buildPlans.IosevkaAile"即可复用官方 Aile 的字形变体组合;也可在design/upright/italic字典中逐字符指定变体。weights/widths小节:缺省时构建全部字重/宽度并映射到默认值;自定义时"must define all the weights/widths you plan to use otherwise they will not be built"(见 private-build-plans.sample.toml 注释)。
运行构建命令,
<计划名>换成你在private-build-plans.toml中定义的段名:npm run build -- contents::MyAileVariant以上示例中的
MyAileVariant是占位的计划名,请替换为你在[buildPlans.MyAileVariant]中实际使用的段名。
一个最小的准比例变体计划示例(结构参照官方 Aile 计划与模板文件,属性值按你的目标调整):
[buildPlans.MyAileVariant] family = "My Aile" spacing = "quasi-proportional" [buildPlans.MyAileVariant.variants] inherits = "buildPlans.IosevkaAile"资源限制:控制并发任务数
doc/custom-build.md 明确警告:默认情况下,构建系统会按 CPU 可用线程数调度并发任务,会同时把 CPU 和内存使用率推到上限——每个任务在峰值时会消耗超过 1 GB 的内存。如果机器资源有限,在构建命令后追加:
npm run build -- contents::IosevkaAile --jCmd=2其中2是替换为你希望的并发任务数的示例值。
结果与限制
- 构建产物在
dist/,包含 TTF 与 WOFF(2) 网页字体及一份 Webfont CSS(以所用构建选项声明的产物为准)。 - 官方 Aile/Etoile 计划在
build-plans.toml中只定义了 Normal 一种宽度(shape = 600,menu = 5,css = "normal"),因此构建出的准比例字体只有这一种宽度。 quasi-proportional与quasi-proportional-extension-only的行为不同:后者不压缩窄字母,只扩展宽字母;按需求选择,不要混用。- 仓库未提供字体安装后的自动化校验命令;"构建成功"的判定以
dist/中是否产出文档声明的字体文件为准。
【免费下载链接】IosevkaVersatile typeface for code, from code.项目地址: https://gitcode.com/GitHub_Trending/io/Iosevka
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考