news 2026/9/25 3:26:38

3招玩转source-han-sans-ttf定制:修改字体家族名、增删字重、调优hinting参数完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3招玩转source-han-sans-ttf定制:修改字体家族名、增删字重、调优hinting参数完整指南

3招玩转source-han-sans-ttf定制:修改字体家族名、增删字重、调优hinting参数完整指南

【免费下载链接】source-han-sans-ttfA (hinted!) version of Source Han Sans项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf

source-han-sans-ttf 是一个为思源黑体(Source Han Sans)构建带 hinting 的 TTF 版本的开源项目。掌握本文的 3 招——修改字体家族名、增删字重、调优 hinting 参数,你就能把默认输出的 SHSTTF 字体改造成完全贴合自己需求的定制字体。

📦 项目简介:为什么要做思源黑体 TTF 版

思源黑体官方发行的是 OTF(CFF 轮廓)格式的 .ttc 集合文件。而 TTF(TrueType 二次曲线轮廓)在部分旧系统、移动端和一些设计/浏览器环境中的兼容性更好,嵌入也更方便。

本项目的最大卖点在描述里一句话就写明了:A (hinted!) version of Source Han Sans——它不仅转成 TTF,还为每个字形生成了专业的 hinting 指令,让字体在 Windows 等小字号场景下依然清晰锐利。

