Skip to content

text_mobject 文字对象

XiaoYoung edited this page May 7, 2020 · 2 revisions

位于文件manimlib/mobject/svg/text_mobject.py

含有两个类

Text

父类为SVGMobject

  • Demo

    from manimlib.imports import *
    
    class Demo(Scene):
        def construct(self):
            text = Text('Hello, world!')
            self.play(Write(text))
            
    

    introduction

  • 参数

    • text:
      • 接收一个str,如'Hello, world!'
      • 不支持LaTex语法
      • 如果只有一行,字符串前后的空格会被忽略(指不会产生长度,但是这些空格会被计算,可以用下标访问)
      • \t默认会被替换为4个空格,可以通过调整tab_width改变这一行为
    • color:
      • 接收一个str,如'#FFFFFF'
      • 或者是定义在constants.py里的颜色常量,如BLUE
      • Demo
        • text = Text('Hello', color=BLUE) color
    • t2c:
      • text2color的缩写
      • 接收一个dict,如{'text': color}
      • 或者切片模式,如{'[1:4]': color}
      • Demo
        • text = Text('Hello, world!', t2c={'world':BLUE}) t2c
    • gradient:
      • 接收一个tuple,如(BLUE, GREEN, '#FFFFFF')
      • Demo
        • text = Text('Hello', gradient=(BLUE, GREEN)) gradient
    • t2g:
      • text2gradient的缩写
      • 接收一个dict,如{'text': (BLUE, GREEN, '#FFFFFF')}
      • 或者切片模式,如{'[1:4]': (BLUE, GREEN, '#FFFFFF')}
      • Demo
        • text = Text('Hello, world!', t2g={'world':(BLUE, GREEN)}) t2g
    • font:
      • 接收一个str, 如'Source Han Sans',请确保字体名正确
      • 不支持直接读取给定的字体文件路径,必须先将字体安装到系统中才能使用
      • Demo
        • text = Text('Hello', font='Source Han Sans') font
    • t2f:
      • text2font的缩写
      • 接收一个dict,如{'text': 'Source Han Sans'}
      • 或者切片模式,如{'[1:4]': 'Source Han Sans'}
      • Demo
        • text = Text('Hello, world!', t2f={'world':'Forte'}) t2f
    • slant:
      • 斜体选项: NORMAL或者ITALIC
      • 其实还有一个OBLIQUE,但是貌似效果跟ITALIC一样
      • Demo
        • text = Text('Hello', slant=ITALIC) slant
    • t2s:
      • text2slant的缩写
      • 接收一个dict,如{'text': ITALIC}
      • 或者切片模式,如{'[1:4]': ITALIC}
      • Demo
        • text = Text('Hello, world!', t2s={'world':ITALIC}) t2s
    • weight:
      • 字重(粗细)选项: NORMAL或者BOLD
      • 目前只支持调用NORMALBOLD是因为底层的包不支持其它选项
      • 如果想用Light、Condensed等选项可以在调用字体的时候声明,如'Open Sans Light'
      • 更多有关Light等选项的问题,可以参考: https://github.com/3b1b/manim/issues/884
      • Demo
        • text = Text('Hello', weight=BOLD) weight
    • t2w:
      • text2weight的缩写
      • 接收一个dict,如{'text': BOLD}
      • 或者切片模式,如{'[1:4]': BOLD}
      • Demo
        • text = Text('Hello, world!', t2w={'world':BOLD}) t2w
    • size:
      • 不建议使用
      • 接收一个数且该数要大于0.1
      • 不是线性的,因为SVGMobject的缩放逻辑有点迷
      • 如果小于0.1可能会出现锯齿
      • 目前与MUnit没有关联,所以玄学调参
      • 如果需要精确控制大小,建议使用.scale()
      • Demo
        • text = Text('Hello', size=5) size
    • lsh:
      • line_spacing_height的缩写
      • 不建议使用
      • 默认与size相等
      • 非线性(存疑)
      • 与MUnit没有关联
      • Demo
        • text = Text('Hello\nWorld', lsh=1.5) lsh
    • 其它:
      • 还有一些从Mobject继承来的参数也可以使用
      • 如: fill_colorfill_opacitystroke_colorstroke_width
  • CONFIG中属性

    • 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
  • 方法

    • 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)})
  • 其它

    • 切片模式:
    text = Text(
        'Google', 
        t2c={
            '[:1]':'#3174f0', '[1:2]':'#e53125', 
            '[2:3]':'#fbb003', '[3:4]':'#3174f0', 
            '[4:5]':'#269a43', '[5:]':'#e53125',
        }
    )
    
    

    accurate_mode

    • 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))
    
    

    utf-8

    • 目前对GBK(中日韩)文字的支持没有太大问题
    • 但是对于其它文字,如印度语、阿拉伯语的显示有很大问题

TextSetting

临时类,只是用来传递一下参数,方便底层实现,下个版本应该会消失