
Manim v0.15.1 版本详解TransformMatchingTex 分组支持、渲染流程修复与 LaTeX/Jupyter 关键 Bug 修复【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manimManimMathematical Animation是一个社区维护的、用于创建数学动画的 Python 框架。v0.15.1 是发布于 2022 年 3 月 8 日的一个 bugfix 版本共合并了 9 个 Pull Request核心内容包括为TransformMatchingTex增加 Group 支持、修复引入式动画introducer animations的渲染流程问题、修复None颜色类型、修复含%字符的 TeX 字符串渲染以及修复 Jupyter Notebook 中config.media_embed为False时图片无法显示的问题。读完本文你将理解这些修复背后的源码机制并掌握在 v0.15.1 及后续版本中正确使用相关 API 的实战方法。版本概况与贡献者v0.15.1 于 2022 年 3 月 8 日发布是一个典型的补丁版本bugfix release共合并了 9 个 Pull Request。本次发布共有 9 人参与贡献其中带标记的是首次为项目提交补丁的贡献者包括 Benjamin Hackl、Nicolai Weitkemper、Yuchen、ad_chaos补丁评审由 Alex Lembcke、Darylgolden、Naveen M K、Raghav Goel、icedcoffeeee 等社区成员完成。从变更类型分布看本次发布的重心非常明确4 项 Bug 修复Fixed bugs占据了绝对主体另含 1 项增强Enhancements、2 项文档相关改动和 2 项代码质量改进。这与官方 changelog 中:pr:引用一一对应详见 0.15.1-changelog.rst。核心增强TransformMatchingTex 支持 GroupPR #2602本次版本最重要的功能增强是让TransformMatchingTex能够处理Group类型的 mobject。在此之前TransformMatchingTex只能直接作用于单个 TeX mobject如MathTex无法将一组对象例如几个独立的公式组合成的VGroup/Group作为变换的起点或终点。源码层面的实现从当前仓库源码 transform_matching_parts.py 可以清晰看到这一能力的具体实现。TransformMatchingTex继承自TransformMatchingAbstractBase该基类在__init__中会根据 mobject 的类型选择不同的容器OpenGLVMobject→OpenGLVGroupOpenGLMobject→OpenGLGroupVMobject→VGroup其他类型 →Group随后通过get_shape_map将 mobject 拆分为“子对象 → key”的映射再对 key 集合求交集与差集分别执行变换Transform、淡入淡出FadeOut/FadeIn或通过key_map强制配对。关键改动位于get_mobject_parts静态方法transform_matching_parts.py当传入的 mobject 是Group、VGroup、OpenGLGroup或OpenGLVGroup时会递归遍历所有submobjects并收集每一个叶子 TeX 子对象的submobjects即单个MathTexPart否则要求 mobject 具有tex_string属性。而get_mobject_key则直接返回MathTexPart.tex_string即两个子对象只要 TeX 源字符串相同就会被匹配并互相变换。实战用法组与公式的互相变换官方 docstring 中给出了一个典型示例将三个独立的变量a、b、c组成的VGroup与一个完整公式进行变换。核心代码如下from manim import * class MatchingEquationParts(Scene): def construct(self): variables VGroup(MathTex(a), MathTex(b), MathTex(c)).arrange_submobjects().shift(UP) eq1 MathTex({{x}}^2, , {{y}}^2, , {{z}}^2) eq2 MathTex({{a}}^2, , {{b}}^2, , {{c}}^2) eq3 MathTex({{a}}^2, , {{c}}^2, -, {{b}}^2) self.add(eq1) self.wait(0.5) self.play(TransformMatchingTex(Group(eq1, variables), eq2)) self.wait(0.5) self.play(TransformMatchingTex(eq2, eq3)) self.wait(0.5)注意这里Group(eq1, variables)将公式与变量组再次打包成一个 Group这正是 v0.15.1 新增能力发挥作用的场景。由于匹配基于tex_stringx、y、z会分别平滑地“变身”为a、b、c而、、^2等相同部分保持不变呈现出行云流水的公式变形效果。匹配规则与不匹配部分的行为TransformMatchingAbstractBasetransform_matching_parts.py提供了三个关键参数来控制匹配行为transform_mismatches默认为False。若为Truekey 不匹配的子对象之间改用Transform直接变换此时自动设置replace_mobject_with_target_in_sceneTrue。fade_transform_mismatches默认为False。若为True不匹配部分使用FadeTransformPieces变换。key_map可选字典用于手动指定“源 key → 目标 key”的强制配对即使两个子对象的 key 不同也会被变换。当上述两个布尔参数均为False时源对象中无匹配的部分朝目标对象中不匹配部分的方向淡出FadeOut目标对象中新增的无匹配部分则从对应方向淡入FadeIn。另一个值得注意的细节是clean_up_from_scenetransform_matching_parts.py会把所有内部动画插值回 0以保证源 mobject 在动画结束后保持不变。同类动画TransformMatchingShapestransform_matching_parts.py则基于几何形状匹配子对象经过“平移到原点、归一化高度为 1、坐标四舍五入到 3 位小数”后取点坐标哈希作为 key常用于字母重排类动画。渲染流程修复引入式动画PR #2594v0.15.1 修复了引入式动画introducer animations的渲染流程问题。所谓引入式动画是指用于将 mobject“带入场内”的动画例如Create、Write、DrawBorderThenFill、ShowIncreasingSubsets等。从 creation.py 源码可以看出Create、Uncreate、Write、Unwrite等动画类在构造时都会接收一个introducer布尔参数如 creation.py 中super().__init__(mobject, lag_ratiolag_ratio, introducerintroducer, **kwargs)并在ShowPartialcreation.py的体系内实现逐段展示。v0.15.1 修复的正是这些动画在某些组合/嵌套场景下例如动画组中先执行引入式动画、后续动画依赖其输出的渲染顺序与状态同步问题确保动画的引入阶段与后续阶段衔接正确。这类问题通常表现为画面闪烁、mobject 提前/延后出现等修复后动画组的整体渲染流程更加稳定。颜色系统修复非法颜色类型 NonePR #2584本次发布修复了传入None作为颜色类型时抛出的异常。在 manim 的颜色体系中ParsableManimColor表示可解析的颜色类型而None是一个特殊的合法取值——例如在 core.py 中可以看到默认None被解释为BLACK的说明以及ManimColor.__init__中对value is None的特殊处理分支。修复前某些代码路径把None直接当作颜色值解析导致类型断言或转换失败修复后None会在ManimColor内部被一致地映射为默认黑色同时color_to_rgb、color_to_rgba、color_to_int_rgb、color_to_int_rgba等工具函数core.py在处理边界输入时也更加健壮。相关类型提示也在 PR #2578 中得到修正见下文“代码质量改进”。TeX 渲染修复包含 % 字符的字符串PR #2587TeX 中%是注释字符任何出现在%之后的文本都会被编译器忽略因此当用户渲染包含%的字符串例如“50% of the time”时LaTeX 编译会产生错误输出或直接失败。PR #2587 修复了这一问题使得包含%的 TeX 字符串能够被正确渲染。从 tex.py 的TexTemplate实现可以看到manim 的 TeX 模板将表达式替换到placeholder_text位置tex.py并通过body属性拼装完整的 documenttex.py。修复后写入 TeX 文件的表达式会对%等特殊字符进行转义处理避免其被 LaTeX 误判为注释符。该修复覆盖Tex、MathTex、TexTemplate相关的全部渲染路径涉及 tex.py 与 tex_file_writing.py 两个模块。如果你需要在文本中展示百分比修复后可以直接书写50\%或由 manim 自动处理。Jupyter 修复media_embedFalse 时图片无法显示PR #2593manim 的 IPython 魔术命令%%manim允许在 Notebook 中直接渲染并展示动画。其行为由config.media_embed控制为True时视频以 Base64 内嵌方式写入 Notebook为False时则以外部文件引用方式展示。v0.15.1 修复了当media_embedFalse时图片无法显示的问题。配置项说明media_embed定义在 default.cfg 的[jupyter]配置段中默认值为False同时还有media_width默认60%%注意配置文件中需写为%%以转义百分号用于控制嵌入媒体的显示宽度。在 Python 代码中可通过config.media_embed True或config.media_embed False动态设置对应 utils.py 中的属性 setter内部调用_set_boolean保证类型安全。底层展示逻辑在 ipython_magic.py 中可以看到修复涉及的展示逻辑embed config[media_embed] if not embed: # videos need to be embedded when running in google colab. # do this automatically in case config.media_embed has not been # set explicitly. embed google.colab in str(get_ipython()) if file_type.startswith(image): result Image(filenameoutput_file) else: result Video( tmpfile, html_attributesfcontrols autoplay loop stylemax-width: {config[media_width]};, embedembed, )修复要点有两个其一当media_embed未被显式设置时若运行环境是 Google Colab则自动降级为内嵌模式因为 Colab 无法直接引用本地媒体文件其二修复了图片Image分支在非内嵌模式下因文件名/路径处理不当而无法显示的问题。这一逻辑同样适用于视频保证了 Notebook 与 Colab 两种环境下的稳定输出。文档与代码质量改进本次发布还包含两项文档相关改动与一项类型修复PR #2570重构了 coordinate_systems.py 模块的 docstring使其与 autosummary 生成的 API 文档见 reference_index保持一致。PR #2603减少了文档构建期间的警告数量提升 conf.py 驱动的 Sphinx 构建体验。PR #2578修正了 text_mobject.py 中Text.color属性的错误类型提示与 PR #2584 的颜色系统修复形成配套确保类型标注与实际行为一致。升级与验证建议对于正在使用 v0.15.0 及更早版本的用户升级到 v0.15.1 的收益主要是稳定性的提升公式变形场景如果你在场景中频繁使用TransformMatchingTex并且起点/终点是多个公式组合成的Group或VGroup升级后可直接传入组合对象无需手动拆解。含百分号的文本涉及Tex/MathTex渲染百分比、取模等含%内容时升级后不再需要手工转义。Jupyter/Colab 工作流使用%%manim魔术命令的用户应确认config.media_embed的设置符合预期非 Colab 环境下建议保持默认False以获得更小的 Notebook 体积。颜色边界输入若代码中存在colorNone的边界情况升级后会被稳定解释为黑色。本仓库当前的 完整 changelog 记录了从 v0.1.0 到 v0.21.0 的全部版本变更v0.15.1 之后的版本在此基础上持续演进相关源码与测试用例如 tests/module/animation/test_transform.py可作为进一步研究TransformMatchingTex等动画行为的参考。【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考