跳转至

文本排版与数学式

段落与测量

layout_paragraph(library, paragraph) → TextLayout

处理每个片段的字形,在合法的 Unicode 断行位置换行,并返回不可变的 TextLayout。library.layout(paragraph) 会把字体库当成第一个参数来调用它。

TextMeasurement(
    advance,
    logical_bounds,
    ink_bounds,
    baselines,
    horizontal_overflow,
    vertical_overflow,
)

汇整排版结果的逻辑范围与墨迹范围、基线、行数与溢出,不绘制任何东西。layout.measure() 会返回这样一份。

LineLayout(
    runs,
    baseline,
    advance,
    logical_bounds,
    ink_bounds,
    horizontal_overflow=0.0,
    source_range=None,
    explicitly_terminated=False,
    reading_order=(),
)

排好的一行,包含字形组、基线、字幅、范围、原文范围,以及这一行是否在明确的换行处结束。

TextStyle 带着字族、字级、字重、斜体、语言、方向、间距与 OpenType 功能。一个段落可以混用多种样式与文本系统。设置 max_width 会在 Unicode 断行位置换行 {Unicode Consortium} (2026);不设置则排成不受限制的一行。一行如何组成,见行的组成与间距。

结构化数学式

from glyphkit import FontLibrary, FontSource
from glyphkit.math import MathStyle, parse_math

library = FontLibrary.from_sources((FontSource.path("fonts/STIXTwoMath-Regular.otf"),))
formula = parse_math(r"U(x_1, x_2) = x_1^\alpha x_2^{1-\alpha}")
box = library.layout_math(formula, style=MathStyle(18, ("STIX Two Math",)))
print(box.bounds)

parse_math(source, *, max_length=100000, max_depth=256, max_matrix_cells=10000) → MathNode

类 LaTeX 的原始文本。

max_lengthint默认值: 100000

输入长度上限,以码位计。

max_depthint默认值: 256

群组嵌套深度上限。

max_matrix_cellsint默认值: 10000

矩阵保存格数量上限。

把一套明确定义、类 LaTeX 的语法解析成由符号、上下标、分数、根号、括号、矩阵、重音符号与上下限组成的树。语法列在数学语法。

FontLibrary.layout_math(expression, *, style) → MathBox
expressionMathNode

parse_math 返回的树。

styleMathStyle

大小、数学字体与覆写值。

用 style.families 里第一个字体的 OpenType MATH 常数排出算式。这个字体必须有 MATH 表。

MathStyle(
    size,
    families,
    level='display',
    script_scale=None,
    script_script_scale=None,
    constants=...,
    letter_slant='normal',
)
sizefloat

整个算式的大小,使用排版单位。

familiestuple[str, ...]

先放数学字体字族,再放后备字族。第一个必须有 OpenType MATH 表。

levelstr默认值: "display"

"display"、"text"、"script" 或 "scriptscript"。

script_scalefloat | None默认值: None

取代 ScriptPercentScaleDown,为 (0, 1] 的比例。

script_script_scalefloat | None默认值: None

取代 ScriptScriptPercentScaleDown。

constantsMapping[str, float]默认值: ...

以名称覆写其他 MATH 常数,单位为 em。

letter_slantstr默认值: "normal"

用字族的斜体或倾斜字体绘制字母符号。

控制数学字族、大小、上下标层级、字母的倾斜、上下标缩放比例,以及 OpenType MATH 常数的覆写值。

MathBox(
    kind,
    bounds,
    baseline,
    text_layout=None,
    children=(),
    rules=(),
    origin=(0.0, 0.0),
    source_range=None,
    glyph_id=None,
)

排好的树的一个节点。它有 kind、范围、基线、每个子节点相对于父节点的 origin、放在 text_layout 里的字形排版,以及可绘制的 rules。

这是一套明确定义的类 LaTeX 子集,不是 TeX 解释器。与字体相关的常数与字形变体来自 OpenType MATH 表 {Microsoft} (2025)。MathStyle 可以覆写上下标缩放比例、具名的数学常数与字母使用的倾斜,这对 MATH 表不完整的字体很有用。

以 OpenType MATH 度量与精确字形轮廓排出的 Cobb–Douglas 效用函数。虚线方框是方框树中的上下标节点。

以 OpenType MATH 度量与精确字形轮廓排出的 Cobb–Douglas 效用函数。虚线方框是方框树中的上下标节点。

绘图端只要走访这棵树:把每个子节点的原点加到父节点的位置上,用字形轮廓画出每个 text_layout,并把每条 rule 画成从 start 到 end、粗细为 thickness 的线。画出上图的脚本就是这样做的,大约四十行。

评论