字体名称中的合法字符是什么?

What are legal characters in Font names?

当 "consuming" 字体名称时,我必须期望哪些字符?当 "producing" 字体名称时,我应该避免哪些字符?不同操作系统、传统桌面应用程序、移动或网络应用程序 (->CSS) 和不同字体格式(如 OpenType、TrueType、WOFF、PostScript、SVG 等)之间是否存在差异?

根据W3。有效字体名称中只能使用 ISO-10646 字符。


根据 Adobe,PostScript 字体不得包含空格,并且只能使用标准 ASCII 字符集中的字符。名称也不能超过 29 个字符。

建议使用连字符分隔字体系列名称和样式定义,并出于优化目的同时使用大写和小写字符,因为某些解析器在能够搜索后跟的第一个大写字符时效果最佳通过一个小写字符。

Macintosh 字体菜单中使用的标准名称来自 与 Type 1 轮廓字体关联的 FOND 资源。喜欢的资源 名称在技术上允许最多 31 个字符,并且可以包含空格,但由于已知错误,超过 30 个字符的任何内容都不起作用。

在Windows环境下,字体菜单名称在打印机中指定 字体规格 (PFM) 文件,不得超过 31 个字符;存在与 Macintosh 中相同的限制为 30 个字符的建议。

Adobe 的命名约定被认为是行业范围的标准。


如果您正在寻求测试,请查看此回归测试:http://search.cpan.org/~mhosken/Font-TTF-1.05/lib/Font/TTF/Font.pm

您列出的几乎所有格式都是 OpenType:

的版本
  • 现代 TrueType 是指具有 TrueType glyph outlines
  • 的 OpenType 字体
  • WOFF 简单地包装 "SFNT" 结构化字体,现在基本上只是 OpenType 字体,允许可选的 per-table 压缩。
  • 现代 PostScript 指的是带有 CFF block, which describes outlines using an embedded font format with Type2 charstrings 的 OpenType 字体(实际上不是 PostScript。只有 "Type 1" 字体是 PostScript 字体,但是当 OpenType 离开时,Adobe 完全淘汰了 Type 1,移动他们的整个字体目录改为使用 CFF 块的 OpenType)
  • SVG 在字体上下文中可以指代两个不同的东西:"svg fonts",即 a dead technology, and a new variant of OpenType fonts with SVG outlines

原来是"which naming format does OpenType allow"和"within that, which format is widest supported"的问题。值得庆幸的是,OpenType naming table specification 拥有大部分信息。

重要的是您没有定义 "one" 姓氏,而是针对不同的受众多次定义它。查看名称 table 的 "Name IDs" 部分,您会看到几个字段都是为了容纳字体名称,只是针对不同的上下文:

  1. 字体家族名称,自由字符串形式。这在 "normal applications" 中用于告诉您正在查看的字体。
  2. 字体子家族名称,例如"italic"、"oblique" 等
  3. 此字体的唯一标识符。明智的 ID 涉及 ID 1 和 2 的某种组合以及一些 "when this file was released" 信息,但您也可以采用自由形式。
  4. "full font name"。通常,只需命名 id 1 和 2,用 space 分隔,但如果需要,您可以偏离此设置。
  5. 字体版本字符串,以及关于它应该是什么样子的规则
  6. 后记名。这个很特别,您应该仔细阅读它的用途。名称 绝不 必须与真实字体名称相匹配。不过,这是确保它确实如此的好形式。

作为真实世界的例子,让我们看一下 Palatino Linotype 的名称字符串:

  1. "Palatino Linotype"
  2. "Regular"
  3. "Palatino Linotype Regular April 1998"
  4. "Palatino Linotype"
  5. "Version 5.00"
  6. "PalatinoLinotype-Roman"

就平台差异而言,并非每个平台都需要所有这些字符串才能安装或使用字体。点击 this SO question 了解更多信息。例如,对于网络字体,名称 ID 1 在技术上就足够了,因为 "role" 字体播放完全由我们给它的 @font-face 规则决定,但对于桌面应用程序,ID 2 到 5 很重要。当然,对于 postscript 设备,ID 6 至关重要,因此如果没有它,操作系统往往无法将字体识别为 "proper"。