Manim中支持渲染两种格式的文本:
- 普通文本: Text, MarkupText
- 数学公式: Tex, MathTex
使用方式都类似, 这篇主要演示一下渲染普通文本. 功能列在下面, 然后直接用一个示例搞定.
- 渲染文本
- 使用MarkupText, 类似于Html
- 设置字体
- 倾斜字体
- 设置字体粗细
- 使用参数t2c精确控制一段文字中的字符颜色
- 设置文本渐变色
- 设置行间距
- 迭代文本中的字符
示例代码
class TextDemo(Scene):
def construct(self):
# 渲染文本
text1 = Text("差不多冬至 一早一晚还是有雨", font_size=30).to_edge(UP, buff=-2.5)
self.add(text1)
# 使用MarkupText
text2 = MarkupText(f'当初的<span fgcolor="{YELLOW}">坚持</span>现已令你很怀疑', color=RED).next_to(self.mobjects[-1], DOWN)
self.add(text2)
# 指定字体
text3 = Text("很怀疑 你最尾等到 只有这枯枝", font="YouYuan").next_to(self.mobjects[-1], DOWN)
self.add(text3)
# 倾斜字体 slant可选值: NORMAL, ITALIC, OBLIQUE
text4 = Text("苦恋几多次悉心栽种 全力灌注", slant=ITALIC).next_to(self.mobjects[-1], DOWN)
self.add(text4)
# 字体粗细
text5 = Text("所得竟不如别个后辈 收成时", weight=THIN).next_to(self.mobjects[-1], DOWN)
self.add(text5)
text6 = Text("这一次 你真的很介意", weight=ULTRAHEAVY).next_to(self.mobjects[-1], DOWN)
self.add(text6)
# 参数t2c 两种写法
# 第一种 使用下标
text7 = Text('但见旁人谈情何引诱', t2c={'[1:-1]': BLUE}).next_to(self.mobjects[-1], DOWN)
self.add(text7)
# 第二种 使用包含的字符串
text8 = Text('问到何时葡萄先熟透', t2c={'葡萄': RED}).next_to(self.mobjects[-1], DOWN)
self.add(text8)
# 使用渐变色 两种写法
# 第一种 参数gradient, 颜色可以写多个值
# v0.19.0版本貌似有bug? 有中文时有时渐变会失效
text9 = Text("你要静候 再静候", gradient=(RED, BLUE, GREEN)).next_to(self.mobjects[-1], DOWN)
self.add(text9)
# 第二种 使用参数t2g, 这种方式和t2c类似, 也有两种写法: 下标和指定字符串
text10 = Text('就算失收始终要守', t2g={'[1:-1]': (RED, GREEN)}).next_to(self.mobjects[-1], DOWN)
self.add(text10)
text11 = Text('日后 尽量别教今天的泪白流', t2g={'尽量别教': (RED, BLUE)}).next_to(self.mobjects[-1], DOWN)
self.add(text11)
# 行间距
text12 = Text("留低击伤你的石头\n从错误里吸收", line_spacing=3).next_to(self.mobjects[-1], DOWN)
self.add(text12)
# 迭代文本
text13 = Text("也许 丰收月份尚未到你也得接受").next_to(self.mobjects[-1], DOWN)
for letter in text13:
letter.set_color(random_bright_color())
self.add(text13)
效果如下:
查看系统所有字体
import manimpango
print(manimpango.list_fonts())
查看所有字体粗细
import manimpango
weight_list = sorted(manimpango.Weight, key=lambda t: t.value)
for weight in weight_list:
print(f"{weight.name}: {weight.value}")
打印:
THIN: 100
ULTRALIGHT: 200
LIGHT: 300
BOOK: 380
NORMAL: 400
MEDIUM: 500
SEMIBOLD: 600
BOLD: 700
ULTRABOLD: 800
HEAVY: 900
ULTRAHEAVY: 1000
最后给我的公众号打个广告😁: 算法铁金库. 定期更新编程技术, 谢谢关注!