首页 > 解决方案 > 我可以覆盖 Tex 的 Manim 颜色默认值并直接使用 xcolor 吗?

问题描述

我正在试验Manim数学演示(又名:youtube 3b1b)python 系统,发现颜色控制非常棘手。这是一个例子:


class color1(Scene):
    def construct(self):

        eq1 = MathTex( r'&{\left(\vec{u} \cdot \vec{v} \right)}^2 \\',
                       '&(', r'\vec{u}', r'\cdot', r'\vec{v}', r'){}^2 \\' )
        eq1.set_color_by_tex_to_color_map( { "{u}": RED, "{v}": YELLOW } )

        eq2 = MathTex( r'&{\color{blue}{\left(\vec{u} \cdot \vec{v} \right)}^2} \\' )

        for item in eq1:
           self.play( Write( item ) )

        eq2.shift( 2 * DOWN )
        for item in eq2:
           self.play( Write( item ) )

        self.wait( )

产生如下输出:

颜色示例manim

规则匹配整个字符串,所以如果你有两个想要匹配的东西(如 \vec{u} 和 \vec{v}),你不能将它们都放在一个字符串中,而是看起来必须将您的方程式线分成一组单独的字符串,以便颜色匹配规则起作用。此外,如果我将一条方程线分解为许多不同的 MathTex 参数以分别为它们着色,那么 self.play 中的渲染真的很慢(也许这可以解决。)

我希望我可以只使用 xcolor 语法来设置颜色,但这似乎被 Manim 的默认颜色所覆盖(即,该库默认情况下不使用黑色,而是使用白色,所以我假设它优先。)查看上面示例中的第三行,看看 xcolor {color{...}...} 是如何工作的。

有没有办法避免在 Manim 乳胶文本中设置默认颜色,以便 xcolor 标记在该上下文中起作用?

如果这是不可能的,当一个方程被分解成许多块进行着色时,有没有办法处理 self.play 的真正缓慢渲染?

编辑:想出了一个解决单独颜色项目的慢速播放问题的解决方法。这似乎是由于使用了 play(Write(...)),而像这样的东西没有这些延迟:

        eq3 = MathTex( '(', r'\vec{u}', r'\cdot', r'\vec{v}', r'){}^2' )
        eq3.set_color_by_tex_to_color_map( { "{u}": RED, "{v}": YELLOW } )
       
        for item in eq3:
           self.add( item )

标签: colorslatexmanim

解决方案


推荐阅读