Skip to main content

Convert Markdown with LaTeX math to PDF using KaTeX and headless Chrome

Project description

md2pdf

A minimalist, high-fidelity Markdown-to-PDF converter written in Python. It parses Markdown files containing LaTeX mathematical formulas, renders them using KaTeX, and outputs a print-perfect PDF using a headless Chrome instance via Selenium.

Features

  • High-Fidelity PDF Output: Employs headless Google Chrome to print the rendered HTML layout to PDF, preserving pagination, fonts, margins, and alignments.
  • LaTeX Math Support: Seamlessly renders inline math ($...$) and block math ($$...$$) via KaTeX.
  • Minimal Dependencies: Requires only Python, Chrome/Chromium, and the Python selenium library.
  • Polished Typography: Features premium, print-optimized font pairings (Source Serif 4, Source Sans 3, and Source Code Pro) loaded dynamically from Google Fonts.
  • Clean Markdown Parser: A custom regex-based parser that translates standard Markdown elements into clean HTML while protecting LaTeX delimiters from markdown interference.

Installation

1. Prerequisites

  • Python 3.x
  • Google Chrome or Chromium browser installed on your system.

2. Install Python Package

Install the Python dependencies via pip. It is recommended to use a virtual environment:

# Create and activate a virtual environment (optional)
python3 -m venv venv
source venv/bin/activate

# Install Selenium
pip install selenium

Note: Selenium Manager will automatically locate and download the appropriate driver (chromedriver) for your Chrome version. No manual driver setup is needed.


Usage

Run the converter from your terminal:

python3 md2pdf.py <input.md> [output.pdf]
  • <input.md>: The path to your input Markdown file.
  • [output.pdf] (Optional): The path for the output PDF file. If omitted, it defaults to the input file's name with a .pdf extension in the same directory.

Example

Given a file document.md containing:

# Physics Report

Let's discuss the Maxwell's equations. In differential form, Faraday's law of induction is:

$$\nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t}$$

Where:
- $\mathbf{E}$ is the electric field.
- $\mathbf{B}$ is the magnetic field.

Convert it using:

python3 md2pdf.py document.md

This generates document.pdf with properly formatted headers, bulleted lists, and beautiful, high-resolution mathematical equations.


Supported Markdown Elements

  • Headings: # (H1), ## (H2), and ### (H3).
  • Inline Math: $ ... $ for inline formulas (e.g. $E = mc^2$).
  • Block Math: $$ ... $$ for centered display equations.
  • Unordered Lists: - item and indented - subitem.
  • Text Styling: **bold**, *italic*, and inline `code` fragments.
  • Paragraphs: Contiguous lines are automatically joined into standard justified paragraphs.

How It Works

  1. Preprocessing: The script reads the input Markdown, identifies math blocks, and translates markdown elements (headers, lists, styling) to semantic HTML tags.
  2. HTML Generation: It constructs a self-contained HTML document loading KaTeX stylesheets/scripts and applying typography rules.
  3. Rendering & Math Processing: Selenium starts a headless Chrome browser, loads the HTML, and waits for KaTeX's auto-render extension to process the mathematical formatting.
  4. PDF Printing: Headless Chrome's print-to-PDF functionality (Page.printToPDF via Chrome DevTools Protocol) is triggered with A4 measurements and standard margins to produce a high-fidelity document.

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

md2pdf_tex-0.1.0.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

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

md2pdf_tex-0.1.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file md2pdf_tex-0.1.0.tar.gz.

File metadata

  • Download URL: md2pdf_tex-0.1.0.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for md2pdf_tex-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e787b0aacfa5313afa51d0d3da1ff782ec13ae3be8a9e57ac7e24536e95c907f
MD5 716908e2831aed7dbdda04a6653f6a03
BLAKE2b-256 73553de428504599f2f90365c9bdd8c3e872909160233ae93e4abdb9720fa9ab

See more details on using hashes here.

File details

Details for the file md2pdf_tex-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: md2pdf_tex-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for md2pdf_tex-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b1ad5e31af4902135862d8d75ad1a7ee5d97d531babf8ce0d4230e8b4432766
MD5 121b67d25792d5d362bcf2296442a981
BLAKE2b-256 d35456c683957d363f6f4f712db969ca48b74718e34e00684b3544811749ed45

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