Share via


OpenType 字型功能

本主題提供 Windows Presentation Foundation (WPF) 中 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 規格

進階的印刷樣式延伸模組

進階印刷樣式表格 (OpenType Layout tables) 會使用 TrueType 或 CFF 外框來擴充字型的功能。 OpenType 版面配置字型包含其他資訊,可擴充字型的功能,以支援高質量的國際印刷樣式。 大部分的OpenType字型只會公開可用的OpenType功能總數子集。 OpenType 字型提供下列功能。

  • 字元與字符之間的豐富對應,支援連音符號、位置形式、替代項目,以及其他字型替代項目。

  • 支援二維定位與字符附件。

  • 字型中包含明確的指令碼和語言資訊,因此文字處理應用程式可據以調整其行為。

OpenType 版面配置數據表會在 OpenType 規格的一節中詳細說明。

本概觀的其餘部分介紹物件屬性 Typography 所公開的一些視覺有趣 OpenType 功能廣度和彈性。 如需此物件的詳細資訊,請參閱印刷樣式類別

變體

用來轉譯不同印刷樣式的變數,例如上標和下標。

上標和下標

屬性 Variants 可讓您設定 OpenType 字型的上標和下標值。

下列文字顯示上標 Palatino Linotype 字型。

Text using OpenType superscripts

下列標記範例示範如何使用 對象的屬性,定義PalatinoLinotype字型的 Typography 上標。

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

下列文字顯示下標 Palatino Linotype 字型。

Text using OpenType subscripts

下列標記範例示範如何使用 對象的屬性來定義PalatinoLinotype字型的 Typography 下標。

<Paragraph FontFamily="Palatino Linotype">
  H<Run Typography.Variants="Subscript">2</Run>O
  Footnote<Run Typography.Variants="Subscript">4</Run>
</Paragraph>

上標和下標的裝飾性用途

您也可以使用上標和下標建立混合大小寫文字的裝飾效果。 下列文字顯示 Palatino Linotype 字型的上下標文字。 請注意,大寫字不受影響。

Text using OpenType superscripts and subscripts

下列標記範例示範如何使用 對象的屬性,定義字型的 Typography 上標和下標。

<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Superscript">
  Chapter One
</Paragraph>
<Paragraph FontFamily="Palatino Linotype" Typography.Variants="Subscript">
  Chapter One
</Paragraph>

大寫字

大寫字是一組以大寫樣式字符轉譯文字的印刷格式。 一般而言,當文字全部轉譯為大寫時,字母之間的間距可能太近,字母的加權和比例會過重。 OpenType 支援數種大寫樣式格式,包括小大寫、小大寫、Titling 和大寫間距。 這些樣式格式可讓您控制大寫字的外觀。

下列文字顯示 Pescadero 字型的標準大寫字母,後面接著樣式設定為 "SmallCaps" 和 "AllSmallCaps" 的字母。 在此情況下,三個單字全都使用相同的字型大小。

Text using OpenType capitals

下列標記範例示範如何使用 對象的屬性,定義 Pescadero 字型的 Typography 大寫。 使用 "SmallCaps" 格式時會略過任何開頭的大寫字母。

<Paragraph FontFamily="Pescadero" FontSize="48">
  <Run>CAPITALS</Run>
  <Run Typography.Capitals="SmallCaps">Capitals</Run>
  <Run Typography.Capitals="AllSmallCaps">Capitals</Run>
</Paragraph>

標題大寫字

標題大寫字的加權和比例較輕,設計目的是為了比正常大寫字母看起來更雅緻。 標題大寫字通常用於較大的字型大小作為標題。 下列文字顯示 Pescadero 字型的正常和標題大寫字。 請注意第二行文字較窄的主體寬度。

Text using OpenType titling capitals

下列標記範例示範如何使用 對象的屬性,定義 Pescadero 字型的 Typography Titling 大寫字母。

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

大寫字母間距

大寫字母間距功能可讓您在全部使用大寫字的文字中,提供更多的間距。 大寫字母通常會設計為與小寫字母混合在一起。 大寫字母和小寫字母間看起來很不錯的間距,在全部使用大寫字母時會看起來很擠。 下列文字顯示 Pescadero 字型的正常和大寫字間距。

Text using OpenType capital spacing

下列標記範例示範如何使用 對象的屬性,定義 Pescadero 字型的 Typography 大寫間距。

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

連音符號

連音符號是兩個或以上的字符,形成單一字符以建立更清晰或更美觀的文字。 OpenType 字型支援四種類型的連字:

  • 標準連音符號。 設計目的旨在增進可讀性。 標準連音符號包括 "fi"、"fl" 和 "ff"。

  • 內容連音符號。 設計目的旨在提供組成連音符號的字元間更好的聯結行為,以提升可讀性。

  • Discretionary 連音符號。 設計成裝飾之用,並不是特別針對可讀性設計。

  • 過往連音符號。 設計成記錄之用,並不是特別針對可讀性所設計。

