Skip to main content

Merge Markdown files into a single PDF with Pandoc + XeLaTeX

Project description

mdfusion

Merge all Markdown files in a directory tree into a single PDF with formatting via Pandoc + XeLaTeX.


Features

  • Recursive Markdown merge: Collects and sorts all .md files under a directory (natural sort order).
  • PDF output via Pandoc + XeLaTeX: Produces a polished PDF with centered section headings and small margins.
  • Title page and metadata: Optional title page with configurable title, author, and date.
  • Config file support: Use a mdfusion.toml config file for repeatable builds.
  • Custom LaTeX header: Inject your own LaTeX via header.tex if desired.
  • Image link rewriting: Converts relative image links to absolute paths, so identically-named images in different folders don't collide.

Installation

Install via pip

pip install mdfusion

Install from source

  1. Clone this repo
  2. Install Python 3.8+ and Pandoc with XeLaTeX support
  3. Install the mdfusion package:
pip install ./mdfusion

Usage

mdfusion ROOT_DIR [OPTIONS]

Common options

  • -o, --output FILE Output PDF filename (default: <root_dir>.pdf)
  • --no-toc Omit table of contents
  • --title-page Include a title page
  • --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)

Example

mdfusion --title-page --title "My Book" --author "Jane Doe" docs/

Configuration file

You can create a .mdfusion file in your project directory:

[mdfusion]
root_dir = docs
output = my-book.pdf
no_toc = true
title_page = true
title = My Book
author = Jane Doe
pandoc_args = --number-sections

Then just run:

mdfusion

How it works

  • Finds and sorts all Markdown files under the root directory
  • Merges them into one file, rewriting image links to absolute paths
  • Optionally adds a YAML metadata block for title/author/date
  • Inserts page breaks between files
  • Calls Pandoc with XeLaTeX and a custom header for formatting

Testing

Run all tests with:

pytest

Author

ejuet

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mdfusion-0.1.8.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mdfusion-0.1.8-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file mdfusion-0.1.8.tar.gz.

File metadata

  • Download URL: mdfusion-0.1.8.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.4

File hashes

Hashes for mdfusion-0.1.8.tar.gz
Algorithm Hash digest
SHA256 e6bd5809a01c95e3fffeb9b1fed2c9a8270d3f902ac442ab690729fd08a81c75
MD5 4075f59394281102d96149d8218515c3
BLAKE2b-256 281dba8dbab5cef56a3b14df2ad922fe3a6d8fcdcbfc04c0d380f6ca44a57262

See more details on using hashes here.

File details

Details for the file mdfusion-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: mdfusion-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.4

File hashes

Hashes for mdfusion-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ef84546e5d3f6637552f61a8de32488167ec8fc7b456a9d138c2e85fccfebede
MD5 5c6e426ec9f1c71fb9e13cc78d9eb62e
BLAKE2b-256 f2ce15e0641d0488757ff7b9eb5171a5fdb30400c2b4185d51da8c3861cfa9bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page