MarkupText¶
MarkupText 与 Text 共用 Pango 渲染管线,但输入是 Pango 标记语言(类似 HTML 的标签文本):你可以在字符串里直接写 <span>、<b>、<i>、<sub> 等标签,实现富文本排版,而不必事后按索引逐个改色。
MarkupText¶
MarkupText(text, fill_opacity=1, stroke_width=0, color=None, font_size=48, line_spacing=-1, font='', slant='NORMAL', weight='NORMAL', justify=False, gradient=None, tab_width=4, height=None, width=None, should_center=True, disable_ligatures=False, warn_missing_font=True, **kwargs) 官方文档 ↗
MarkupText 用于渲染带 Pango 标记的富文本;标记标签在排版时生效,最终仍转成 SVG 矢量图形。
MarkupText(
text: str,
fill_opacity: float = 1,
stroke_width: float = 0,
color: ParsableManimColor | None = None,
font_size: float = 48,
line_spacing: float = -1,
font: str = "",
slant: str = "NORMAL",
weight: str = "NORMAL",
justify: bool = False,
gradient: Iterable[ParsableManimColor] | None = None,
tab_width: int = 4,
height: int | None = None,
width: int | None = None,
should_center: bool = True,
disable_ligatures: bool = False,
warn_missing_font: bool = True,
)
name |
type |
default |
desc |
|---|---|---|---|
|
str |
— |
含 Pango 标记的文本 |
|
bool |
False |
是否两端对齐(仅多行有效) |
|
float |
48 |
基础字号,可被标签内 |
|
str |
"NORMAL" |
同 |
|
Iterable[color] | None |
None |
整体渐变填充 |
|
bool |
False |
禁用连字 |
注意:MarkupText 没有 t2c/t2f/t2g/t2s/t2w 参数——颜色、字体等效果都通过标记标签实现。
常用标签¶
标签 |
作用 |
示例 |
|---|---|---|
|
粗体 / 斜体 / 下划线 |
|
|
下标 / 上标 |
|
|
文字颜色(十六进制) |
|
|
背景色 |
|
|
字号( |
|
|
字体 |
|
|
基线升降(替代 sub/sup) |
|
|
删除线 |
|
<span> 的 foreground/size 控制标题颜色与字号;<sup>/<sub> 直接排出上下标;<b>/<i> 是粗斜体的简写。
查看源码 markup_text_demo.py
"""MarkupTextDemo: Pango 标记语言的常用标签。"""
from manim import *
class MarkupTextDemo(Scene):
def construct(self):
title = MarkupText('<span foreground="#FFFF00" size="x-large">Pango 标记语言</span>')
body = MarkupText(
'上下标:x<sup>2</sup> + y<sub>i</sub>,<b>粗体</b> 与 <i>斜体</i>',
font_size=32,
)
body.next_to(title, DOWN, buff=0.6)
self.play(FadeIn(title))
self.play(FadeIn(body, shift=UP))
self.wait(0.5)
与 Text 的对比¶
Text |
MarkupText |
|
|---|---|---|
语法 |
纯文本 |
Pango 标记 |
局部着色 |
|
标签内联 |
上标/下标 |
不支持 |
|
嵌套不同字体 |
|
|
颜色值格式 |
Manim 颜色对象 |
十六进制字符串 |
性能 |
略快(无标记解析) |
略慢 |
适用场景 |
程序化批量改色 |
富文本、混排排版 |
常见错误
Pango 标记是 XML:文本里的 &、<、> 必须转义为 &、<、>,否则排版直接报错。颜色属性只认十六进制字符串(如 "#58C4DD"),不要传 RED 之类的 Manim 颜色常量。
提示
标签里引号用单引号更方便在 Python 字符串中书写:用双引号包裹 Python 字符串、单引号包裹属性值。MarkupText 的子对象结构与 Text 一致,连字、disable_ligatures 的行为也完全相同。
自测¶
✏️ 练习
写出渲染 速度 v = 2 m/s,平方 v²(其中 2 为下标、² 用上标)的 MarkupText 调用。
✅ 参考答案
MarkupText('速度 v<sub>2</sub> = 2 m/s,平方 v<sup>2</sup>')
注意属性值不需要引号问题——标签整体在 Python 字符串内,标签属性用双引号。
✏️ 练习
想在 MarkupText 里显示 a < b,直接写会怎样?正确写法?
✅ 参考答案
< 会被当成标签起始符导致 Pango 解析失败。正确写法是转义:MarkupText("a < b"),& 与 > 同理写成 &、>。
下一步¶
纯文本与富文本解决了“写字”,数学公式则交给基于 LaTeX 的 Tex 与 MathTex。