跳轉到

字型與字形處理

配對與後備字體

FontQuery(families, weight=400, width=100, slant='normal', axes=())

描述字型配對時偏好的字族、字重、字寬、斜體與可變字型座標。

FontMatch(face, coordinates=(), diagnostics=())

記錄一次查詢的結果,包括選到的字型面與最後採用的可變字型座標。

FontFace(
    id,
    family,
    subfamily,
    full_name,
    postscript_name,
    weight,
    width,
    slant,
    metrics,
    coverage,
    axes,
    embedding,
    has_math,
    names,
    _data,
)

一個可用字型面的快照,包含穩定識別、名稱、度量、字元涵蓋範圍與字型表。

from glyphkit import FontLibrary, FontSource, Paragraph, TextSpan, TextStyle

library = FontLibrary.from_sources(
    (
        FontSource.path("fonts/SourceSans3-Regular.ttf"),
        FontSource.path("fonts/NotoSansTC-Regular.otf"),
    ),
    generic_families={"sans-serif": ("Source Sans 3", "Noto Sans TC")},
)
layout = library.layout(
    Paragraph((TextSpan("效用 U(x)", TextStyle(("sans-serif",), 18)),))
)

範例使用 Google Fonts 提供的開源字型 Source Sans 3 與 Noto Sans TC;數學式章節則使用採開放授權的 STIX Two Math。

字型識別來自字型內容的 SHA-256 摘要與字型集合索引,不看檔名。FontManifest 記錄重現排版所需的來源與字型。字形選取、定位與可變字型資料採用 OpenType 規格定義的結構 {Microsoft} (2025)。

Unicode 字形處理

ShapingStyle(
    families,
    size,
    weight=400,
    width=100,
    slant='normal',
    axes=(),
    features=(),
    letter_spacing=0.0,
    word_spacing=0.0,
)

字形處理時採用的書寫系統、方向、語言、OpenType 功能與間距選項。

GlyphRun(
    face_id,
    family,
    size,
    direction,
    script,
    language,
    source_range,
    text,
    glyphs,
    diagnostics=(),
    variation_coordinates=(),
    bidi_level=0,
)

共用同一字型面與處理條件的一段視覺順序字形,並保留原文範圍。

PositionedGlyph(
    face_id,
    glyph_id,
    cluster,
    x,
    y,
    x_advance,
    y_advance,
    x_offset,
    y_offset,
    ink_bounds=None,
    variation_coordinates=(),
)

一個字形編號及其字元叢集、字幅、位移與字型面識別。

shape_text(library, text, style, *, language=None, script=None, direction=None) → tuple[GlyphRun, ...]

依明確的後備規則處理 Unicode 文字,回傳不綁定繪圖端的字形編號與位置。

左右方向混排時,即使視覺順序經過重排,原文範圍仍維持邏輯順序;這裡採用 Unicode 雙向演算法對邏輯順序與視覺順序的區分 {Unicode Consortium} (2026)。找不到字形時會拋出 MissingGlyphError;GlyphKit 不會偷偷換成未設定的系統字體。

系統字體

discover_system_fonts(provider=None) → FontManifest

主動搜尋作業系統已安裝的字型。需要可重現的建置時,請優先傳入明確的檔案或位元組,並保存字型清單。

留言