关键字 pos 用于声明字形定位(positioning)。正如所支持的字形定位类型中所述,有几种定位类型。定位声明只能在查询(lookup)中声明,不能直接在特征(feature)中声明定位。每个查询只能有一种定位类型,这意味着如果您想在单个特征中使用多种定位类型,就必须声明多个查询。
对于大多数定位声明,可以定义几个坐标来确定字形的定位变化。每个声明由一到四个坐标组成。
坐标的格式是(包括尖括号):
<X预置宽度 Y预置高度 X横向位移 Y纵向位移>
X预置宽度(XAdvance)必须始终指定,Y预置高度(YAdvance)、X横向位移(XPlacement) 和 Y纵向位移(YPlacement)是可选项。
XAdvance | 预置宽度的水平调整量 |
YAdvance | 预置高度的垂直调整量 |
XPlacement | 放置位置的水平调整量 |
YPlacement | 放置位置的垂直调整量 |
声明单个调整(类型 1)定位
单个定位用于更改单个字形或字形类组的位置,可用来轻松创建使用相同字形特征的下标和上标。
lookup MyLookupTable {
pos A <-20 [0 0 0]>;
}
对于类组,其语法非常相似:
class @class1 [A-Z]
lookup MyLookupTable {
pos @class1 <-20>
}
声明配对调整(类型 2)定位
配对定位用于改变 2 个字形或字形类组的位置,主要用于定义字距调整对子。
lookup MyLookupTable {
pos A B <-10 [0 0 0]> [<0 [0]>];
}
对于类组,其语法非常相似:
class @class1 [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
class @class2 [a b c d e f g h i j k l m n o p q r s t u v w x y z]
lookup MyLookupTable {
pos @class1 @class2 <-20>
}
上面只用一行代码创建了676个(26×26)、值为-20的字距调整对子。
也可以将一个类组与单个字形进行组合:
class @class1 [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
lookup MyLookupTable {
pos @class1 hyphen <-10>
}
上面只用一行代码创建了值为-10、 大写字母与连字符(hyphen)组合的26个字距调整对子。
强制单个调整(类型 1)定位
假如要声明基于类组的字距调整对子,但在导出字体时,需要导出为基于字形的展平式(flattened)字距调整对子,请添加 PairPosFormat1 选项。
lookup MyLookupTable {
option PairPosFormat1;
pos @class1 hyphen <-10>
}
声明标记到基本(类型 4)的定位
标记到基本(Mark-to-Base)定位,用于通过锚点将标记字形(变音符号)附接(attach)到基本字形上。
lookup MyLookupTable {
mark acute 0 0;
mark ring 0 0;
pos A mark -10 30;
pos B mark -10 20;
mark esp 0 0;
pos A mark -10 20;
}
声明标记到标记(类型 6)的定位
标记到标记(Mark-to-Mark)的定位,用来将标记字形附接到其他标记字形上。
其语法与标记到基本的定位相同,但仅用于标记字形。
声明链式上下文(类型 8)的定位
此语法与 GSUB 语法相同。唯一的区别是,替换表是 GPOS 查询而不是 GSUB 查询。