跳轉到

文字排版

KineticKit 場景裡的文字是中性的 TextAsset:已定位的字形路徑、度量與選用的字型資料。KineticKit 自己沒有字型載入器。排版交給隨它一起安裝的 GlyphKit,用你提供的字型完成。

接上 GlyphKit

from glyphkit import FontLibrary, FontSource
from kinetickit import Animation, Bounds2D, Scene2D, Text2D, Vec2
from kinetickit.integrations.glyphkit import GlyphKitTypography

library = FontLibrary.from_sources((FontSource.path("fonts/SourceSans3-Regular.ttf"),))
typography = GlyphKitTypography(library, families=(library.faces[0].family,), size=48)

title = Text2D(
    id="title",
    asset=typography.asset("Marginal utility"),
    position=Vec2(0.4, 0.6),
    scale=0.022,
    color="#000000",
)
scene = Scene2D(title)
scene = scene.bind({scene.camera.ref("view"): Bounds2D(Vec2(0, 0), Vec2(10, 4))})
motion = title.animate.position.to(Vec2(1.4, 2.8), duration=1.5)
Animation(scene, motion).save("text.svg", width=480, height=192)

呼叫端提供的字型經 GlyphKit 取得輪廓,再由 KineticKit 移動。

呼叫端提供的字型經 GlyphKit 取得輪廓,再由 KineticKit 移動。

GlyphKitTypography(
    engine,
    *,
    families,
    size=14.0,
    weight=400,
    slant='normal',
    max_width=None,
    embed=True,
    embedding_use=...,
    allow_unknown=False,
)
engineTypographyEngine

排版引擎:GlyphKit 的 FontLibrary。

familiesSequence[str]

依後備順序排列的字族。每個都要在字型庫裡。

sizefloat預設值: 14.0

字級,使用素材自己的單位;用 Text2D 的縮放配合場景。

weightint預設值: 400

字重,從 100 到 900。

slantstr預設值: "normal"

"normal"、"italic" 或 "oblique"。

max_widthfloat | None預設值: None

在此寬度換行。None 則只排成一行。

embedbool預設值: True

把通過權限檢查的字型子集嵌入素材。

embedding_useEmbeddingUse預設值: EmbeddingUse.WEB

權限檢查所對應的宣告用途。

allow_unknownbool預設值: False

接受嵌入權限不明的字型,並記錄這個決定。

設定好的轉接器。asset(text) 回傳 TextAsset,layout(text) 回傳 GlyphKit 的 TextLayout,math(latex) 回傳算式的素材。

text_asset_from_layout(
    engine,
    layout,
    *,
    embed=True,
    embedding_use=...,
    container=...,
    allow_unknown=False,
) → TextAsset

把你已經有的 GlyphKit TextLayout 轉成已定位的路徑、度量與選用的可攜式字型資料。

text_asset_from_math(
    engine,
    latex,
    *,
    families,
    size,
    level='display',
    embed=True,
    embedding_use=...,
    allow_unknown=False,
) → TextAsset

把 GlyphKit 的數學排版結果(含字形與橫線)轉成文字素材。算式語法由 GlyphKit 定義(參見數學語法)。

素材沿用 GlyphKit 的單位:y 軸向上,第一條基線在 y = 0,單位與 size 相同。這就是上面的 Text2D 要用很小的 scale 的原因:size=48 讓字形約 30 個單位高,而場景只有 10 個單位寬。

各種輸出怎麼處理文字

輸出 文字
SVG 字形路徑;embed=True 時另以 @font-face 嵌入通過權限檢查的字型子集
HTML 透過內嵌的 SVG
GIF 畫進像素

只有在 GlyphKit 的權限檢查允許宣告的 embedding_use(預設是 EmbeddingUse.WEB)時,才會嵌入字型。受限的字型會被拒絕;權限不明的字型也會被拒絕,除非你傳入 allow_unknown=True,而這個決定會被記錄下來。

安裝 KineticKit 會一併安裝相容的 GlyphKit。KineticKit 核心的匯入保持延遲載入:只有 kinetickit.integrations.glyphkit 會匯入 GlyphKit,GlyphKit 也絕不匯入 KineticKit。需要文字的輔助線(例如座標軸)在沒有排版引擎時會拋出 TypographyUnavailableError,不會自己猜一個字型。

留言