本主题概述了 Windows Presentation Foundation(WPF)中 OpenType 字体技术的一些主要功能。
OpenType 字体格式
OpenType 字体格式是 TrueType® 字体格式的扩展,添加了对 PostScript 字体数据的支持。 OpenType 字体格式由 Microsoft 和 Adobe Corporation 共同开发。 OpenType 字体和支持 OpenType 字体的作系统服务为用户提供了安装和使用字体的简单方法,无论字体包含 TrueType 轮廓还是 CFF (PostScript) 轮廓。
OpenType 字体格式解决了以下开发人员的挑战:
更广泛的多平台支持。
更好地支持国际字符集。
更好地保护字体数据。
较小的文件大小,使字体分布更高效。
对高级排版控制的广泛支持。
注释
Windows SDK 包含一组可用于 Windows Presentation Foundation (WPF) 应用程序的示例 OpenType 字体。 这些字体提供了本主题其余部分演示的大部分功能。 有关详细信息,请参阅 示例 OpenType 字体包。
有关 OpenType 字体格式的详细信息,请参阅 OpenType 规范。
高级版式扩展
高级版式表(OpenType 布局表)使用 TrueType 或 CFF 轮廓扩展字体功能。 OpenType 布局字体包含了额外的信息,这些信息扩展了字体的功能,以支持高质量的国际排版。 大多数 OpenType 字体仅公开可用 OpenType 功能总数的子集。 OpenType 字体提供以下功能。
支持连字、位置变体、替代字形及其他字体替换的字符和字形之间的丰富映射。
支持二维定位和字形附着。
字体中包含的显式脚本和语言信息,因此文本处理应用程序可以相应地调整其行为。
OpenType 布局表在 OpenType 规范的 “字体文件表” 部分更详细地介绍。
本概述的其余部分将介绍对象属性 Typography 所展现的一些视觉上引人入胜的 OpenType 功能的广泛性和灵活性。 有关此对象的详细信息,请参阅 版式类。
变量
变体用于显示不同的排版风格,如上标和下标。
上标和下标
该 Variants 属性允许为 OpenType 字体设置上标和下标值。
以下文本显示了 Palatino Linotype 字体的上标符号。
以下标记示例演示如何使用对象的属性 Typography 为 Palatino Linotype 字体定义上标。
<Paragraph FontFamily="Palatino Linotype">
2<Run Typography.Variants="Superscript">3</Run>
14<Run Typography.Variants="Superscript">th</Run>
</Paragraph>
以下文本显示 Palatino Linotype 字体的下标。
以下标记示例展示如何通过 Typography 对象的属性定义 Palatino Linotype 字体下标。
<Paragraph FontFamily="Palatino Linotype">
H<Run Typography.Variants="Subscript">2</Run>O
Footnote<Run Typography.Variants="Subscript">4</Run>
</Paragraph>
上标和下标的装饰用途
还可以使用上标和下标来创建混合大小写文本的装饰效果。 以下文本显示 Palatino Linotype 字体的上标和下标文本。 请注意,大写字母不会受到影响。
以下标记示例演示如何使用对象的属性 Typography 为字体定义上标和下标。
<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Superscript">
Chapter One
</Paragraph>
<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Subscript">
Chapter One
</Paragraph>
资本
大写是一组排版样式,用于以大写字形呈现文本。 通常,当文本呈现为所有大写时,字母之间的间距可能太紧,字母的粗细和比例过大。 OpenType 支持多种大写字母格式,包括小型大写、小号大写、标题格式和大写间距。 这些样式格式允许您控制字体的大写形态。
以下文本显示 Pescadero 字体的标准大写字母,接着是样式为“SmallCaps”和“AllSmallCaps”的字母。 在这种情况下,所有三个单词都使用相同的字号。
以下标记示例演示如何使用对象的属性 Typography 为 Pescadero 字体定义大写。 使用“SmallCaps”格式时,将忽略任何前导大写字母。
<Paragraph FontFamily="Pescadero" FontSize="48">
<Run>CAPITALS</Run>
<Run Typography.Capitals="SmallCaps">Capitals</Run>
<Run Typography.Capitals="AllSmallCaps">Capitals</Run>
</Paragraph>
标题大写字母
标题大写字母的重量和比例较轻,旨在展现比普通大写字母更加优雅的视觉效果。 标题大写字母通常用于较大字号的标题。 以下文本展示 Pescadero 字体的普通大写字母和题字大写字母。 请注意第二行上文本的较窄的词干宽度。
以下标记语言示例演示如何使用 Typography 对象的属性定义 Pescadero 字体的标题大写字母。
<Paragraph FontFamily="Pescadero">
<Run Typography.Capitals="Titling">chapter one</Run>
</Paragraph>
大写字母间距
大写间距是一项功能,允许在文本中使用所有大写时提供更多间距。 大写字母通常设计为与小写字母混合。 当所有字母都使用大写时,在大写字母和小写字母之间看起来合适的间距可能显得过紧。 以下文本显示 Pescadero 字体的正常和大写间距。
以下标记示例演示如何使用对象的属性 Typography 为 Pescadero 字体定义大写间距。
<Paragraph FontFamily="Pescadero">
<Run Typography.CapitalSpacing="True">CHAPTER ONE</Run>
</Paragraph>
连字
连字是将两个或多个字形组合为单个字形,以创建更易读或更具吸引力的文本。 OpenType 字体支持四种类型的连字:
标准连字。 旨在增强可读性。 标准连字包括“fi”、“fl”和“ff”。
语境连字。 旨在通过提供构成连字的字符之间的更好的联接行为来提高可读性。
选择性连字。 设计为观赏性,而不是专门为可读性而设计。
历史连字。 具有历史风格,而不是专门为了可读性设计的。
以下文本显示 Pericles 字体的标准连字字形。
以下标记示例演示如何使用对象的属性 Typography 为 Pericles 字体定义标准连字字形。
<Paragraph FontFamily="Pericles" Typography.StandardLigatures="True">
<Run Typography.StylisticAlternates="1">FI</Run>
<Run Typography.StylisticAlternates="1">FL</Run>
<Run Typography.StylisticAlternates="1">TH</Run>
<Run Typography.StylisticAlternates="1">TT</Run>
<Run Typography.StylisticAlternates="1">TV</Run>
<Run Typography.StylisticAlternates="1">TW</Run>
<Run Typography.StylisticAlternates="1">TY</Run>
<Run Typography.StylisticAlternates="1">VT</Run>
<Run Typography.StylisticAlternates="1">WT</Run>
<Run Typography.StylisticAlternates="1">YT</Run>
</Paragraph>
以下文本显示 Pericles 字体的任意连字字形。
的文本
以下标记示例演示如何使用对象的属性 Typography 为 Pericles 字体定义任意连字字形。
<Paragraph FontFamily="Pericles" Typography.DiscretionaryLigatures="True">
<Run Typography.StylisticAlternates="1">CO</Run>
<Run Typography.StylisticAlternates="1">LA</Run>
<Run Typography.StylisticAlternates="1">LE</Run>
<Run Typography.StylisticAlternates="1">LI</Run>
<Run Typography.StylisticAlternates="1">LL</Run>
<Run Typography.StylisticAlternates="1">LO</Run>
<Run Typography.StylisticAlternates="1">LU</Run>
</Paragraph>
默认情况下,Windows Presentation Foundation(WPF)中的 OpenType 字体启用标准连字。 例如,如果使用 Palatino Linotype 字体,则标准连字“fi”、“ff”和“fl”显示为组合字符字形。 请注意,每个标准连字的字符对相互接触。
但是,可以禁用标准连字功能,以便标准连字(如“ff”)显示为两个单独的字形,而不是组合字符字形。
的文本
以下标记示例演示如何使用对象的属性 Typography 禁用 Palatino Linotype 字体的标准连字字形。
<!-- Set standard ligatures to false in order to disable feature. -->
<Paragraph Typography.StandardLigatures="False" FontFamily="Palatino Linotype" FontSize="72">
fi ff fl
</Paragraph>
Swashes
花体是使用精美修饰的装饰性字形,通常与书法相关。 以下文本显示 Pescadero 字体的标准字形和花体字形。
Swashes 通常用于短短语(如事件公告)中的装饰元素。 以下文本使用大写的花体字来强调事件名称的大写字母。
以下标记示例演示如何使用对象的属性 Typography 为字体定义斜体。
<Paragraph FontFamily="Pescadero" TextBlock.TextAlignment="Center">
Wishing you a<LineBreak/>
<Run Typography.StandardSwashes="1" FontSize="36">Happy New Year!</Run>
</Paragraph>
上下文花饰字符
饰线字体的某些组合可能会导致视觉不佳,例如相邻字母的下行部件重叠。 使用上下文替换笔划可以让你使用替代的笔划字形,从而产生更好的外观。 以下文本在应用上下文花体前后显示相同的单词。
以下标记示例演示如何使用Typography对象的属性为Pescadero字体定义上下文花饰。
<Paragraph FontFamily="Pescadero" Typography.StandardSwashes="1">
Lyon <Run Typography.ContextualSwashes="1">L</Run>yon
</Paragraph>
候补
可替代标准字形的字形称为替代字形。 OpenType 字体(如以下示例中使用的 Pericles 字体)可以包含可用于为文本创建不同外观的备用字形。 以下文本显示 Pericles 字体的标准字形。
Pericles OpenType 字体包含其他字形,这些字形为标准字形集提供风格替代。 以下文本显示样式备用字形。
以下标记示例演示如何使用对象的属性 Typography 为 Pericles 字体定义风格备用字形。
<Paragraph FontFamily="Pericles">
<Run Typography.StylisticAlternates="1">A</Run>NCIENT
GR<Run Typography.StylisticAlternates="1">EE</Run>K
MYTH<Run Typography.StylisticAlternates="1">O</Run>LOGY
</Paragraph>
以下文本显示 Pericles 字体的几个其他风格备用字形。
以下标记示例演示如何定义这些其他风格备用字形。
<Paragraph FontFamily="Pericles">
<Run Typography.StylisticAlternates="1">A</Run>
<Run Typography.StylisticAlternates="2">A</Run>
<Run Typography.StylisticAlternates="3">A</Run>
<Run Typography.StylisticAlternates="1">C</Run>
<Run Typography.StylisticAlternates="1">E</Run>
<Run Typography.StylisticAlternates="1">G</Run>
<Run Typography.StylisticAlternates="1">O</Run>
<Run Typography.StylisticAlternates="1">Q</Run>
<Run Typography.StylisticAlternates="1">R</Run>
<Run Typography.StylisticAlternates="2">R</Run>
<Run Typography.StylisticAlternates="1">S</Run>
<Run Typography.StylisticAlternates="1">Y</Run>
</Paragraph>
随机文本替代字形
随机上下文备用为单个字符提供多个替换字形。 使用脚本类型字体实现时,此功能可以使用一组随机选择的字形来模拟手写,外观略有差异。 以下文本对 Lindsey 字体随机使用上下文备用样式。 请注意,字母“a”在外观上略有不同
以下标记示例演示如何使用对象的属性 Typography 为 Lindsey 字体定义随机上下文替代项。
<TextBlock FontFamily="Lindsey">
<Run Typography.ContextualAlternates="True">
a banana in a cabana
</Run>
</TextBlock>
历史形式
历史字体形式是过去常见的排版约定。 以下文本显示短语“波士顿,马萨诸塞州”,使用 Palatino Linotype 字体的历史字形形式。
以下标记示例展示如何使用 Typography 对象的属性为 Palatino Linotype 字体定义历史样式。
<Paragraph FontFamily="Palatino Linotype">
<Run Typography.HistoricalForms="True">Boston, Massachusetts</Run>
</Paragraph>
数值样式
OpenType 字体支持大量可与文本中的数值一起使用的功能。
分数
OpenType 字体支持分数的样式,包括斜杠和堆积。
以下文本显示 Palatino Linotype 字体的分数样式。
以下标记示例演示如何使用对象的属性定义 Palatino Linotype 字体的 Typography 分数样式。
<Paragraph FontFamily="Palatino Linotype" Typography.Fraction="Slashed">
1/8 1/4 3/8 1/2 5/8 3/4 7/8
</Paragraph>
<Paragraph FontFamily="Palatino Linotype" Typography.Fraction="Stacked">
1/8 1/4 3/8 1/2 5/8 3/4 7/8
</Paragraph>
旧样式数字
OpenType 字体支持旧样式数字格式。 此格式可用于在不再标准的样式中显示数字。 以下文本以标准格式和旧式数字格式显示 Palatino Linotype 字体的 18 世纪日期。
以下文本显示 Palatino Linotype 字体的标准数字,后跟旧样式数字。
的文本
以下标记示例演示如何使用对象的属性 Typography 为 Palatino Linotype 字体定义旧样式数字。
<Paragraph FontFamily="Palatino Linotype">
<Run Typography.NumeralStyle="Normal">1234567890</Run>
<Run Typography.NumeralStyle="OldStyle">1234567890</Run>
</Paragraph>
比例图和表格图
OpenType 字体支持比例和表格图功能,以在使用数字时控制宽度的对齐方式。 比例图将每个数字视为宽度不同,“1”比“5”窄。 表格数字被视为等宽数字,以便垂直对齐,从而提高财务类型信息的可读性。
以下文本在第一列中使用 Miramonte 字体显示两个成比例的数字。 请注意数字“5”和“1”之间的宽度差异。 第二列显示使用表格数字功能调整宽度的相同两个数值。
以下标记示例演示如何使用对象的属性 Typography 为 Miramonte 字体定义成比例和表格数字。
<TextBlock FontFamily="Miramonte">
<Run Typography.NumeralAlignment="Proportional">114,131</Run>
</TextBlock>
<TextBlock FontFamily="Miramonte">
<Run Typography.NumeralAlignment="Tabular">114,131</Run>
</TextBlock>
带斜杠的零
OpenType 字体支持斜杠零数字格式,以强调字母“O”和数字“0”之间的差异。 斜线零字符通常用于标识符在财务和商业信息中。
以下文本显示使用 Miramonte 字体的示例顺序标识符。 第一行使用标准数字。 第二行使用斜杠零数字来更好地与大写“O”字母形成对比。
以下标记示例演示如何使用对象的属性 Typography 为 Miramonte 字体定义斜杠零数字。
<Paragraph FontFamily="Miramonte">
<Run>Order #0048-OTC-390</Run>
<LineBreak/>
<Run Typography.SlashedZero="True">Order #0048-OTC-390</Run>
</Paragraph>
排版课程
该 Typography 对象公开 OpenType 字体支持的功能集。 通过设置标记中的属性 Typography ,可以轻松创作利用 OpenType 功能的文档。
以下文本显示 Pescadero 字体的标准大写字母,接着是样式为“SmallCaps”和“AllSmallCaps”的字母。 在这种情况下,所有三个单词都使用相同的字号。
以下标记示例演示如何使用对象的属性 Typography 为 Pescadero 字体定义大写。 使用“SmallCaps”格式时,将忽略任何前导大写字母。
<Paragraph FontFamily="Pescadero" FontSize="48">
<Run>CAPITALS</Run>
<Run Typography.Capitals="SmallCaps">Capitals</Run>
<Run Typography.Capitals="AllSmallCaps">Capitals</Run>
</Paragraph>
下面的代码示例完成与上一个标记示例相同的任务。
MyParagraph.FontFamily = new FontFamily("Pescadero");
MyParagraph.FontSize = 48;
Run run_1 = new Run("CAPITALS ");
MyParagraph.Inlines.Add(run_1);
Run run_2 = new Run("Capitals ");
run_2.Typography.Capitals = FontCapitals.SmallCaps;
MyParagraph.Inlines.Add(run_2);
Run run_3 = new Run("Capitals");
run_3.Typography.Capitals = FontCapitals.AllSmallCaps;
MyParagraph.Inlines.Add(run_3);
MyParagraph.Inlines.Add(new LineBreak());
MyParagraph.FontFamily = New FontFamily("Pescadero")
MyParagraph.FontSize = 48
Dim run_1 As New Run("CAPITALS ")
MyParagraph.Inlines.Add(run_1)
Dim run_2 As New Run("Capitals ")
run_2.Typography.Capitals = FontCapitals.SmallCaps
MyParagraph.Inlines.Add(run_2)
Dim run_3 As New Run("Capitals")
run_3.Typography.Capitals = FontCapitals.AllSmallCaps
MyParagraph.Inlines.Add(run_3)
MyParagraph.Inlines.Add(New LineBreak())
版式类属性
下表列出了对象的属性、值和默认设置 Typography 。