为什么没有包含所有Unicode字形的字体?

Jer*_*all 48 unicode fonts

就像标题所说的那样.正确渲染所有unicode格式,复合字符和影响其他字符和连字的字符真的很难,我明白了.我们的字体似乎是为最大的Unicode符号支持(Symbola,Code2001,其他)而设计的,以及某些平面或字符范围的专用字体(BabelStone Han,其他).

我对字体的基础技术细节知之甚少.有最大尺寸吗?这是版权问题吗?基本上是重绘所有~110,000现存的雕文太难了?我理解风格问题,但为什么不回归到具有所有字形的'默认'字体?他们在unicode.org上,重新绘制它们将是非常艰苦的工作,但是你会有一个保证后备字体的一切.如果你拥有一些预先存在的字体的权利,你可以只复合它们,这应该有很多帮助.这样的字体对人类来说是一个很大的帮助,我看不出为什么它不存在或至少是一个开源的努力创造它的好技术原因,所以我假设一个看不见的理由为什么它无法做到.

那是什么原因?

Mik*_*ans 68

"为什么你甚至想要那个?" 除了问题之外,从编程的角度来看,有一个非常简单的原因:OpenType规范只提供一个USHORT的可寻址字形索引空间,因此一种字体只能支持16位的字形,或者最多65536个字形.

当前版本的Unicode,v8作为此答案,包含120737个指定的代码点,或几乎是现代字体的两倍.事实上,自2001年以来,Unicode已经不适合现代OpenType字体,随着Unicode 3.1的发布,它将代码点的数量从49259增加到94205.

"那么字体集呢?" 我听你问.为什么不使用多种字体并以这种方式支持所有unicode?那么现在,您刚刚描述了Adobe的Source Pro和Google的Noto(它们是相同的字体).

至于"它有多难":Unicode中所有字形的统一样式,在这个星球上的129个已建立的书面脚本中,每个都有自己的排版规则?难以置信.您可能认为字体只是带有字母图片的文件,有人键入字母,图片显示:字体不是如何工作的,而且自1980年代后期以来,字体的工作方式并非如此.

现代字体是游戏ROM的印刷等价物:当然,如果没有硬件或软件来运行该ROM,它就没有多大用处,但所有真正重要的事情都在ROM中.同样,现代字体包含排版的所有信息.不仅仅是图片,它们包含任意序列的元数据,度量标准,定位和替换规则,OpenType支持的每个编写脚本都有单独的规则集,小点渲染的可能位图回退,关于如何正确栅格化矢量的提示指令本质上未与任何特定像素网格对齐的图形等等.现代字体是一个非常复杂的应用程序,字体引擎可以查询如何排版代码点序列,并制作一组(包含)包含Unicode的字体是一项庞大的团队工作.

所以:"为什么不存在包含所有Unicode字形的字体?",因为从2001年开始技术上就不可能.我们可以而且确实制作涵盖所有Unicode的字体系列,但有129种不同的脚本都有自己的字体系列排版规则,这是一个庞大的团队努力.

至于这个:

这样的字体对人类来说是一个很大的帮助,我看不出为什么它不存在或至少是一个开源的努力创造它的好技术原因,所以我假设一个看不见的理由为什么它无法做到.

仅仅因为你不知道他们做到了,但这并不意味着他们不存在,数以百万计的人谁熟悉他们.他们存在,他们甚至是开源的,出去感谢制造他们的人=)

  • 然后随意注册OpenType讨论列表并定位该语句,然后您可能会得到一个非常合理的回复,说明为什么没有发生(最值得注意的是:它修复了一些不是问题因为字体引擎可以很好地处理字体堆栈,同时破坏地球上每台设备的兼容性.不仅仅是计算机,还有全球目前使用的大约百万台打印机型号) (6认同)
  • Adobe Blank是一种极端的专业字体,它与完整的Unicode实现相反:它有一个特殊的CMAP,它将每个Unicode代码点映射到相同的单个字形("空白").它不是实现所有东西,而是实现任何东西,并且用空图片表示没有任何东西.它在字体调试中用作测试期间的后备:如果你看到Adobe Blank的"空白"(它有一个宽度,所以你可以在你的文本中看到它),你知道你正在调试的字体缺少某些东西. (5认同)
  • 我想知道为什么OTF/TTF规范没有更新以支持超过65536个最大字形.很明显,我们不久前已超过此限制,下载单个字体比尝试浏览字体系列更容易. (3认同)
  • "Source Code Pro"不是"Source Pro"系列,它是专门用于代码编辑器用户需求的子集.相反,请访问https://github.com/adobe-fonts,您将看到五套涵盖serif(CJK和非CJK),sans-serif(CJK和非CJK)以及一种特殊的等宽编程字体(即你下载的"源代码专业版" (3认同)
  • 这是特殊目的,当你进行类型设计实现,以及在发送一些东西用于生产之前进行校对(无论是文本,网页,等等).特别是对于后者,看到"没有"而不是使用不同字体的文本样式,这些字体可能足够相似,以至于在第一次打样时没有抓住它是非常有价值的. (2认同)
  • 因为他们不能.USHORT只能容纳65,000个号码.想要更多角色?好消息:使用字体集合.哪个规格*已更新(https://www.microsoft.com/typography/otspec/otff.htm =>"font collections") (2认同)

小智 7

GNU Unifont。它旨在包含除 Apple Emoji 之外的所有 Unicode。

  • 除非它没有 - 它只实现了基本多语言平面,它甚至不是 Unicode 的一半,而且它实际上并不擅长作为字体:它只是一个字符映射。如果您需要 BMP 涵盖的相当多的语言所需的任何类型的复杂文本整形,那么 GNU Unifont 对您来说基本上是无用的。此外,如前所述,由于编程限制,单个字体_不能_包含多个字形 ID 的 USHORT,因此您永远无法将所有内容都放在单个字体中。这就是集合存在的原因。 (8认同)
  • 我知道?我查了一下它做了什么,这就是我发表评论的原因。这是一种使用起来很疯狂的字体,如果您想要本地“所有语言”支持,请使用 Noto 系列或其他东西,因为那些 _do_ 支持真正的语言,而不仅仅是“某些字形”。 (3认同)