项目一次构建可产出7 个字重(ExtraLight、Light、Normal、Regular、Medium、Bold、Heavy)× 多个地区版本(简中、繁中、日、韩、港澳),构建流程分 4 个阶段:拆分 ttc 并重命名 → 转 TTF 并做基础 hinting → 用 Chlorophytum 生成精细 hint → 打包 ttc/压缩包,全部由 verdafile.js 调度(关键阶段定义见 verdafile.js#L10-L24)。

🛠️ 快速开始:一键安装与构建步骤

准备工作很简单,只需两样:

  • 最新版本的AFDKO(提供 otf2otc、otc2otf、otf2ttf、ttfautohint 等工具)
  • Node.js

拿到代码后执行:

git clone https://gitcode.com/gh_mirrors/so/source-han-sans-ttf cd source-han-sans-ttf npm install npm run build all

⏰ 注意:README 特别提醒,全量构建可能耗时数小时,请耐心等待。构建系统带有构建日志与自跟踪机制(verdafile.js#L22-L24),未变化的阶段不会重复执行。产物输出在out/ttf/(单字体)和out/ttc/(集合文件),版本来自 package.json 的version字段。

🏷️ 第一招:修改字体家族名

默认构建出的字体在菜单里显示的名字叫SHSTTF。想改成自己的名字,只需要改一个文件:config.json。

它里面有两处和"名字"直接相关(见 config.json#L2-L19):

配置项作用
naming.familyName各语言环境下字体菜单显示名(en_US、zh_CN、ja_JP 等 6 种语言)
prefix影响输出文件名(如 ShsTtf-SC-Bold.ttc)和PostScript 名
naming.version/naming.copyright写入字体的版本号与版权信息

README 给出的官方做法是:修改config.json的naming.FamilyName各条目(影响菜单名)和prefix属性(影响文件名与 PostScript 名),然后重新构建。

真正执行写名的逻辑在 renaming/index.js 中:构建时会为 6 种语言分别写入偏好家族名(Preferred Family)、子族样式名、完整字体名、Unique ID 以及 PostScript 名(核心函数见 renaming/index.js#L56-L73)。它还内置了兼容老系统的处理逻辑——非"标准四样式"(Regular/Bold/Italic/Bold Italic)的字重会自动并入家族名,比如ExtraLight会被缩写成XLight以防名称溢出。

💡 小贴士:字体家族名决定你在 Word、Figma 等软件菜单里看到什么;PostScript 名则影响 PDF 嵌入时的字体引用,两者分开设置,互不干扰。

⚖️ 第二招:增删字重

想只构建 Regular 和 Bold 两个常用字重来节省时间?或者想加入新的字重?答案仍然在 config.json 的weights数组(config.json#L6):

"weights": ["ExtraLight", "Light", "Normal", "Regular", "Medium", "Bold", "Heavy"]

增删规则只需记住三件事:

  1. 改数组:weights决定构建哪些字重,verdafile.js#L148-L153 中的hint-all任务就是遍历它逐字重执行的。
  2. 源文件要对应:每个字重都需要 src/ 目录下同名的源文件,如SourceHanSans-Bold.ttc(文件名由sourcePrefix拼接字重得到)。
  3. hinting 配置要对应:每个字重必须有一个同名的 hint-config/ 配置文件(如hint-config/Bold.json),否则该字重的精细 hinting 阶段会因缺少依赖而失败。

所以最简单的"删字重"玩法就是:把weights改成["Regular", "Bold"]后重新构建,其余文件原封不动。

⚙️ 第三招:调优 hinting 参数

这是进阶玩家的主场。每个字重一份独立的 hinting 配置(共 7 份,位于 hint-config/ 目录),结构分为三段"通道"(pass):

  • CJK 汉字/韩文通道:用@chlorophytum/hm-ideograph插件处理康熙部首、CJK 统一表意文字(含 A–F 区扩展)、韩文音节,并跟踪日文常用字表(jp78/jp83/jp90/jp04/hojo)等 OpenType 特性;
  • 平假名通道与片假名通道:分别对假名施加不同的斜线容差参数。

最值得动手的参数是 hint-config/Normal.json 中的这几项(各字重的标准值见下表):

字重CANONICAL_STEM_WIDTH(标准字宽/em)
ExtraLight0.029
Light0.04
Normal0.06
Regular0.067
Medium0.072
Bold0.097
Heavy0.105(另有密集字形专用值 0.072,见 hint-config/Heavy.json#L45-L48)

核心思路:

  • CANONICAL_STEM_WIDTH:hint 引擎认定的"标准笔画宽度"。字重越粗,值越大。若你自定义字重后发现小字号下笔画偏细或发虚,就按字重粗细微调这个值。
  • DoOutlineDicing + OutlineDicingStepLength:轮廓"切割"开关与步长,影响字形被吸附到像素网格时允许的变形粒度,一般保持 0.06 即可。
  • SLOPE_FUZZ 系列:假名斜笔画的吸附容差,平假名用 0.175、片假名用 0.03(对比 hint-config/Normal.json#L73-L79 与 hint-config/Normal.json#L106-L112),可针对渲染效果单独调整。

构建时,verdafile.js#L127-L147 的group-hint任务会读取对应字重的 JSON,并以全部 CPU 核心数为并行作业数(verdafile.js#L258),hint 结果会缓存到hint-cache-{weight}.gz,同参数重复构建不会重算。

❓ 常见问题

改个名字要等几个小时吗?不会。构建系统会按依赖跟踪缓存各阶段产物,只改naming时只有重命名及后续轻量阶段会重跑,最慢的 hinting 指令生成阶段不会因改名而重来。

改了 hinting 配置没生效?确认改的是对应字重的 JSON 文件(文件名与字重一一对应),并重新执行npm run build all。

构建依赖报错找不到 otf2ttf / ttfautohint?说明 AFDKO 未安装或版本过旧,请升级到最新版 AFDKO 后重试。

🎯 总结

source-han-sans-ttf 的定制玩法其实就围绕三份文件展开:config.json 管名字和字重清单,hint-config/ 管渲染精细度,verdafile.js 管构建流水线。改配置 → 重新构建 → 拿到专属的思源黑体 TTF,就是这么简单。动手试试吧!

【免费下载链接】source-han-sans-ttfA (hinted!) version of Source Han Sans项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf

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

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

Claude CLI工作流:基于MCP协议的本地化代码生成中枢

1. 项目概述:这不是一个“模板库”,而是一套面向 Claude 开发者的 CLI 工作流中枢你搜到“claude-code-templates”时,大概率正被一堆报错卡住:unable to connect to anthropic services、unable to locate the codex cli binary、…

作者头像 李华
网站建设 2026/9/25 3:25:29

douyin-downloader 完整教程:五步搞定抖音无水印批量下载

douyin-downloader 完整教程:五步搞定抖音无水印批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

作者头像 李华
网站建设 2026/9/25 3:25:26

烽火HG680-J刷机全攻略:高安版与非高安版区分及强刷教程

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

作者头像 李华