feat(lib): add Slide.next_section method (#295)

* feat(lib): add `Slide.next_section` method

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Jérome Eertmans
2023-10-23 17:34:20 +02:00
committed by GitHub
parent 626764146a
commit 541bf96945
4 changed files with 37 additions and 1 deletions

View File

@ -43,6 +43,9 @@ In an effort to better document changes, this CHANGELOG document is now created.
- Added `loop` option to `Slide`'s `next_slide` method.
Calling `next_slide` will never fail anymore.
[#294](https://github.com/jeertmans/manim-slides/pull/294)
- Added `Slide.next_section` for compatibility with `manim`'s
`Scene.next_section` method.
[#295](https://github.com/jeertmans/manim-slides/pull/295)
(v5-changed)=
### Changed

View File

@ -15,6 +15,7 @@ use, not the methods used internally when rendering.
canvas,
canvas_mobjects,
mobjects_without_canvas,
next_section,
next_slide,
remove_from_canvas,
wait_time_between_slides,

View File

@ -252,7 +252,7 @@ class BaseSlide:
super().play(*args, **kwargs) # type: ignore[misc]
self._current_animation += 1
def next_slide(self, loop: bool = False) -> None:
def next_slide(self, *, loop: bool = False, **kwargs: Any) -> None:
"""
Create a new slide with previous animations, and setup options
for the next slide.
@ -260,8 +260,16 @@ class BaseSlide:
This usually means that the user will need to press some key before the
next slide is played. By default, this is the right arrow key.
:param args:
Positional arguments to be passed to
:meth:`Scene.next_section<manim.scene.scene.Scene.next_section>`,
or ignored if `manimlib` API is used.
:param loop:
If set, next slide will be looping.
:param kwargs:
Keyword arguments to be passed to
:meth:`Scene.next_section<manim.scene.scene.Scene.next_section>`,
or ignored if `manimlib` API is used.
.. note::
@ -273,6 +281,11 @@ class BaseSlide:
When rendered with RevealJS, loops cannot be in the first nor
the last slide.
.. seealso::
When using ``manim`` API, this method will also call
:meth:`Scene.next_section<manim.scene.scene.Scene.next_section>`.
Examples
--------
The following contains 3 slides:

View File

@ -64,6 +64,25 @@ class Slide(BaseSlide, Scene): # type: ignore[misc]
def _start_at_animation_number(self) -> Optional[int]:
return config["from_animation_number"] # type: ignore
def next_section(self, *args: Any, **kwargs: Any) -> None:
"""
Alias to :meth:`next_slide`.
:param args:
Positional arguments to be passed to :meth:`next_slide`.
:param kwargs:
Keyword arguments to be passed to :meth:`next_slide`.
.. attention::
This method is only available when using ``manim`` API.
"""
self.next_slide(*args, **kwargs)
def next_slide(self, *args: Any, loop: bool = False, **kwargs: Any) -> None:
Scene.next_section(self, *args, **kwargs)
BaseSlide.next_slide(self, loop=loop)
def render(self, *args: Any, **kwargs: Any) -> None:
"""MANIM render."""
# We need to disable the caching limit since we rely on intermediate files