Text Programming Guide for iOS - 03 - Typographical Concepts

261 阅读8分钟

印刷的概念

本章定义了一些与文本系统相关的重要排版概念。表示这些概念的许多术语都反映在文本系统API中。如果你熟悉排版,你可以跳过这一章。

Characters(字符)和Glyphs(字形)

一个character是承载意义的书面语的最小单位。Characters可以对应口语中的声音,就像罗马字一样;也可以对应整个词语,比如中国的表意文字;也可以对应数学符号。总之,Character是一个抽象的概念。

尽管Character必须要用可识别的形状表示,但是它们与该形状并不完全相同。也就是说不同形状绘制的Character被认为是同一个。例如,一个大写的A字符可以用不同粗细绘制,可以倾斜或者垂直,还有一些可选的变化(比如衬线)。这些字符的任何一种具体形式被称为Glyphs(字形);Figure 2-1展示了代表“大写a”的不同字形。

Figure 2-1  Glyphs of the character A

Glyphs of the character A

字符和字形不是一一对应的。在某些情况下,一个字符可能由多个字形(这里也可以翻译成符号),例如“é”可能是一个“e”符号与一个重音符号“´”的组合。在其他情况下,一个符号可以表示多个字符,如连字(ligature)或连字(join)。图2-2展示了单个字符和通常用于相邻的单字连字符。

Figure 2-2  Ligatures

Ligatures

连字是上下文形式的一个例子,在这种形式中,用于表示字符的字形(或者翻译为符号)会根据其旁边的字符而变化。其他上下文形式包括单词开头或结尾的交替符号。

计算机将字符存储为数字,通过编码表映射到相应的字符。iOS和OS X原生的编码方案符合Unicode标准。Unicode提供了一种标准方法,可以独立于所使用的平台、程序和编程语言,为世界上所有现代书写语言中的每个字符分配唯一的数字。这个通用标准解决了不同计算机系统使用数百种相互冲突的编码方案的长期问题。它还提供了说明如何处理双向文本和上下文的信息;如何构词和断行;如何对不同语言的文本进行排序;以及如何格式化适合不同语言的数字、日期、时间和其他元素。

字形(或者翻译为符号)也可以用称为符号代码的数字代码来表示。Glyphs are also represented by numeric codes called glyph codes.布局管理器在构图和布局处理期间选择用于描述字符的符号。布局管理器提供在字符和字形(或者翻译为符号)之间以及字符和视图坐标之间进行转换的方法。

字型和字体 (Typefaces and Fonts)

Typefaces是一种书面语言中部分或全部字符在视觉上相关的形状集合。 Font是一系列以一致的大小、字体和样式描述字符的符号。

原始文档解释的看不懂,知乎是这么解释Typefaces和Fonts的区别的

typeface:A typeface is what you see; font: A font is what you use。 typeface是在不同的排版技术中的底层视觉设计,font是tepeface中的一种实现

文本布局(Text Layout)

文本布局是在显示设备上安排符号的过程,在一个称为文本视图(Text view)的区域,它表示一个类似于传统排版的页面区域。字形(glyphs)的相对排列顺序称为文本方向(text direction)。在英语和其他源自拉丁语的语言中,符号(glyphs)被并排放置,组成由空格分隔的单词。单词从文本视图的左上角开始逐行排列,从左到右,直到文本到达视图的右侧。然后,文本在视图左侧的上一行开头的下方开始一行新行,布局以相同的方式继续到文本视图的底部。

在其他语言中,字形布局可能完全不同。例如,一些语言从右到左或垂直排列符号,而不是水平排列。在同一行中混合不同文本方向的语言是很常见的,特别是在技术写作中。例如英语和希伯来语。一些书写系统甚至在每一行中交替排列布局方向(一种称为柱字写法的安排)。有些语言不以空格分隔符号。此外,一些应用程序要求任意排列字形;例如,在图形设计上下文中,布局可能需要将符号安排在非线性路径上。

要从一串符号中创建行,布局引擎必须通过找到一行结束和下一行开始的点来执行断行。在文本系统中,可以在单词或符号边界处指定换行。在罗马文本中,在符号之间断开的单词需要在断点处插入连字符符号。

布局管理器沿着一条不可见的线(称为基线 baseline)排列符号。在罗马文本中,基线是水平的,大多数符号的底边都在基线上。有些符号延伸到基线以下,包括那些像“g”这样有下摆或“尾巴”的字符,以及像“O”这样的大圆角字符,它们必须延伸到基线以下一点,以补偿光学效果。其他书写系统将符号置于基线之下或以基线为中心。每个字形都包含一个原点(Origin point),布局管理器使用它来正确地与基线对齐。

字形(Glyph)设计者为字体提供了一套度量标准,称为度量标准(metrics),用于描述字体中每个字形周围的间距。布局管理器使用这些指标来确定字形(Glyph)的位置。在水平文本中,字形有一个称为前进宽度(advance width)的度量标准,它测量沿基线到下一个字形原点的距离。通常,原点和字形左侧之间有一定的空间,这称为左侧方位(left-side bearing)。在字形的右侧和由前进宽度描述的点之间也可能有空间,这称为右侧方位(right-side bearing)。字形的垂直维度由上升(ascent)和下降(descent)两个指标提供。上升距离(ascent)是字体中最高字形的起点(在基线上)到顶部的距离。下降(descent):从基线到字体最深下降部分底部的距离。包围字形可见部分的矩形称为边界矩形或边界框(bounding rectangle or bounding box)。图2-4展示了这些指标。

Figure 2-4  Glyph metrics

Glyph metrics

默认情况下,在水平文本中,排字人员使用advance width并排放置符号,从而产生标准的符号间空格。然而,在某些组合中,字距(kerning)调整(即缩小或拉伸两个符号之间的空间)可以使文本更具可读性。一个非常常见的字距(kerning)调整发生在大写W和大写A之间,如图2-5所示。字体设计人员在字体指标中包含字距信息。文本系统提供了关闭字距的方法,使用字体提供的默认设置,或者在选定的文本中收紧或放松字距。

Figure 2-5  Kerning

Kerning

字体系统通常以“点(point)”为单位来度量字体,在大多数计算机排版系统中,正好是72 /英寸。加上字体上升和下降的距离就可以得到字体的点大小(point size)。

在排字过程中,行间增加的空白称为行距(leading),在传统的金属铅字版面中,行距是指用于行距目的的铅字段。上升方向加上下降方向加上前导方向的总和决定了字体的行高(line height)。Leading有时也称为linegap。它通常被指定为字体的点大小与设定文本块的行高的比率,例如14/16.5。

虽然前面提到的字体设计的排版概念可能有些晦涩难懂,但大多数在计算机或打字机上创建过文档的人都熟悉页面上的文本布局元素。例如,页边距(margins)是页面边缘和布局引擎放置符号的文本区域之间的空白区域。对齐(Alignment)描述了文本行相对于页边距的放置方式。例如,水平文字可以右对齐、左对齐或居中对齐,如图2-6所示。

Figure 2-6  Alignment of text relative to margins

Alignment of text relative to margins

文本行也可以两端对齐(justified);对于水平文本,通过字间距和字间距(interword and interglyph spacing)的不同,行左右边距都是对齐的,如图2-7所示。如果需要,在文本流被分割成行、添加连字符和替换其他符号后,系统会执行对齐和调整。

Figure 2-7  Justified text

Justified text