OpenType 字体功能

本主题概述了 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 字体的上标符号。

使用 OpenType 上标的文本

以下标记示例演示如何使用对象的属性 Typography 为 Palatino Linotype 字体定义上标。

<Paragraph FontFamily="Palatino Linotype">
  2<Run Typography.Variants="Superscript">3</Run>
  14<Run Typography.Variants="Superscript">th</Run>
</Paragraph>

以下文本显示 Palatino Linotype 字体的下标。

使用 OpenType 下标的文本

以下标记示例展示如何通过 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 字体的上标和下标文本。 请注意,大写字母不会受到影响。

使用 OpenType 上标和下标的文本

以下标记示例演示如何使用对象的属性 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”的字母。 在这种情况下,所有三个单词都使用相同的字号。

使用 OpenType 大写字母的文本

以下标记示例演示如何使用对象的属性 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 字体的普通大写字母和题字大写字母。 请注意第二行上文本的较窄的词干宽度。

使用 OpenType 标题大写字母的文本

以下标记语言示例演示如何使用 Typography 对象的属性定义 Pescadero 字体的标题大写字母。

<Paragraph FontFamily="Pescadero">
  <Run Typography.Capitals="Titling">chapter one</Run>
</Paragraph>

大写字母间距

大写间距是一项功能,允许在文本中使用所有大写时提供更多间距。 大写字母通常设计为与小写字母混合。 当所有字母都使用大写时,在大写字母和小写字母之间看起来合适的间距可能显得过紧。 以下文本显示 Pescadero 字体的正常和大写间距。

使用 OpenType 大写间距的文本

以下标记示例演示如何使用对象的属性 Typography 为 Pescadero 字体定义大写间距。

<Paragraph FontFamily="Pescadero">
  <Run Typography.CapitalSpacing="True">CHAPTER ONE</Run>
</Paragraph>

连字

连字是将两个或多个字形组合为单个字形,以创建更易读或更具吸引力的文本。 OpenType 字体支持四种类型的连字:

  • 标准连字。 旨在增强可读性。 标准连字包括“fi”、“fl”和“ff”。

  • 语境连字。 旨在通过提供构成连字的字符之间的更好的联接行为来提高可读性。

  • 选择性连字。 设计为观赏性,而不是专门为可读性而设计。

  • 历史连字。 具有历史风格,而不是专门为了可读性设计的。

以下文本显示 Pericles 字体的标准连字字形。

使用 OpenType 标准连字的文本

以下标记示例演示如何使用对象的属性 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 字体的任意连字字形。

使用 OpenType 自由连字的文本的文本

以下标记示例演示如何使用对象的属性 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”显示为组合字符字形。 请注意,每个标准连字的字符对相互接触。

使用 OpenType 标准连字的文本,字体为 Palatino Linotype

但是,可以禁用标准连字功能,以便标准连字(如“ff”)显示为两个单独的字形,而不是组合字符字形。

使用禁用的 OpenType 标准连字的文本的文本

以下标记示例演示如何使用对象的属性 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 字体的标准字形和花体字形。

使用 OpenType 标准和花体连字的文本

Swashes 通常用于短短语(如事件公告)中的装饰元素。 以下文本使用大写的花体字来强调事件名称的大写字母。

使用 OpenType 花饰字

以下标记示例演示如何使用对象的属性 Typography 为字体定义斜体。

<Paragraph FontFamily="Pescadero" TextBlock.TextAlignment="Center">
  Wishing you a<LineBreak/>
  <Run Typography.StandardSwashes="1" FontSize="36">Happy New Year!</Run>
</Paragraph>

上下文花饰字符

饰线字体的某些组合可能会导致视觉不佳,例如相邻字母的下行部件重叠。 使用上下文替换笔划可以让你使用替代的笔划字形,从而产生更好的外观。 以下文本在应用上下文花体前后显示相同的单词。

使用 OpenType 上下文花体装饰的文本

以下标记示例演示如何使用Typography对象的属性为Pescadero字体定义上下文花饰。

<Paragraph FontFamily="Pescadero" Typography.StandardSwashes="1">
  Lyon <Run Typography.ContextualSwashes="1">L</Run>yon
</Paragraph>

候补

可替代标准字形的字形称为替代字形。 OpenType 字体(如以下示例中使用的 Pericles 字体)可以包含可用于为文本创建不同外观的备用字形。 以下文本显示 Pericles 字体的标准字形。

