OpenType 字体功能

本主题概述了 Windows Presentation Foundation (WPF) 中的 OpenType 字体技术的一些关键功能。

本主题包括下列各节。

  • OpenType 字体格式
  • 变量
  • 大写字母
  • 连字
  • 花体
  • 备用项
  • 数字样式
  • 版式类
  • 相关主题

OpenType 字体格式

OpenType 字体格式是 TrueType® 字体格式的扩展,添加了对 PostScript 字体数据的支持。 OpenType 字体格式由 Microsoft 和 Adobe Corporation 共同开发. OpenType 字体和支持 OpenType 字体的操作系统服务为用户提供了一种简单方法来安装和使用字体,无论字体包含 TrueType 轮廓还是 CFF (PostScript) 轮廓。

OpenType 字体格式可解决以下开发人员挑战:

  • 更广泛的多平台支持。

  • 更好地支持国际字符集。

  • 更好地保护字体数据。

  • 更小的文件大小,以便使字体分发效率更高。

  • 对高级版式控制提供更广泛的支持。

注意注意

Windows SDK 包含一组 OpenType 字体示例,您可以在 Windows Presentation Foundation (WPF) 应用程序中使用这些字体。这些字体提供了本主题其余部分中描述的大多数功能。有关更多信息,请参见示例 OpenType 字体包

有关 OpenType 字体格式的详细信息,请参见 OpenType Specification(OpenType 规范)。

高级版式扩展

高级版式表格(OpenType 布局表格)扩展具有 TrueType 或 CFF 轮廓的字体功能。 OpenType 布局字体包含扩展字体的功能以支持高质量国际版式的其他信息。 大多数 OpenType 字体都只公开全部可用 OpenType 功能的一部分。 OpenType 字体提供以下功能。

  • 支持连字、定位格式、备用项和其他字体替换的字符与标志符号之间的丰富映射。

  • 对二维定位和标志符号附加的支持。

  • 字体中包含显式脚本和语言信息,这样文本处理应用程序可以相应调整其行为。

OpenType 规范的“Font File Tables”(“字体文件表格”)部分中更详细地描述了 OpenType 布局表格。

本概述的其余部分介绍了 Typography 对象的属性公开的一些悦目 OpenType 功能的范围和灵活性。 有关此对象的更多信息,请参见版式类。

变量

变量用于呈现不同的版式样式,例如上标和下标。

上标和下标

使用 Variants 属性可以为 OpenType 字体设置上标和下标值。

下面的文本显示了 Palatino Linotype 字体的上标。

使用 OpenType 上标的文本

使用 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 下标的文本

使用 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 上标和下标的文本

使用 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 大写字母的文本

使用 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 标题大写字母的文本

使用 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 标准连字的文本

使用 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 自由连字的文本

使用 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 标准连字的文本

使用 OpenType 标准连字的文本

但是,您可以禁用标准连字功能,使诸如“ff”的标准连字显示为两个单独的标志符号,而不是一个组合字符标志符号。

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

使用禁用的 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>

花体

花体是使用精美修饰艺术的标志符号,通常与书法关联。 下面的文本显示了 Pescadero 字体的标准标志符号和花体标志符号。

使用 OpenType 标准标志符号和 OpenType 花体标志符号的文本

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

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

使用 OpenType 花体的文本

使用 OpenType 花体的文本

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

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

上下文花体

花体标志符号的某些组合可能会导致外观不够美观,如相邻字母的重叠下伸。 使用上下文花体让您可以使用能生成外观更美观的替代花体标志符号。 下面的文本显示了相同的单词在应用上下文花体前后的效果。

使用 OpenType 上下文花体的文本

使用 OpenType 连接形式花体的文本

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

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

备用项

备用项是可以替换标准标志符号的标志符号。 OpenType 字体(如下面的示例中使用的 Pericles 字体)可以包含可用于创建不同文本外观的备用标志符号。 下面的文本显示了 Pericles 字体的标准标志符号。

使用 OpenType 标准标志符号的文本

使用 OpenType 标准标志符号的文本

Pericles OpenType 字体包含其他标志符号,这些标志符号为标准的标志符号集提供样式备用项。 下面的文本显示了备用样式标志符号。

使用备用 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 样式标志符号的文本

使用 OpenType 样式备用标志符号的文本

下面的标记示例演示如何定义这些其他备用样式标志符号。

<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 随机上下文备用项的文本

使用 OpenType 随机备用连接形式的文本

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

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

历史记录格式

历史记录格式在过去是常用的版式约定。 以下文本使用 Palatino Linotype 字体标志符号的历史记录格式显示了短语“Boston, Massachusetts”。

使用 OpenType 历史记录格式的文本

使用 OpenType 历史形式的文本

下面的标记示例演示如何使用 Typography 对象的属性定义 Palatino Linotype 字体的历史记录格式。

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

数字样式

OpenType 字体支持大量可用于文本的数值的功能。

分数

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

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

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

使用 OpenType 横式分数和竖式分数的文本

下面的标记示例演示如何使用 Typography 对象的属性定义 Palatino Linotype 字体的分数样式。

<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 旧样式数字的文本

使用 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 比例和表格数字的功能

使用 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 斜杠零数字的文本

使用 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 大写字母的文本

使用 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

            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())
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());

版式类属性

下表列出了 Typography 对象的属性、值和默认设置。

Property

默认值

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

请参见

参考

Typography

概念

WPF 中的版式

示例 OpenType 字体包

将字体与应用程序一起打包

其他资源

OpenType Specification