NSFont 字体大小与字体指标有何关系

How does NSFont font size relate to the font metrics

本页的图 6.1 显示了您可以从 NSFont 获得的字体指标: https://developer.apple.com/library/archive/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html

如果我创建一个大小为 256 的 Arial 字体,我得到以下值:


nsfont pointSize 256
nsfont ascender 231.75
nsfont descender -54.25
nsfont leading 8.375
nsfont capHeight 183.375
nsfont xHeight 132.75

我不明白字体大小 (256) 与指标的关系。我本来希望字体大小等于上升加上下降或者可能等于 Cap 高度。感谢您的帮助。

让我们来看看macOS上的Arial字体。使用 FontForge(或任何其他工具)打开它并查看指标。

  • Em 大小 2048(又名 Em 方形,UPM = 每 em 的单位,...)
  • 赢得攀登 1854
  • 赢得血统 434
  • 大写高度1467
  • X 高度 1062
  • ...

简化说明:

  • Em 大小 - 假设它是一个容器,每个字符都将在其中绘制
    • 您可以找到具有 1000、1024、2048 等值的字体
  • 其他指标(上升,...)是相对于 em 大小的单位
    • 例如上升 - 1854 / 2048 = 0.905...
  • 当您请求 256pt 字体大小时,ascent 为 0.905... * 256 = 231.75

macOS 如何获取您列出的所有这些值:

  • 上升 = (1854 / 2048) * 256 = 231.75
  • 下降 = -(434 / 2048) * 256 = -54.25
  • 大写高度 = (1467 / 2048) * 256 = 183.375
  • ...

I would have expected the font size to be equal to the ascent plus the descent or maybe equal to the Cap height.

没有。当您要求 256pt 字体大小时,您基本上是在说您想将 Em 大小的容器缩放到 256pt。其他一切都取决于字体本身的指标。这因字体而异。