使用 OpenType 标准字形的文本

Pericles OpenType 字体包含其他字形,这些字形为标准字形集提供风格替代。 以下文本显示样式备用字形。

使用 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 字体的几个其他风格备用字形。

使用 OpenType 样式替代字形的文本,应用于 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”在外观上略有不同

使用 OpenType 随机上下文替换的文本

以下标记示例演示如何使用对象的属性 Typography 为 Lindsey 字体定义随机上下文替代项。

<TextBlock FontFamily="Lindsey">
  <Run Typography.ContextualAlternates="True">
    a banana in a cabana
  </Run>
</TextBlock>

历史形式

历史字体形式是过去常见的排版约定。 以下文本显示短语“波士顿,马萨诸塞州”,使用 Palatino Linotype 字体的历史字形形式。

使用 OpenType 历史窗体的文本

以下标记示例展示如何使用 Typography 对象的属性为 Palatino Linotype 字体定义历史样式。

<Paragraph FontFamily="Palatino Linotype">
  <Run Typography.HistoricalForms="True">Boston, Massachusetts</Run>
</Paragraph>

数值样式

OpenType 字体支持大量可与文本中的数值一起使用的功能。

分数

OpenType 字体支持分数的样式,包括斜杠和堆积。

以下文本显示 Palatino Linotype 字体的分数样式。

使用 OpenType 斜杠和堆积分数的文本

以下标记示例演示如何使用对象的属性定义 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 世纪日期。

使用 OpenType 旧样式数字的文本

以下文本显示 Palatino Linotype 字体的标准数字,后跟旧样式数字。

使用 OpenType 旧样式数字集的文本使用 OpenType的文本

以下标记示例演示如何使用对象的属性 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”之间的宽度差异。 第二列显示使用表格数字功能调整宽度的相同两个数值。

使用 OpenType 成比例和表格图形的文本:

以下标记示例演示如何使用对象的属性 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”字母形成对比。

使用 OpenType 斜杠零数字的文本

以下标记示例演示如何使用对象的属性 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”的字母。 在这种情况下,所有三个单词都使用相同的字号。

使用 OpenType 大写字母的文本

以下标记示例演示如何使用对象的属性 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

资产 默认值
AnnotationAlternates 数值 - 字节 0
Capitals AllPetiteCaps | AllSmallCaps | Normal | PetiteCaps | SmallCaps | Titling | Unicase FontCapitals.Normal
CapitalSpacing Boolean false
CaseSensitiveForms Boolean false
ContextualAlternates Boolean true
ContextualLigatures Boolean true
ContextualSwashes 数值 - 字节 0
DiscretionaryLigatures Boolean false
EastAsianExpertForms Boolean false
EastAsianLanguage HojoKanji | Jis04 | Jis78 | Jis83 | Jis90 | NlcKanji | Normal | Simplified | Traditional | TraditionalNames FontEastAsianLanguage.Normal
EastAsianWidths Full | Half | Normal | Proportional | Quarter | Third FontEastAsianWidths.Normal
Fraction Normal | Slashed | Stacked FontFraction.Normal
HistoricalForms Boolean false
HistoricalLigatures Boolean false
Kerning Boolean true
MathematicalGreek Boolean false
NumeralAlignment Normal | Proportional | Tabular FontNumeralAlignment.Normal
NumeralStyle Boolean FontNumeralStyle.Normal
SlashedZero Boolean false
StandardLigatures Boolean true
StandardSwashes 数值 – 字节 0
StylisticAlternates 数值 – 字节 0
StylisticSet1 Boolean false
StylisticSet2 Boolean false
StylisticSet3 Boolean false
StylisticSet4 Boolean false
StylisticSet5 Boolean false
StylisticSet6 Boolean false
StylisticSet7 Boolean false
StylisticSet8 Boolean false
StylisticSet9 Boolean false
StylisticSet10 Boolean false
StylisticSet11 Boolean false
StylisticSet12 Boolean false
StylisticSet13 Boolean false
StylisticSet14 Boolean false
StylisticSet15 Boolean false
StylisticSet16 Boolean false
StylisticSet17 Boolean false
StylisticSet18 Boolean false
StylisticSet19 Boolean false
StylisticSet20 Boolean false
Variants Inferior | Normal | Ordinal | Ruby | Subscript | Superscript FontVariants.Normal

另请参阅