添加示例

这是为文档添加示例的页面。在发布示例之前,您应该遵循以下一些准则。

示例准则

欢迎所有人为文档贡献示例。由于直观的示例是快速学习 Manim 的宝贵资源,因此这里有一些准则。

优秀示例的特质

注意

Manim 新版本发布后,文档将是该版本的一个快照。发布后贡献的示例将只显示在最新文档中。

  • 示例应能直接复制粘贴使用。

  • 示例应简洁但易于理解。

  • 示例不需要 from manim import * 语句,文档构建时会自动添加此语句。

  • 动画和非动画示例之间应保持平衡。

  • 由于 Manim 制作动画,我们可以包含大量动画示例;然而,我们的 RTD(Read the Docs)构建时间最长为 20 分钟。动画示例只应在必要时使用,因为最后一帧示例渲染速度更快。

  • 许多示例(例如绘图轴的大小、设置不透明度、制作文本等)也可以作为图片。立即看到最终产品比等待动画展示它方便得多。

  • 请确保您贡献的示例在当前的 main 分支上能够运行。

  • 如果使用的函数令人困惑,请务必在示例中添加注释来解释其功能。

示例的组织结构

  • 示例可以组织成章节和子章节。

  • 创建示例时,起始示例章节应只关注一个功能。当功能简单时,可以在一个示例下阐述多个概念。

  • 简单功能解释清楚后,该章节可以包含更多基于简单概念的复杂示例。

编写示例

当您想添加/编辑示例时,它们可以在 docs/source/ 目录中找到,或直接在 Manim 源代码中找到(例如 manim/mobject/mobject.py)。示例以 rst 格式编写,并使用 Manim 指令(参见 manim.utils.docbuild.manim_directive ),即 .. manim::。每个示例都在自己的块中,看起来像这样:

Formulas
========

.. manim:: Formula1
    :save_last_frame:

    class Formula1(Scene):
        def construct(self):
            t = MathTex(r"\int_a^b f'(x) dx = f(b) - f(a)")
            self.add(t)
            self.wait(1)

在文档的构建过程中,所有 rst 文件都会被扫描,并且 Manim 指令(.. manim::)块会被识别为将由当前 Manim 版本运行的场景。语法如下:

  • .. manim:: [SCENE_NAME] 没有缩进,并且 SCENE_NAME 指的是下方类的名称。

  • 标志紧随其后(此处无空行!),缩进级别为一个制表符。

所有可能的标志都可以在 manim.utils.docbuild.manim_directive 中找到。

在上面的示例中,紧跟在 .. manim:: 后面的 Formula1 是指令期望渲染的场景;因此,在 Python 代码中,该类的名称相同:class Formula1(Scene)

注意

有时,当您在浏览器中重新加载示例时,它的缓存中可能仍然存在旧的网站内容。如果是这种情况,请清除网站缓存,或在浏览器中打开新的无痕模式标签页,然后应该会显示最新的文档。仅适用于本地构建的文档:如果这仍然不起作用,您可能需要在重新构建文档之前删除 docs/source/references 的内容。