-
Notifications
You must be signed in to change notification settings - Fork 81
text_mobject 文字对象
XiaoYoung edited this page May 7, 2020
·
2 revisions
位于文件manimlib/mobject/svg/text_mobject.py
含有两个类
父类为SVGMobject
-
from manimlib.imports import * class Demo(Scene): def construct(self): text = Text('Hello, world!') self.play(Write(text))
-
-
text
:- 接收一个
str
,如'Hello, world!'
- 不支持LaTex语法
- 如果只有一行,字符串前后的空格会被忽略(指不会产生长度,但是这些空格会被计算,可以用下标访问)
-
\t
默认会被替换为4个空格,可以通过调整tab_width改变这一行为
- 接收一个
-
color
:- 接收一个
str
,如'#FFFFFF'
- 或者是定义在
constants.py
里的颜色常量,如BLUE
- Demo
-
text = Text('Hello', color=BLUE)
-
- 接收一个
-
t2c
:-
text2color
的缩写 - 接收一个
dict
,如{'text': color}
- 或者切片模式,如
{'[1:4]': color}
- Demo
-
text = Text('Hello, world!', t2c={'world':BLUE})
-
-
-
gradient
:- 接收一个
tuple
,如(BLUE, GREEN, '#FFFFFF')
- Demo
-
text = Text('Hello', gradient=(BLUE, GREEN))
-
- 接收一个
-
t2g
:-
text2gradient
的缩写 - 接收一个
dict
,如{'text': (BLUE, GREEN, '#FFFFFF')}
- 或者切片模式,如
{'[1:4]': (BLUE, GREEN, '#FFFFFF')}
- Demo
-
text = Text('Hello, world!', t2g={'world':(BLUE, GREEN)})
-
-
-
font
:- 接收一个
str
, 如'Source Han Sans'
,请确保字体名正确 - 不支持直接读取给定的字体文件路径,必须先将字体安装到系统中才能使用
- Demo
-
text = Text('Hello', font='Source Han Sans')
-
- 接收一个
-
t2f
:-
text2font
的缩写 - 接收一个
dict
,如{'text': 'Source Han Sans'}
- 或者切片模式,如
{'[1:4]': 'Source Han Sans'}
- Demo
-
text = Text('Hello, world!', t2f={'world':'Forte'})
-
-
-
slant
:- 斜体选项:
NORMAL
或者ITALIC
- 其实还有一个
OBLIQUE
,但是貌似效果跟ITALIC
一样 - Demo
-
text = Text('Hello', slant=ITALIC)
-
- 斜体选项:
-
t2s
:-
text2slant
的缩写 - 接收一个
dict
,如{'text': ITALIC}
- 或者切片模式,如
{'[1:4]': ITALIC}
- Demo
-
text = Text('Hello, world!', t2s={'world':ITALIC})
-
-
-
weight
:- 字重(粗细)选项:
NORMAL
或者BOLD
- 目前只支持调用
NORMAL
和BOLD
是因为底层的包不支持其它选项 - 如果想用Light、Condensed等选项可以在调用字体的时候声明,如
'Open Sans Light'
- 更多有关Light等选项的问题,可以参考: https://github.com/3b1b/manim/issues/884
- Demo
-
text = Text('Hello', weight=BOLD)
-
- 字重(粗细)选项:
-
t2w
:-
text2weight
的缩写 - 接收一个
dict
,如{'text': BOLD}
- 或者切片模式,如
{'[1:4]': BOLD}
- Demo
-
text = Text('Hello, world!', t2w={'world':BOLD})
-
-
-
size
:- 不建议使用
- 接收一个数且该数要大于0.1
- 不是线性的,因为
SVGMobject
的缩放逻辑有点迷 - 如果小于0.1可能会出现锯齿
- 目前与MUnit没有关联,所以玄学调参
- 如果需要精确控制大小,建议使用
.scale()
- Demo
-
text = Text('Hello', size=5)
-
-
lsh
:-
line_spacing_height
的缩写 - 不建议使用
- 默认与
size
相等 - 非线性(存疑)
- 与MUnit没有关联
- Demo
-
text = Text('Hello\nWorld', lsh=1.5)
-
-
- 其它:
- 还有一些从
Mobject
继承来的参数也可以使用 - 如:
fill_color
、fill_opacity
、stroke_color
、stroke_width
- 还有一些从
-
-
- Mobjcet:
-
color
: 默认为WHITE
-
heigth
: 默认为None
-
- Text:
-
font
: 默认为''
-
gradient
: 默认为None
-
lsh
: 默认为-1
-
size
: 默认为1
-
slant
: 默认为NORMAL
-
weight
: 默认为NORMAL
-
t2c
: 默认为{}
-
t2f
: 默认为{}
-
t2g
: 默认为{}
-
t2s
: 默认为{}
-
t2w
: 默认为{}
-
tab_width
: 默认为4
-
- Mobjcet:
-
- Mobject:
-
set_color(self, color)
:text.set_color(BLUE)
text[7:12].set_color(BLUE)
-
set_color_by_gradient(self, gradient)
:text.set_color_by_gradient(BLUE, GREEN)
text[7:12].set_color_by_gradient(BLUE, GREEN)
-
- Text:
-
set_color_by_t2c(self, t2c)
:text.set_color_by_t2c({'world':BLUE})
-
set_color_by_t2g(self, t2g)
:text.set_color_by_t2g({'world':(BLUE, GREEN)})
-
- Mobject:
-
- 切片模式:
text = Text( 'Google', t2c={ '[:1]':'#3174f0', '[1:2]':'#e53125', '[2:3]':'#fbb003', '[3:4]':'#3174f0', '[4:5]':'#269a43', '[5:]':'#e53125', } )
- UTF-8:
from manimlib.imports import * script = ''' Hello 你好 こんにちは 안녕하세요 ''' class Demo(Scene): def construct(self): text = Text(script, font='Source Han Sans') self.play(Write(text))
- 目前对GBK(中日韩)文字的支持没有太大问题
- 但是对于其它文字,如印度语、阿拉伯语的显示有很大问题
临时类,只是用来传递一下参数,方便底层实现,下个版本应该会消失