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

Manim中如何精准高亮代码行?高亮边界偏移问题求解

问题分析与解决方案

代码存在的问题

  1. SurroundingRectangle默认padding导致超出边界
    SurroundingRectangle默认带有0.1的padding值,会在代码行四周生成额外空间,使得矩形视觉上超出代码行的实际边界。第一行因为内容较长,padding的影响不明显,而短行的padding会让矩形显得明显过宽。

  2. ReplacementTransform使用错误
    直接对sliding_wins中的元素执行ReplacementTransform会销毁源元素,导致后续循环中无法再次访问该元素进行动画操作,最终会出现动画异常。

  3. 代码字符串格式不规范
    原代码字符串的缩进不统一,且可能存在隐性的行尾空白,导致Code组件生成的Text对象包含多余空白区域,进一步放大了矩形超出的问题。

修复方案

  1. 消除SurroundingRectangle的padding
    创建矩形时显式设置padding=0,让矩形紧密贴合代码行的实际边界。

  2. 正确使用ReplacementTransform
    使用源矩形的副本执行变换操作,保留原元素以便后续循环复用。

  3. 规范代码字符串格式
    统一缩进,移除行尾空白,确保每一行的Text对象仅包含必要的代码内容。

修改后的完整代码

from manim import *

class CodeTrackingAnimation(Scene):
    def construct(self):
        # 规范格式的代码字符串,统一缩进、无行尾空白
        code_str = '''#include<iostream>
using namespace std;
int main(){
    int sum = 0;
    for(int i=0;i<n;i++){
        sum += i;
    }
    return 0;
}'''
        code = self.build_code_block(code_str)
        # 初始高亮第一行
        self.play(self.sliding_wins[0].animate.set_opacity(0.3))
        # 逐行切换高亮
        for i in range(len(code.code)-1):
            self.highlight(i, i+1)
    
    def build_code_block(self, code_str):
        code = Code(code=code_str, language='C++', background="window")
        self.add(code)
        self.sliding_wins = VGroup()
        for line in code.code:
            # 设置padding=0,让矩形精准包围代码行
            rect = SurroundingRectangle(line, padding=0)
            rect.set_fill(YELLOW, opacity=0)
            self.sliding_wins.add(rect)
        self.add(self.sliding_wins)
        return code

    def highlight(self, prev_line, line):
        # 淡出上一行高亮
        self.play(self.sliding_wins[prev_line].animate.set_opacity(0))
        # 使用副本执行变换,避免销毁原元素
        self.play(ReplacementTransform(
            self.sliding_wins[prev_line].copy(), 
            self.sliding_wins[line]
        ))
        # 淡入当前行高亮
        self.play(self.sliding_wins[line].animate.set_opacity(0.3))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:32:17