news 2026/9/14 14:40:30

如何从源码构建 Iosevka 的 quasi-proportional 准比例变体(Aile/Etoile 风格)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何从源码构建 Iosevka 的 quasi-proportional 准比例变体(Aile/Etoile 风格)

如何从源码构建 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"两节的要求:

  1. 获取源码文件。文档给出两种方式:下载源码归档后解压,或用 Git 克隆:

    git clone --depth 1 https://github.com/be5invis/Iosevka.git
  2. 安装nodejs(≥ 18.0.0)和ttfautohint,并确认两者都可以通过PATH环境变量访问到。

  3. 在终端中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.Normalshape = 600)。
  • [buildPlans.IosevkaEtoile]family = "Iosevka Etoile"spacing = "quasi-proportional",并加serifs = 'slab',同样只有 Normal 一种宽度。

因此最短路径是直接按计划名构建:

npm run build -- contents::IosevkaAile

npm run build -- contents::IosevkaEtoile

contents::<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 流程操作:

  1. 若仓库根目录(与build-plans.toml同层)不存在private-build-plans.toml,先创建它。仓库提供了一个注释详尽的模板 private-build-plans.sample.toml,可参照其格式。

  2. [buildPlans.<计划名>]小节中写入计划属性。文档建议计划名使用 PascalCase。与准比例变体直接相关的属性:

    • family:String,必填,定义你的自定义变体的家族名(字体菜单中显示的名称)。
    • spacing:可选 String,取quasi-proportionalquasi-proportional-extension-only。前者让字体变为准比例;后者只把宽字母(如M)加宽,不会压缩窄字母(如i)。其余有效值还有normaltermfontconfig-monofixedwide-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 注释)。
  3. 运行构建命令,<计划名>换成你在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 = 600menu = 5css = "normal"),因此构建出的准比例字体只有这一种宽度。
  • quasi-proportionalquasi-proportional-extension-only的行为不同:后者不压缩窄字母,只扩展宽字母;按需求选择,不要混用。
  • 仓库未提供字体安装后的自动化校验命令;"构建成功"的判定以dist/中是否产出文档声明的字体文件为准。

【免费下载链接】IosevkaVersatile typeface for code, from code.项目地址: https://gitcode.com/GitHub_Trending/io/Iosevka

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 14:39:44

RabbitMQ实战指南:从安装部署到Spring Boot集成与故障排查

做后端这几年&#xff0c;消息队列是一个躲不开的话题。只要你负责的服务涉及订单、通知、日志、异步处理&#xff0c;早晚会有人告诉你“这里用个MQ吧”。而RabbitMQ应该是我见过在中小团队和微服务场景里出现频率最高的消息中间件之一&#xff1a;部署不重、文档成熟、Spring…

作者头像 李华
网站建设 2026/9/14 14:39:43

Flutter 跨平台开发 OpenHarmony 节奏游戏:时间同步与渲染优化实战

把 Flutter 跑在 OpenHarmony 上&#xff0c;还要做一个能卡准节拍的节奏方块游戏&#xff0c;这事听起来很酷&#xff0c;但真正动手的第一周大概率会怀疑人生。我在这个项目里最深刻的体会是&#xff1a;节奏游戏的核心不是花哨特效&#xff0c;不是华丽谱面&#xff0c;而是…

作者头像 李华
网站建设 2026/9/14 14:38:50

Windows Developer Config:面向开发者的声明式环境配置方案

1. 这不是“升级包”&#xff0c;而是一套专为写代码的人重新设计的 Windows 生态 你点开微软官网&#xff0c;看到“Windows Developer Config”这个名称时&#xff0c;别急着关掉——它不是又一个花里胡哨的预装软件合集&#xff0c;也不是给普通用户看的营销话术。我去年在微…

作者头像 李华
网站建设 2026/9/14 14:32:26

VC++ Windows监控系统开发:截图、通信与静态部署

简介&#xff1a;这是一份基于Visual C开发的远程监控与控制软件完整源码包&#xff0c;面向C初学者、Windows桌面应用开发者及网络编程学习者&#xff0c;用于深入理解远程桌面类工具的核心实现机制。资源包含RemoteAdmin.exe可执行程序及配套源代码&#xff0c;涵盖MFC界面模…

作者头像 李华
网站建设 2026/9/14 14:31:50

LangChain框架开发指南:从API调用到智能代理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华