
mdfusion
A Python module for merging and exporting Markdown files. Available for pip.
When I am studying for exams, I often end up with a lot of Markdown files in a folder hierarchy. For revising the content, I want to merge these files into one single file and have them in a nicely readable format.
When looking for a solution, I did not find a tool that would crawl the directory for me, merge the files and export them to a PDF or HTML file in one go. So I wrote a small Python module using Pandoc that does exactly that. Since I feel like this is a common use case, I decided to publish it on GitHub and PyPI.
I also added a feature for exporting the merged Markdown to a Powerpoint-like presentation. To do this, I use Pandoc's native support for the reveal.js framework. The presentation can then be viewed in a web browser or exported to a PDF file, which I implemented via the python library Playwright. I figured this would come in handy if I ever need to prepare a presentation quickly.
The code is available on GitHuband on PyPI.
Even though this is a small project, I manage it in a git repository using
Merge all Markdown files in a directory tree into a single PDF or HTML presentation with formatting via Pandoc + XeLaTeX.
.md files under a directory (natural sort order)You must have the following on your PATH:
For HTML presentations and PDF export from HTML, you may also want to install:
pip install playwright and then playwright installpip install mdfusion
git clone https://github.com/ejuet/mdfusion.git
cd mdfusion
pip install .
mdfusion ROOT_DIR [OPTIONS]
-o, --output FILE Output filename (default: <root_dir>.pdf or .html for presentations)--no-toc Omit table of contents--title-page Include a title page (PDF only)--title TITLE Set title for title page (default: directory name)--author AUTHOR Set author for title page (default: OS user)--pandoc-args ARGS Extra Pandoc arguments (whitespace-separated)-c, --config FILE Path to a mdfusion.toml config file (default: mdfusion.toml in the current directory)--presentation Output as a reveal.js HTML presentation (not PDF)--footer-text TEXT Custom footer for presentationsmdfusion --title-page --title "My Book" --author "Jane Doe" docs/
mdfusion --presentation --title "My Talk" --author "Speaker" --footer-text "My Conference 2025" slides/
You can create a mdfusion.toml file in your project directory to avoid long command lines. The [mdfusion] section supports all the same options as the CLI.
[mdfusion]
root_dir = "docs"
output = "my-book.pdf"
no_toc = false
title_page = true
title = "My Book"
author = "Jane Doe"
pandoc_args = ["--number-sections", "--slide-level", "2"]
# header_tex = "header.tex" # Optional: custom LaTeX header
[mdfusion]
root_dir = "slides"
output = "my-presentation.html"
title = "My Talk"
author = "Speaker"
presentation = true
footer_text = "My Conference 2025"
pandoc_args = ["--slide-level", "6", "--number-sections", "-V", "transition=fade", "-c", "custom.css"]
# You can add more reveal.js or pandoc options as needed with ["-V", "option=value"]
Then just run:
mdfusion
Run all tests with:
pytest
Feel free to leave your opinion or questions in the comment section below.