ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FontForge 的 MM(Multiple Master)菜单完全指南:从创建、校验到混合操作的实战解析

FontForge 的 MM(Multiple Master)菜单完全指南:从创建、校验到混合操作的实战解析 桌面应用图形学【免费下载链接】fontforgeFree (libre) font editor for Windows, Mac OS X and GNULinux项目地址https://gitcode.com/gh_mirrors/fo/fontforge点击查看免费下载本文基于 FontForge 官方文档 doc/sphinx/ui/menus/mmmenu.rst 展开深入剖析MMMultiple Master多重主字体菜单在字体视图Font View与轮廓字形视图Outline Glyph View中的全部命令并结合仓库源码fontforgeexe/fontview.c、fontforgeexe/charview.c、fontforge/mm.c揭示每个菜单项背后的实现机制与启用/禁用条件。读完本文你将掌握 MM 字体的创建、合法性校验、混合Blend生成新字体、默认权重调整以及按子字体切换显示的完整操作链路。MMMultiple Master是 Adobe PostScript Type1 时代提出的一种可变字体方案一个字体文件内同时保存同一字族多种极端风格的设计master并通过插值interpolation生成中间样式Apple 的 Distortable Font 是其在 TrueType 上的类似概念。FontForge 将两者统一处理而MM 菜单正是操作这类字体的入口。该菜单在字体视图和轮廓字形视图中分别以不同形式出现字体视图侧重全局管理创建、校验、混合、权重轮廓字形视图侧重单字形的混合与显示控制。若当前字体本身是 MM 字体菜单中还会追加一份由所有主设计master designs与默认混合字体default blended font构成的子字体列表。一、MM 菜单在字体视图中的命令详解在字体视图Font View中MM 菜单包含以下命令菜单项作用Create MM...打开多主字体对话框从头创建 MM 字体MM Validity Check校验当前 MM 字体是否可保存MM Info打开多主字体对话框修改当前 MM 字体Blend to New Font...将当前 MM 字体混合为一个独立的新字体MM Change Default Weights...修改每个主设计在默认实例混合中使用的权重子字体切换列表仅当当前字体为 MM 字体时出现这些菜单项在源码fontforgeexe/fontview.c的菜单表中均有对应定义见 fontview.c 菜单表_Create MM...、MM _Validity Check、_Blend to New Font...、MM Change Default _Weights...各菜单项均绑定独立的回调函数。1.1 Create MM...从零创建多重主字体选择Create MM...会弹出多主字体对话框引导你逐步完成 MM 字体的搭建。从源码看该命令对应的回调为FVMenuCreateMM其实现仅一行MMWizard(NULL)见 fontview.c#L3972-L3974——向向导传入NULL表示新建即当前没有任何 MM 集合需要从空白开始构建。对话框实现于 fontforgeexe/mmdlg.c按顺序引导你完成以下步骤详细说明见多主字体对话框文档确定字体类型与规模选择 Adobe Multiple Master 或 Apple Distortable Font设定轴axis数量与主设计master designs数量并给出一个族名创建新字体时使用。PostScript Type1 最多支持 4 条轴FontForge 对 Apple 字体同样只支持 4 条轴。Type1 字体至少需要2^轴数个设计3 轴即 8 个极端组合最多 16 个Apple 字体每条轴还额外需要一个默认设计即 3 个设计/轴。定义每条轴设置轴类型Weight、Width、Optical Size 等也可自定义、设计值范围Weight/Width 通常为 1–999Optical Size 通常为 6–72Apple 字体默认范围约为 .05–2.0、从设计值到 [0,1]Apple 为 [-1,1]的分段线性归一化映射。Apple 字体还需为每条轴提供可多语言翻译的名称与默认值。为每个主设计指定字体与坐标可以新建字体、使用已加载字体或从磁盘浏览注意不要重复使用同一个字体文件并指定该设计在轴上的坐标。编写 PostScript 函数仅 Type1 需要NormalizeDesignVector设计向量→归一化向量与ConvertDesignVector归一化向量→各设计的混合权重。常规线性情况下 FontForge 能自动生成使用中间设计时需手工输入。设置默认权重向量每个设计一个权重、总和必须为 1.0并设置ForceBoldThreshold私有字典条目。Apple 字体不需要这两个 PostScript 函数与默认权重向量改为提供一组可多语言翻译的命名样式named styles。1.2 MM Valid保存前的合法性体检MM Validity Check用于确认当前 MM 字体可以被正确保存。它遍历所有主设计检查彼此之间的一致性。对应源码FVMenuMMValidfontview.c#L3963-L3970调用底层实现MMValid(mm, true)见 fontforge/mm.c#L978true表示发现错误时弹出 Bad Multiple Master Font 错误对话框若当前字体不是 MM 字体mmNULL该命令直接忽略。依据文档与MMValid源码校验逐项覆盖轮廓Contours每个对应字形必须有相同数量的轮廓ContourCount比较见 mm.c#L1075每个轮廓必须拥有相同数量的点与控制点ContourPtMatch轮廓上每条样条必须类型一致同一位置不能在一种字体中是直线、在另一种中是曲线对应轮廓还必须同向ContourDirMatch见 mm.c#L1089。引用References每个对应字形必须有相同数量的引用且每个对应引用必须指向相同的编码RefMatch见 mm.c#L1096。提示Hints各设计中对应字形的提示数量必须相同。HintMasks对应点上的 HintMask 必须指定同一组提示计数器掩码 Counter masks 在此不受支持。字距Kerning若某字形在一种字体中与另一字形存在字距对kerning pair则所有设计中都必须存在对应的字距对。此外源码MMValid还补充了文档未展开的硬性检查项值得注意样条类型一致性所有设计必须使用同一种样条类型layers[ly_fore].order2必须一致。Apple 字体必须是二次quadratic样条Adobe MM 必须是三次cubic样条见 mm.c#L986-L997。字形数量与编码一致各设计glyphcnt必须相同mm.c#L1010。字形存在性一致某字形要么在所有设计中都输出、要么都不输出SCWorthOutputting比较mm.c#L1041-L1054。私有字典条目对齐BlueValues、OtherBlues、FamilyBlues、FamilyOtherBlues、StdHW、StdVW、StemSnapH、StemSnapV等数组条目必须在各设计中数量一致mm.c#L1029-L1037。ForceBold / ForceBoldThreshold若某个设计中存在ForceBold条目则加粗字体中必须存在ForceBoldThreshold条目mm.c#L1001-L1007。Apple 字体的额外限制Apple 字体中同一字形不能同时包含引用与轮廓refs 与 splines 不能共存见 mm.c#L1057-L1074。1.3 MM Info修改当前多重主字体MM Info同样打开多主字体对话框但用途是修改现有 MM 字体。源码中FVMenuMMInfo调用MMWizard(mm)fontview.c#L3976-L3983与 Create 的区别在于传入的是当前字体的MMSet指针而非NULL因此对话框会载入现有轴定义、设计列表与权重配置供你调整。与 Create MM 一样该命令在当前字体不是 MM 字体时被禁用。1.4 Blend to New Font...混合生成独立字体Blend to New Font...将当前 MM 字体按当前混合设置烘焙为一个独立的普通字体不再依赖 master 插值。对应回调FVMenuBlendToNew调用MMChangeBlend(mm, fv, true)fontview.c#L3994-L4001第三个参数true即混合到新字体。混合逻辑最终逐字形调用MMBlendChar(mm, gid)fontforge/mm.c#L536在字体级别则由MMChangeBlend驱动遍历全部字形见 mm.c#L648 附近对MMBlendChar的批量调用。生成的新字体是独立实体你可以像对待普通字体一样继续编辑、导出而不必保留整套 master 设计与插值函数。1.5 MM Change Default Weights...调整默认混合权重MM Change Default Weights...允许你修改默认实例default instance混合时分配给每个主设计的权重。对应回调FVMenuChangeMMBlend调用MMChangeBlend(mm, fv, false)fontview.c#L3985-L3992false表示只调整权重而非创建新字体。文档特别说明若mmNULL或字体是 Apple 类型此命令不可用——因为 Apple Distortable 字体采用命名样式机制不需要 Adobe 式的默认权重向量这一点也直接体现在源码的禁用逻辑中见下文。1.6 子字体名称列表在设计间快速切换若当前字体是 MM 字体菜单底部会列出所有构成该 MM 字体的子字体名称——包括所有主设计master designs与默认混合字体default blended font。点击某个名称对应子字体即被显示出来替换当前显示的字。该列表并非静态写死在菜单表中而是由mmlistcheck在菜单弹出时动态构建的fontview.c#L5472-L5507先复制基础菜单项再在分隔线之后逐个追加mm-normal默认混合字体与mm-instances[j]各主设计的字体名每个子项带单选勾选标记checkable勾选状态checked标记当前正在显示的子字体subfv-b.sf点击后通过FVMenuShowSubFont切换到对应字体。菜单的动态性解释了为何只有 MM 字体才会出现该列表。二、MM 菜单在轮廓字形视图中的命令详解在轮廓字形视图Outline Glyph View中MM 菜单结构有所不同包含MM Reblend重新混合当前字形的默认版本View 子菜单选择在视图背景中显示哪个设计的字形列表直接切换到另一子字体的同名字形菜单定义见 charview.c#L11905-L11911先是一个MM _Reblend项接着是一条分隔线然后是_View子菜单最后动态构建是子字体名称列表。与字体视图类似mmlistcheckcharview.c#L11922负责动态填充子字体列表第一个动态项是mm-normal其后是各mm-instances[j-1]每个子项可勾选勾选状态表示当前轮廓视图正显示哪个子字体的字形。2.1 MM Reblend重新混合当前字形MM Reblend根据当前默认权重重新计算并混合出当前字形的默认版本。对应回调CVMenuReblendcharview.c#L11891-L11903在满足以下条件时执行当前字体必须是 MM 字体mm!NULL必须是 Adobe 类型!mm-apple当前显示的字形必须属于默认混合字体cv-b.sc-parentmm-normal。满足条件后调用MMBlendChar(mm, cv-b.sc-orig_pos)对该字形重新混合若失败则弹出 Bad Multiple Master Font 错误成功后通过_SCCharChangedUpdate刷新视图显示。注意MM Reblend在 Apple 字体上被禁用且仅对默认混合字体中的字形生效——如果你正看着某个 master 设计需要先用子字体列表切回默认字体才能执行。2.2 View 子菜单选择背景设计View是一个子菜单让你选择在视图背景中显示哪个设计的字形。它的动态构建同样由mmlistcheck完成charview.c#L11880-L11888每个设计对应一个可勾选项勾选标记checked逻辑为cv-mmvisible 0 || cv-mmvisible submask即当前背景显示的设计。该功能便于在编辑某设计时对照另一设计的轮廓进行视觉比对。2.3 子字体名称列表切换显示的子字体与字体视图一致轮廓字形视图的 MM 菜单底部也列出mm-normal与各mm-instances的名称。点击不同名称字形视图将显示同一字符在不同子字体中的对应字形——实现为CVMenuShowSubCharcharview.c#L11913-L11920它调用SFMakeChar(new, ...)在目标子字体中创建对应字符并CVChangeSC切换显示同时同步网格图层。这里的子字体同样由主设计 默认混合字体组成。三、菜单可用性的源码级逻辑MM 菜单中大量命令的启用/禁用并非固定而是根据当前字体状态实时计算。字体视图的mmlistcheck末尾fontview.c#L5509-L5521给出明确规则菜单项禁用条件原因Create MM...从不禁用任何字体都可创建新 MMMM Info / MM Validity Check / Blend to New Font...mmNULL非 MM 字体依赖已有 MM 集合MM Change Default Weights...mmNULL或mm-appleApple 字体使用命名样式而非权重向量轮廓字形视图的mmlistcheckcharview.c#L11950则单独处理MM Reblend的禁用mmNULL || cv-b.sc-parent!mm-normal || mm-apple即非 MM 字体、当前不在默认混合字体、或 Apple 字体三种情况均不可混合。另外值得注意的是轮廓字形视图的菜单表存在两个版本完整版mblist含 MM 菜单见 charview.c#L11964-L11980与无 MM 版mblist_nommcharview.c#L11982-L11996FontForge 会根据当前字体是否为 MM 字体选择挂载哪一个菜单栏从而保证菜单与功能状态始终一致。四、MM 概念速览菜单背后的字体模型要熟练使用 MM 菜单理解其背后的字体模型会事半功倍完整论述见多主字体对话框文档轴Axis字体可变化的维度如 Weight细→黑、Width窄→宽、Optical Size6pt→72pt。Type1 最多 4 轴每条轴需要设计值范围与归一化映射通常 1↔0.0、999↔1.0 的分段线性映射也可加中间点改变缩放。主设计Master designs各极端组合的设计。Type1 至少2^轴数个如 3 轴至少 8 个Apple 每轴还要默认设计3 设计/轴3 轴即 27 个FontForge 暂不支持 Apple 的中间设计。默认权重向量Type1 特有的正常变体权重描述总和必须为 1.0。例如定义normal为 [400 500 12] 时权重向量可能是[.273 .027 .273 .027 .182 .018 .182 .018]。Apple 字体则以可翻译的命名样式代替。混合Blend由归一化设计向量经ConvertDesignVector得出各设计权重再对各设计对应字形插值——这正是MM Reblend与Blend to New Font...在底层做的事。一个实用技巧官方文档 A suggestion 部分Adobe Type1 要求全部极端设计3 轴需要 8 个设计但通过**外推extrapolation**可以显著减少工作量——2 轴情形下只需 3 个设计即可推出第 4 个极端先用Element -- Interpolate Fonts生成一个中间设计如 50% 介于设计 1 与设计 2再生成一个 200% 介于设计 0 与中间设计的字体即得所需极端设计。这从侧面解释了为什么Blend to New Font...与 MM 菜单的权重控制如此重要——它们是这套工作流的核心工具。五、延伸阅读MM 菜单文档本文对应的官方原始文档多主字体对话框文档MM 字体的完整概念与创建向导说明fontview.c 菜单定义与回调字体视图 MM 菜单的源码实现charview.c 菜单定义与回调轮廓字形视图 MM 菜单的源码实现mm.c 校验与混合实现MMValid校验函数与MMBlendChar混合函数mmdlg.cMMWizard多主字体向导对话框的实现赞分享桌面应用图形学【免费下载链接】fontforgeFree (libre) font editor for Windows, Mac OS X and GNULinux项目地址https://gitcode.com/gh_mirrors/fo/fontforge点击查看免费下载相关推荐FontForge 多重主字体Multiple Master对话框完全指南从轴定义到混合字体生成FontForge 多重主字体Multiple Master对话框完全指南从轴定义到混合字体生成 导读 本指南围绕 FontForge 的 Multipl桌面应用图形学VisiData 菜单系统完全指南从鼠标操作到菜单定制VisiData 菜单系统完全指南从鼠标操作到菜单定制 VisiData 是一款终端电子表格数据探索工具其菜单系统位于窗口第一行将绝大多数命令组织在一棵多数据分析CLI数据可视化FontForge 轮廓字符视图 Point 菜单完全指南点类型、样条重建与锚点操作FontForge 轮廓字符视图 Point 菜单完全指南点类型、样条重建与锚点操作 Point 菜单Point Menu是 FontForge 轮廓字符桌面应用图形学上一篇WebPlotDigitizer终极指南3分钟学会从图表中提取数据下一篇WebPlotDigitizer终极指南5步告别手动数据录入让图表开口说话创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表