就像标题所说的那样.正确渲染所有unicode格式,复合字符和影响其他字符和连字的字符真的很难,我明白了.我们的字体似乎是为最大的Unicode符号支持(Symbola,Code2001,其他)而设计的,以及某些平面或字符范围的专用字体(BabelStone Han,其他).
我对字体的基础技术细节知之甚少.有最大尺寸吗?这是版权问题吗?基本上是重绘所有~110,000现存的雕文太难了?我理解风格问题,但为什么不回归到具有所有字形的'默认'字体?他们在unicode.org上,重新绘制它们将是非常艰苦的工作,但是你会有一个保证后备字体的一切.如果你拥有一些预先存在的字体的权利,你可以只复合它们,这应该有很多帮助.这样的字体对人类来说是一个很大的帮助,我看不出为什么它不存在或至少是一个开源的努力创造它的好技术原因,所以我假设一个看不见的理由为什么它无法做到.
那是什么原因?
"为什么你甚至想要那个?" 除了问题之外,从编程的角度来看,有一个非常简单的原因: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种不同的脚本都有自己的字体系列排版规则,这是一个庞大的团队努力.
至于这个:
这样的字体对人类来说是一个很大的帮助,我看不出为什么它不存在或至少是一个开源的努力创造它的好技术原因,所以我假设一个看不见的理由为什么它无法做到.
仅仅因为你不知道他们做到了,但这并不意味着他们不存在,数以百万计的人谁是熟悉他们.他们存在,他们甚至是开源的,出去感谢制造他们的人=)