下列文字顯示 Pericles 字型的標準連音符號字符。

Text using OpenType standard ligatures

下列標記範例示範如何使用 對象的屬性 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 字型 Discretionary 連音符號。

Text using OpenType discretionary ligatures

下列標記範例示範如何使用 對象的屬性,定義 Pericles 字型的 Typography 任意韌體圖像。

<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" 會顯示為合併的字元字符。 請注意,每個標準連音符號的成對字元都彼此相鄰。

Text using OpenType standard ligatures with Palatino Linotype

不過,您可以停用標準連音符號功能,讓 "ff" 等標準連音符號顯示為兩個分開的字符,而不是合併的字元字符。

Text using disabled OpenType standard ligatures

下列標記範例示範如何使用 對象的屬性 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 字型的標準和花飾字字符。

Text using OpenType standard and swash glyphs

花飾字通常用為簡短片語中的裝飾項目,例如事件宣告。 下列文字使用花飾字強調大寫字母的事件名稱。

Text using OpenType swashes

下列標記範例示範如何使用 對象的屬性 Typography 來定義字型的斜體。

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

內容花飾字

某些花飾字字符的組合會導致不討喜的外觀,例如相鄰字母的伸尾部分重疊。 使用內容花飾字可讓您使用會產生更佳外觀的替代花飾字字符。 下列文字顯示套用內容花飾字之前和之後的相同字組。

Text using OpenType contextual swashes

下列標記範例會示範如何使用 對象的屬性 Typography ,定義 Pescadero 字型的內容式洗刷。

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

替代項目

替代項目是可以取代標準字符的字符。 OpenType 字型,例如下列範例中使用的 Pericles 字型,可以包含可用來為文字建立不同外觀的替代字元。 下列文字顯示 Pericles 字型的標準字符。

Text using OpenType standard glyphs

Pericles OpenType 字型包含額外的字元,可提供標準字元集的文體替代字型。 下列文字顯示文體替代字符。

Text using OpenType stylistic alternate glyphs

下列標記範例示範如何使用 對象的屬性 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 字型的其他文體替代字符。

Text using OpenType stylistic alternate glyphs for the Pericles font

下列標記範例示範如何定義這些其他文體替代字符。

<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" 的外觀略有不同。

Text using OpenType random contextual alternates

下列標記範例示範如何使用 對象的屬性,定義 Lindsey 字型的 Typography 隨機內容替代專案。

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

古體形式

古體形式是過去常用的印刷樣式慣例。 下列文字使用 Palatino Linotype 字型的古體形式字符顯示 "Boston, Massachusetts" 片語。

Text using OpenType historical forms

下列標記範例示範如何使用 對象的屬性,定義PalatinoLinotype字型的歷史 Typography 表單。

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

數字的樣式

OpenType 字型支援大量可搭配文字中數值使用的功能。

分數

OpenType 字型支援分數的樣式,包括斜線和堆棧。

下列文字顯示 Palatino Linotype 字型的分數樣式。

Text using OpenType slashed and stacked fractions

下列標記範例示範如何使用 對象的屬性,定義PalatinoLinotype字型的 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 世紀的日期。

Text using OpenType old style numerals

下列文字顯示 Palatino Linotype 字型的標準數字,後面接著舊樣式數字的數字。

Text using OpenType old style numeral sets

下列標記範例示範如何使用 對象的屬性,定義PalatinoLinotype字型的 Typography 舊樣式數位。

<Paragraph FontFamily="Palatino Linotype">
  <Run Typography.NumeralStyle="Normal">1234567890</Run>
  <Run Typography.NumeralStyle="OldStyle">1234567890</Run>
</Paragraph>

調和間距與表格式數字

OpenType 字型支援比例和表格式圖功能,以在使用數位時控制寬度的對齊方式。 調和間距數字會將每一個數字視為具有不同的寬度,"1" 比 "5" 窄。 表格式數字則視為等寬數字,以便垂直對齊,可提高財務類資訊的可讀性。

下列文字在第一個資料行中顯示使用 Miramonte 字型的兩個調和間距數字。 請注意數字 "5" 和 "1" 之間的寬度差異。 第二個資料行顯示相同的兩個數值,使用表格式數字功能調整其寬度。

Text using OpenType proportional & tabular figures

下列標記範例示範如何使用 對象的屬性 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" 的對比。

Text using OpenType slashed zero numerals

下列標記範例示範如何使用 對象的屬性 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" 的字母。 在此情況下,三個單字全都使用相同的字型大小。

Text using OpenType capitals

下列標記範例示範如何使用 對象的屬性,定義 Pescadero 字型的 Typography 大寫。 使用 "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

另請參閱