- 前端
- CLI
- 开发工具
【免费下载链接】fontsource
Self-host Open Source fonts in neatly bundled NPM packages.
Averia Sans Libre 是一套颇具实验色彩的拉丁无衬线字体家族:它并非传统意义上的"手绘设计",而是由设计师 Dan Sayers 对其电脑中 725 款 Google Web Fonts 字体逐项取平均值生成的 Unicode 字体族。本文以 Fontsource 仓库中该字体的官方描述文档(registry/data/families/google/averia-sans-libre/description.en-US.md)为核心,完整还原 Avería 家族的创作方法论、6 种字重/样式构成、SIL Open Font License 许可细节,并结合仓库源码与注册表元数据,说明这份描述文档是如何生成、如何在 Fontsource 生态中驱动字体页面摘要,最终给出在项目中安装与使用该字体的完整实战步骤。
一、Avería 的命名与创作理念
Avería 一词来自西班牙语,意为"故障"或"机械损伤"(breakdown / mechanical damage),与英语单词 "average"(平均)的拉丁词根同源。这个名字本身就精准概括了这套字体的诞生方式:它不是一个设计师"画"出来的字体,而是一个程序"算"出来的字体。
根据 Fontsource 注册表中的官方描述,Avería 是一个 Unicode 字体超级家族(typeface superfamily),由创作者 Dan Sayers 电脑上所有字体的平均值构建而成。这一过程的核心特征有两点:
- 全部度量(metrics)都是平均运算的结果:包括字身框、上下伸(ascender/descender)、字距、笔画粗细等排版指标,均来自对海量源字体逐项求平均值,而非人工设定。
- 字形采用"多数决"收录:某个字形只有在大多数源字体中都存在时,才会被包含进 Avería 家族("The included glyphs are those that existed in a majority of the source fonts")。
这种"平均字体"(averaged typeface)的思路在字体设计史上属于罕见的程序化生成实验——它讨论的不是"哪种字体最美",而是"一套普通字体系统里,平均意义上的字形长什么样"。
二、Averia Sans Libre 的数据基础:725 款字体的平均
文档明确交代了 Averia Libre 家族的取样范围:
The Averia Libre families of fonts are based on the average of all 725 fonts in the Google Web Fonts project, released under the SIL Open Font License, as of 9 Nov 2011.
即:Averia Libre 家族基于 2011 年 11 月 9 日时Google Web Fonts 项目中的全部 725 款字体取平均生成,且这 725 款源字体均以SIL Open Font License(OFL)发布。正因源字体全部开放许可,平均产出的 Avería 家族也顺理成章地在 OFL 下发布,从而能够被 Fontsource 等开源字体分发体系合法收录、重新打包与再分发。
从设计谱系看,Averia Libre 是一个更大的家族群,Averia Sans Libre 只是其中一支。官方描述列出了完整的姊妹家族:
- Averia Libre(基础家族)
- Averia Sans Libre(无衬线变体,即本文主角)
- Averia Serif Libre(衬线变体)
- Averia Gruesa Libre("Gruesa"在西班牙语中意为"粗壮"的变体)
Averia Sans Libre 在 6 种样式(styles)中存在,具体对应关系可参见下文结合注册表数据的分析。
三、从上游 HTML 描述到注册表 Markdown:描述文档的生成链路
本文依据的description.en-US.md并非人工手写的文档,而是由 Fontsource 的注册表生成脚本从 Google Fonts 上游自动转换而来。在registry/scripts/google.ts中可以看到这一映射关系:
const DOCUMENTS = [ ['DESCRIPTION.en_us.html', 'description.en-US.md'], ['article/ARTICLE.en_us.html', 'article.en-US.md'], ] as const;生成逻辑(writeFamily,见 google.ts)会读取 google/fonts 仓库中被固定 commit 的DESCRIPTION.en_us.html,通过 TurndownService 将 HTML 转换为 Markdown 后写入data/families/google/<id>/description.en-US.md。转换过程有几个值得注意的细节:
turndown.remove([...])会剔除script、style、iframe、img、video、form、svg、canvas等元素,保证产物是纯净的文本性 Markdown;- 自定义规则
safe-links只保留http:/https:协议的链接,其余一律降级为纯文本; - 若上游文件缺失,脚本会删除本地已生成的描述文件,保证注册表与上游同步。
也就是说,你在注册表里读到的这段 Avería 描述,本质上是 google/fonts 上游DESCRIPTION.en_us.html的净化版快照,与上游修订号(provenance.revision,见 family.json)严格绑定,是可追溯、可复现的。
四、注册表元数据:家族技术规格的完整画像
与描述文档同目录的 family.json 提供了这套字体在 Fontsource 注册表中的完整技术档案,可作为描述文档的量化佐证:
| 元数据项 | 值 | 说明 |
|---|---|---|
family | Averia Sans Libre | 家族名 |
designer | Dan Sayers | 创作者 |
classifications | display, sans-serif | 展示类、无衬线 |
dateAdded | 2012-03-14 | 进入 Google Fonts 的日期 |
license.id | OFL-1.1 | SIL Open Font License 1.1 |
tags | sans/rounded | 圆润无衬线(reviewed 标签) |
status | active | 注册表当前启用状态 |
family.json中的sources数组记录了对 6 个上游 TTF 源文件的逐一 inspection 结果(源码位置),可以精确还原这套字体的技术底细:
| 变体(weight/style) | 文件 | 大小 |
|---|---|---|
| 300 / normal | AveriaSansLibre-Light.ttf | 107,748 B |
| 300 / italic | AveriaSansLibre-LightItalic.ttf | 134,240 B |
| 400 / normal | AveriaSansLibre-Regular.ttf | 108,320 B |
| 400 / italic | AveriaSansLibre-Italic.ttf | 128,856 B |
| 700 / normal | AveriaSansLibre-Bold.ttf | 112,976 B |
| 700 / italic | AveriaSansLibre-BoldItalic.ttf | 135,808 B |
所有源文件的公共 inspection 数据(从源码结构看,6 个文件完全一致)包括:
fontVersion:Version 1.002;outline:glyf(TrueType 轮廓);codepoints:231 个字符映射;glyphs:234 个字形;axes:空数组,即无可变字体轴——Averia Sans Libre 是纯静态字体,Fontsource 只为其提供静态包,不提供@fontsource-variable可变包;features:gpos 与 gsub 均为空,即不含任何 OpenType 布局特性(无连字、无上下文替换、无 kern 表等)——这是"平均生成"流程的直接技术后果:源字体的排版特性无法通过多数决继承;colorTables:空,无彩色字形。
这 6 个静态变体同时被记录在 distribution.json 中,构成 Fontsource 实际发布的确切变体集合:
{ "static": [ { "style": "italic", "weight": 300 }, { "style": "normal", "weight": 300 }, { "style": "italic", "weight": 400 }, { "style": "normal", "weight": 400 }, { "style": "italic", "weight": 700 }, { "style": "normal", "weight": 700 } ] }由此可以准确回答"文档说 6 styles 具体指什么":即Light(300)、Regular(400)、Bold(700)三个字重 × 正体/斜体两种样式,共 6 个静态面。
五、字符覆盖与子集:只支持 latin
family.json中每个源的unicodeRange完全一致,勾勒出 Averia Sans Libre 的字符覆盖边界:
U+0020-007E, U+00A0-00FF, U+0131, U+0141-0144, U+0152-0153, U+0160-0161, U+0178, U+017D-017E, U+0192, U+02C6-02C7, U+02D8-02DD, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212即:覆盖基本拉丁区(Basic Latin)、拉丁-1 补充(Latin-1 Supplement),外加少数拉丁扩展字符(如ı、Ł/ł、Œ/œ、Š/š、Ÿ、Ž/ž、ƒ)、变音符号(ˆ、˘、˙、˚、˛、˜、˝)、常用标点(破折号、引号、项目符号、段落符号)、€、™与−等。
与之一致,distribution.json 声明:
{ "characters": { "defaultSubset": "latin", "subsets": [{ "definition": "latin", "id": "latin" }] } }Averia Sans Libre只有 latin 一个子集,没有 latin-ext,更不含西里尔、希腊或其他文字体系——这是"源字体多数决"的自然结果:2011 年时的 Google Web Fonts 绝大多数是拉丁字体。因此,面向西文排版选用它完全没有问题,但如果页面需要覆盖 latin-ext 或非拉丁语言,请优先选择覆盖更广的字体(Fontsource 会在每个字体页面上明确标注其子集与语言支持)。
六、许可证:SIL Open Font License 1.1 与保留字体名
license.txt 完整收录了 OFL-1.1 协议文本,版权声明为:
Copyright (c) 2011, Dan Sayers (i@iotic.com), with Reserved Font Name 'Averia' and 'Averia Libre'.
需要特别注意的是**保留字体名(Reserved Font Name)**条款:Averia与Averia Libre是被保留的名称。依据 OFL-1.1 第 3 条,任何修改版(Modified Version)不得直接使用这些保留名作为主字体名,除非获得版权持有者的书面许可。也就是说:
- 你可以自由使用、复制、合并、嵌入、修改与再分发该字体;
- 修改后的衍生字体必须继续以 OFL 发布(不得换用其他许可证);
- 衍生字体不得单独出售,但可以随软件捆绑、嵌入与销售;
- 衍生字体不得沿用 "Averia" / "Averia Libre" 作为字体名,除非获得授权。
这套许可条款也是 Fontsource 能将其纳入自托管分发体系的前提:Fontsource 的注册表脚本在 google.ts 中维护了APACHE2、OFL、UFL三类上游许可证映射,OFL 对应 idOFL-1.1与官方协议文本地址。
七、描述文档的消费端:字体摘要与详情页
在 Fontsource 的网站上,这份description.en-US.md会被 API 暴露为字体的description字段,并驱动字体详情页的摘要文案。核心实现位于website/app/utils/font-summary.server.ts:
- 使用
markdown-to-jsx的解析器提取描述中的第一个段落; - 通过
Intl.Segmenter按英文句子粒度切分,取第一句话作为摘要; - 若该句长度不超过 140 字符且以句号/感叹号/问号结尾,直接用作摘要;否则回退为结构化事实句,例如:
Averia Sans Libre is a display font by Dan Sayers.这意味着:你在字体详情页看到的"一句话简介",正是从本文依据的这段描述文档中自动抽取的。描述文档写得越精炼、首句越完整,页面摘要就越准确——这也是上游 Google Fonts 描述规范要求首段交代字体起源的原因。
八、实战:在 Fontsource 中安装并使用 Averia Sans Libre
由于 Averia Sans Libre 无可变轴、仅含 latin 子集与 6 个静态变体,对应包名为@fontsource/averia-sans-libre(静态包)。安装与使用方式如下(参考 install.mdx 与 subsets.mdx)。
1. 安装
任选一种包管理器:
npm install @fontsource/averia-sans-libre # 或 pnpm add @fontsource/averia-sans-libre # 或 yarn add @fontsource/averia-sans-libre2. 引入字体
在应用入口文件(如main.jsx/App.tsx)中引入:
import "@fontsource/averia-sans-libre"; // 默认字重 400 normal按需引入具体字重与样式(该家族支持 300/400/700 × normal/italic):
import "@fontsource/averia-sans-libre/300.css"; // Light import "@fontsource/averia-sans-libre/300-italic.css"; // Light Italic import "@fontsource/averia-sans-libre/400.css"; // Regular import "@fontsource/averia-sans-libre/400-italic.css"; // Regular Italic import "@fontsource/averia-sans-libre/700.css"; // Bold import "@fontsource/averia-sans-libre/700-italic.css"; // Bold Italic注意:正体引入不会自动包含斜体,同一字重需要两条 import。若使用 TypeScript 且开启了noUncheckedSideEffects,可在全局声明文件(如src/globals.d.ts)中补充:
declare module "*.css"; declare module "@fontsource/*" {}3. CSS 中使用
body { font-family: "Averia Sans Libre", sans-serif; }由于该字体仅含 latin 子集,生成 CSS 中的unicode-range会自动只针对 latin 字符生效,浏览器按需下载字形。若你的项目有明确的 latin-only 场景,甚至可以精确到子集引入:
import "@fontsource/averia-sans-libre/latin.css";(Fontsource 官方建议除非有明确理由,否则使用默认引入配合unicode-range即可。)
4. 适用场景建议
基于注册表数据(display 分类、sans/rounded 标签、无 OpenType 特性),Averia Sans Libre 适合标题、海报、品牌展示等展示型排版场景;其"平均值"出身决定了它整体形态收敛、笔画均衡,但又带有源字体集合的平均个性。若正文需要更强可读性、连字或更广语言覆盖,建议搭配其他覆盖更全的正文字体使用。
九、总结
从一篇 Google Fonts 官方描述出发,我们完整还原了 Averia Sans Libre 的前世今生:以 725 款 OFL 字体逐项取平均、字形多数决的程序化生成方法论;6 种静态样式的确切构成(300/400/700 × normal/italic);仅 latin 单子集、无可变轴、无 OpenType 特性的技术边界;以及 OFL-1.1 下的保留字体名约束。更重要的是,通过 Fontsource 的注册表链路(google.ts 的 HTML→Markdown 转换、family.json 的 inspection 档案、font-summary.server.ts 的摘要抽取),我们看到了"字体描述"在开源生态中如何从上游文档流转为可检索、可展示、可引用的结构化事实,并最终支撑起一行即可上手的自托管字体实践。
- 前端
- CLI
- 开发工具
【免费下载链接】fontsource
Self-host Open Source fonts in neatly bundled NPM packages.
相关推荐
基于 725 款字体的"平均值"生成:Averia Libre 字体与 Fontsource 开源分发详解
基于 725 款字体的"平均值"生成:Averia Libre 字体与 Fontsource 开源分发详解 本篇技术指南围绕 Fontsource 仓库中收录的
前端CLI开发工具Babylonica 字体家族:Fontsource 注册表中的手写书法字体及其自托管应用
Babylonica 字体家族:Fontsource 注册表中的手写书法字体及其自托管应用 Babylonica 是 Fontsource 开源字体注册表中一款
前端CLI开发工具Bagnard Sans 字体档案:源于拿破仑战争涂鸦的无衬线字体及其在 Fontsource 中的自托管实践
Bagnard Sans 字体档案:源于拿破仑战争涂鸦的无衬线字体及其在 Fontsource 中的自托管实践 Bagnard Sans 是一款由 Sébast
前端CLI开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考