Convert LaTeX Beamer slides to PowerPoint presentations with flawless vector graphics and embedded video support. Mostly vibe-coded using claude-cli and gemini-cli.
Converting Beamer slides to PowerPoint often results in blurry images or lost functionality. beampptx solves this by:
- Vector Fidelity: Every slide is embedded as a full-bleed SVG vector graphic, ensuring perfect sharpness at any zoom level.
- Dynamic Overlays: Supports Beamer transitions (
\pause,\alt,<1->, etc.) by expanding them into individual static slides. - Clickable Navigation: Preserves internal Beamer links such as
\hyperlink{target}{\beamergotobutton{Go}}as PowerPoint slide navigation. - Native Video: Automatically extracts videos included via the
movie15package's\includemovieor themultimediapackage's\moviecommand and embeds them as native PowerPoint video shapes with support for autoplay, looping, and volume. - Bibliography Support: Handles complex LaTeX compilation passes (including
biberandbibtex).
pip install beampptxTo install the latest development state directly from the repository:
pip install git+https://github.com/kocurvik/beampptx.gitIf you have the repository cloned:
pip install -e .- Python: 3.10+
- LaTeX: A working distribution (MiKTeX, TeX Live) with
pdflatex(default),xelatex, orlualatex. - Tools:
biberorbibtexif using bibliographies.
Once installed, use the beampptx command:
beampptx presentation.texIf you already have a compiled PDF:
beampptx presentation.pdfNote that for this option, the videos will not be embedded correctly, but the rest of the content should be exported as vector graphics.
# Specify output filename
beampptx presentation.tex -o final_talk.pptx
# Use a different LaTeX engine
beampptx presentation.tex --latex-engine xelatex
# Keep the temporary build files for debugging
beampptx presentation.tex --keep-build
# Skip internal navigation links
beampptx presentation.tex --no-links
# Build in a specific directory instead of a temp dir (never auto-deleted)
beampptx presentation.tex --build-dir ./build
# Run LaTeX from a different working directory than the .tex file
beampptx presentation.tex --latex-cwd ./src
# Show the installed version
beampptx --version--build-dir implies --keep-build: the directory is created if missing and is
never removed automatically, which makes it the easiest way to inspect the
intermediate PDF and SVGs after a failed run. --latex-cwd controls how relative
\input, \includegraphics, and \bibliography paths in the source resolve —
it defaults to the directory containing the .tex file.
beampptx can also be run as a module: python -m beampptx presentation.tex.
The repository includes a test/ folder with several examples demonstrating different features. To try them out, clone the repository and run:
# Basic features (math, lists, etc.)
beampptx test/example.tex
# Overlays and transitions (\pause, \alt, etc.)
beampptx test/example_transitions.tex
# Image inclusion (PNG, JPEG, PDF)
beampptx test/example_images.tex
# Bibliography support (biblatex/biber)
beampptx test/example_bib.tex
# Internal navigation links (\hyperlink + \beamergotobutton) with video
beampptx test/example_links.tex
# Video with the movie15 package (\includemovie)
beampptx test/example_video.tex
# Multiple videos on a single slide
beampptx test/example_multi_video.tex
# Video with the multimedia package (\movie)
beampptx test/example_movie.tex
# Multiple videos on the same slide with the multimedia package (\movie)
beampptx test/example_multimedia.tex
# Custom theme with full-width colored title bars, logos and footnote citations
beampptx test/fmph_presentation.texbeampptx detects frames with multiple slides (e.g., from \pause or <1->) and creates a separate PowerPoint slide for each state. This preserves the feeling of "animations" when clicking through the presentation.
Internal PDF destinations generated by Beamer are converted into PowerPoint click actions. For example, a button created with \hyperlink{details}{\beamergotobutton{Details}} will jump to the frame labelled details in slideshow mode. This also preserves internal links introduced by Beamer themes.
Note that themes drawing a navigation bar (Warsaw, Berlin, ...) emit one link
per entry on every slide, which adds up to a lot of shapes on a long deck. Pass
--no-links to skip the conversion entirely, or suppress the bar in the source
with \beamertemplatenavigationsymbolsempty.
Two LaTeX packages are supported for video inclusion — pick whichever your
source already uses. In both cases beampptx finds the call in your .tex
source, locates the corresponding annotation in the compiled PDF, and
embeds the video file directly into the .pptx as a native PowerPoint
movie shape.
movie15 — \includemovie:
\usepackage{movie15}
...
\includemovie[autoplay, poster=image.png, repeat, volume=0.5]
{width}{height}{video.mp4}multimedia — \movie (ships with Beamer):
\usepackage{multimedia}
...
\movie[width=8cm, height=4.5cm, autostart, loop]
{\includegraphics[width=8cm]{poster.png}}
{video.mp4}Recognised options:
| Behaviour | movie15 |
multimedia |
|---|---|---|
| Auto-play | autoplay |
autostart |
| Loop | repeat / palindrome |
loop / palindrome |
| Initial volume | volume=0.0..1.0 |
(not supported by the package) |
| Poster image | poster=file |
first arg (\includegraphics{file}) |
Note that currently, using pdfs for poster images is not supported. Likewise, the autoplay option requires activating the "next" slide for the videos to run. The palindrome option will just loop the video normally instead of reversing it for even playtroughs.
- Fixed a thin white strip at the slide edges: PowerPoint drew the embedded slide graphics about 1 px narrower than the slide, so full-width backgrounds and colored title bars stopped just short of the left and right edges. Slides now fill the full width.
- Added
test/fmph_presentation.tex, an example with a custom theme (full-width colored title bars, logos and footnote citations).
- Available on PyPI:
beampptxcan now be installed withpip install beampptxinstead of only from GitHub. - Proper package layout: the code moved from a top-level
generate_pptx.pymodule into abeampptxpackage. Thebeampptxcommand is unchanged, the converter can now also be run aspython -m beampptx, and installing no longer places a genericgenerate_pptxmodule on your import path. - Preserved internal Beamer navigation: internal PDF destinations become
PowerPoint click actions, contributed by
@mefilippin in
#1. Added
--no-linksto skip the conversion for themes that draw a navigation bar. - Requires Python 3.10+: this was always true of the code; the metadata previously claimed 3.6+.
- Added
--version, and fixed console output crashing on Windows when redirected to a file or pipe.
This project is licensed under the MIT License - see the LICENSE file for details.