用途:将 SVG 字形编译为可安装的 TTF 字体文件,并管理版本与发布。编译必须使用捆绑脚本,避免每次自写脚本导致 y 轴转换、度量处理不一致,影响轮次间比较。
前置条件:需要 fontTools,可用 python3 -c "import fontTools" 检查,缺失时执行 pip3 install --user fonttools。输入 SVG 需符合 glyph-design 规范(viewBox 0 0 1000 1000、仅顶层 path、禁止 stroke、基线 y=880)。
构建输入:不是 SVG 目录而是每个字形目录下的 manifest.json,键必须为 1 个字符,路径相对 manifest 位置;省略 advance 时默认 1000(韩文全角),拉丁与符号须显式写明 advance。
构建流程:先做构建前验证,如 grep -l 'stroke' _workspace/glyphs/{概念}/**/*.svg,有结果即违规;再用 python3 .claude/skills/font-build/scripts/build_font.py --manifest ... --family "Cheonjiin" --family-ko "천지인" --version 0.{N} --out _workspace/build/Cheonjiin-v0.{N}.ttf 编译。--family 必须为 ASCII,否则 macOS Font Book 会拒绝安装;韩文显示名用 --family-ko。许可证与版权 name 记录由脚本自动嵌入。
产物验证:用 python3 -m fontTools.ttx -l 查看表列表,确认字形数为 manifest 合计加 1(.notdef),并检查失败列表为空,失败字形会被空字形替代。macOS 安装可用 open _workspace/build/{文件}.ttf 后在字体册安装。
版本与发布:版本与轮次同步(round-3 → v0.3),不覆盖旧构建,按版本保存在 _workspace/build/ 以便回归比较;发布时把最新 TTF 复制到 fonts/(只保留最新一个),更新 README.md 与 CLAUDE.md 变更历史,韩文提交后 git push 到 github.com/revfactory/font-harness。
限制与陷阱:stroke 绘制的笔画编译时丢失;计数孔(如 ㅇ 内部)被填充说明内外轮廓方向相同,需修改字形,字体中无 fill-rule;transform 属性与嵌套组可能被忽略;三次贝塞尔由脚本自动用 cu2qu 转换;非 ASCII --family 会引发 macOS 安装错误。