Multiple slides#

Deal with more slides.#

[1]:
from manim_presenter import *

config.media_embed = True
config.media_width = "100%"

_RV = "-v WARNING -qm --progress_bar None --disable_caching Example"
_RI = "-v WARNING -s --progress_bar None --disable_caching Example"

config.disable_caching = True
Manim Community v0.17.3

[2]:
%cat ./scripts/slides01.txt
<== p01
Dui ultricies volutpat at tristique amet lacus vivamus, in tempus orci pellentesque, dui euismod sit suscipit, viverra pulvinar nulla dui.
==>

<== p02
Tellus consectetur tortor, elementum amet ut dolor eu est nibh varius enim, ut felis tristique efficitur lectus vestibulum eu et ultrices nascetur consectetur praesent non eu non dictum sem.
==>

<== p03
Magna purus ac fermentum eleifend vitae nullam eros, molestie justo rutrum, eleifend ex tortor quis porttitor id aliquet nullam habitasse pharetra ligula posuere.
==>


<== p04
Velit libero nibh vel praesent arcu congue nullam massa enim est risus nulla ante nullam, velit metus nullam faucibus ac efficitur diam leo.
==>
[3]:
jt = lambda mob: JustifyText(mob, tex_width=8)

SLIDES = [
  # SLIDES 1
  {
    "slide": "s01",
    "arrange": [lambda mob: mob.arrange(DOWN, buff=1)],
    "elements" : [
      {
        "name": "p01",
        "type": jt,
      },{
        "name": "p02",
        "type": jt,
      }
    ],
  },
  # SLIDES 2
  {
    "slide": "s02",
    "arrange": [lambda mob: mob.arrange(DOWN, buff=1)],
    "elements" : [
      {
        "name": "p03",
        "type": jt,
      },{
        "name": "p04",
        "type": jt,
      }
    ],
  },
]
[4]:
class Example(Presentation):
  file = "slides01.txt"
  slides = SLIDES
  preview_slide = "s01"

%manim $_RI
_images/CHP2_4_0.png
[5]:
class Example(Presentation):
  file = "slides01.txt"
  slides = SLIDES
  preview_slide = "s02" # <- Change preview

%manim $_RI
_images/CHP2_5_0.png

Basic animations#

[6]:
class Example(Presentation):
  file = "slides01.txt"
  slides = [
    {
      "class": VGroup,
      "create_same_time": Write,
      "pause": 3,
      "remove_same_time": FadeOut,
      **SLIDES[0]
    }
  ]
  preview_anims = ["s01"] # <-

%manim $_RV

AnimWrapper#

[7]:
class Example(Presentation):
  file = "slides01.txt"
  slides = [
    {
      "class": VGroup,
      "create_same_time": Write,
      "pause": 3,
      "remove_same_time": FadeOut,
      **SLIDES[0]
    },{ # --- New slide
      "class": VGroup,
      "create_same_time": AnimWrapper(FadeIn, scale=2, run_time=2.5),
      "pause": 2,
      "remove_same_time": AnimWrapper(FadeOut, scale=2),
      **SLIDES[1]
    }
  ]
  preview_anims = ["s02"] # <-

%manim $_RV

Warning

In create_same_time and remove_same_time the elements are saved within a Group, so it only supports animations that support Groups.

[8]:
class Example(Presentation):
  file   = "slides01.txt"
  slides = [
    {
      "class": VGroup,
      "create_same_time": Write,
      "pause": 2,
      "remove_same_time": FadeOut,
      "pause_between_slides": 0.1, # <- Pause after "remove_same_time"
      **SLIDES[0]
    },{ # --- New slide
      "class": VGroup,
      "create_same_time": AnimWrapper(FadeIn, shift=UP, run_time=2.5),
      "pause": 2,
      "remove_same_time": AnimWrapper(FadeOut, scale=2),
      **SLIDES[1]
    }
  ]
  preview_anims = ["s01", "s02"] # <-

%manim $_RV

Warning

For the create_same_time animation you can change Group to another using class.

[9]:
class Example(Presentation):
  file = "_02.txt"

  slides = [
    {
      "slide": "s01",
      "class": Group, # <- Be careful
      "create_same_time": FadeIn, # <- No Write because there are a ImageMobject
      "pause": 1,
      "remove_same_time": FadeOut,
      "arrange": [lambda mob: mob.arrange(DOWN, buff=1)],
      "elements" : [
        {
          "name": "image01",
          "type": lambda mob: ImageMobject(mob).set(height=3),
        },{
          "name": "code01",
          "type": lambda mob: Code(code=mob, language="python"),
        },
      ],
    },
  ]

%manim $_RV

Warning

You cannot change the Group of remove_same_time, only create_same_time with the class key.

[10]:
class Example(Presentation):
  file = "_01.txt"

  slides = [
    {
      "slide": "s01",
      "class": VGroup, # <- "create_same_time" group
      "create_same_time": Write, #  VGroup accepts Write
      "pause": 1, # <- Between the create and remove animations
      "remove_same_time": FadeOut,
      "arrange": [lambda mob: mob.arrange(DOWN, buff=1)],
      "elements" : [
        {
          "name": "text01",
          "type": Text,
        },{
          "name": "paragraph01",
          "type": Text,
        },
      ],
    },
  ]

%manim $_RV

Note

If we do not define the preview_slides variable, all the slides will be rendered.

[11]:
class Example(Presentation):
  file   = "slides01.txt"
  slides = [
    {
      "class": VGroup,
      "create_same_time": Write,
      "pause": 1,
      "remove_same_time": FadeOut,
      "pause_between_slides": 0.1, # <- Pause after "remove_same_time"
      **SLIDES[0]
    },{ # --- New slide
      "class": VGroup,
      "create_same_time": AnimWrapper(FadeIn, scale=2, run_time=2.5),
      "pause": 1,
      "remove_same_time": AnimWrapper(FadeOut, scale=2),
      **SLIDES[1]
    }
  ]
  # preview_anims = ["s01", "s02"] # <-- Render all slides

%manim $_RV

To have more control over the animations you have to do it another way.