typst

class janim.items.svg.typst.TypstDoc(text: str, *, vars: dict[str, TypstVar] | None = None, vars_size_unit: Literal['pt', 'mm', 'cm', 'in'] | None = None, sys_inputs: dict[str, str] = {}, scale: float = 1.0, shared_preamble: str | None = None, additional_preamble: str | None = None, **kwargs)

基类:SVGItem

Typst 文档

group_key: str | None = 'data-typst-label'
move_into_position() None
static compile_typst(text: str, shared_preamble: str, additional_preamble: str, vars: str, sys_inputs: dict[str, str]) str

编译 Typst 文档

classmethod typstify(obj: TypstPattern) TypstDoc

将字符串变为 Typst 对象,而本身已经是的则直接返回

static vars_str(vars: dict[str, TypstVar], unit_or_scale: str | float) tuple[str, dict[str, Points]]
static var_str(var: TypstVar, label: str, unit_or_scale: str | float, mapping: dict[str, Points]) str
static length_str(length: float, unit_or_scale: str | float) str
get_label(name: str) Group[SVGElemItem]
match_pattern(target: TypstDoc, pattern: TypstPattern, ordinal: int = 0, target_ordinal: int | None = None) Self

配对并通过变换使得配对的部分重合

例如

t1 = TypstMath('x^2 + y^2')
t2 = TypstMath('x + y')
t2.points.match_pattern(t1, '+')

则会将 t2 进行变换使得二者的加号重合

get(slices, gapless: bool = False)

根据切片得到切分的子物件

在默认情况下,gapless=False

  • 表示通过给定的 slices 直接切取子物件,例如

    item.get(slice(1, 3)) == item[1:3]

  • 支持使用列表获取一批的子物件,例如

    item.get([slice(1, 3), slice(4, 7)]) == [item[1:3], item[4:7]]

  • 列表支持嵌套,并且结果保持原嵌套结构,例如

    item.get([slice(1, 3), [slice(4, 6), slice(10, 12)]]) == [item[1:3], [item[4:6], item[10:12]]]

gapless=True

  • 表示通过给定 slices 的所有起止位置将所有子物件切分并一起返回,例如

    item.get(slice(1, 3), gapless=True) == [item[:1], item[1:3], item[3:]]

  • 也支持列表以及嵌套的列表,例如

    item.get([slice(1, 3), slice(5, 7)]) == [item[:1], item[1:3], item[3:5], item[5:7], item[7:]]

  • 注:在这种情况下,所有嵌套结构都会先被展平后处理

slice(pattern: TypstPattern, ordinal: int) slice
slice(pattern: TypstPattern, ordinal: Iterable[int] | EllipsisType) list[slice]

得到指定 pattern 在该物件中形状配对的切片

  • 默认返回首个匹配的(即 ordinal=0

  • ordinal 传入其它索引可得到随后匹配的特定部分

  • ordinal 传入索引列表可得到多个匹配的特定部分

  • ordinal 传入省略号 ... 可以得到所有匹配的部分

indices(pattern: TypstPattern) list[int]

找出该公式中所有出现了 pattern 的位置

  • pattern 支持使用字符串或者 Typst 对象

lps_map: dict[str, list[int]] = {}
property lps: list[int]

KMP 算法涉及的部分匹配表

class janim.items.svg.typst.TypstText(text: str, *, shared_preamble: str | None = None, preamble: str | None = None, use_math_environment: bool = False, **kwargs)

基类:TypstDoc

Typst 文本

move_into_position() None
class janim.items.svg.typst.TypstMath(text: str, *, shared_preamble: str | None = None, preamble: str | None = None, use_math_environment: bool = True, **kwargs)

基类:TypstText

Typst 公式

相当于 TypstText 传入 use_math_environment=True

class janim.items.svg.typst.Typst(text: str, **kwargs)

基类:TypstMath

janim.items.svg.typst.get_typst_template() str