You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manim问题:句子单词位置重叠导致方块无法正常在单词间移动

问题原因

你遇到的核心问题是**Text组件会把整个句子作为单一文本块处理**,代码里的quote[i]获取的是句子里的单个字符而非单词,所以蓝色标记点都挤在一块,方块自然只能在小范围内移动。

解决方案

用Tex组件替代Text,将句子拆分为独立的单词参数传入,这样每个单词会成为Tex对象的独立子元素,索引就能对应到单个单词。同时用\\quad控制单词间的间距,确保单词位置分散开。

修改后的完整代码
from manim import *

class QuoteScene(Scene):
    def construct(self):
        # 用Tex拆分单词,\\quad添加单词间距
        quote = Tex("Imagination", "\\quad", "is", "\\quad", "more", "\\quad", "important", "\\quad", "than", "\\quad", "knowledge.", font_size=24)
        quote.to_edge(UP)

        # 创建正方形
        square = Square(color=RED)
        square.set_width(0.5)

        # 修正单词索引:原句共6个单词,索引对应0-5
        word_indices = [0, 5, 4, 3, 1, 2, 0]

        # 播放句子写入动画
        self.play(Write(quote), run_time=2)

        # 调试:标记每个目标单词的中心位置
        for i in word_indices:
            dot = Dot(color=BLUE).move_to(quote[i].get_center())
            self.add(dot)

        # 将方块移动到第一个单词位置
        first_word = quote[word_indices[0]]
        square.move_to(first_word.get_center())
        self.add(square)

        # 动画方块在单词间移动
        for word_idx in word_indices:
            word = quote[word_idx]
            self.play(square.animate.move_to(word.get_center()), run_time=1, rate_func=linear)

        self.wait(3)
关键修改说明
  • 替换Text为Tex:Tex支持传入多个字符串参数,每个参数对应一个独立的可索引子元素
  • 用\\quad设置单词间距:确保单词之间有足够空间,避免重叠
  • 修正word_indices:原句共6个单词,索引范围是0到5,去掉原代码中越界的6,调整为合理的单词顺序

内容的提问来源于stack exchange,提问作者user14384765

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:01:15