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
seleniumlibrary. - 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.pdfextension 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:
- itemand indented- subitem. - Text Styling:
**bold**,*italic*, and inline`code`fragments. - Paragraphs: Contiguous lines are automatically joined into standard justified paragraphs.
How It Works
- Preprocessing: The script reads the input Markdown, identifies math blocks, and translates markdown elements (headers, lists, styling) to semantic HTML tags.
- HTML Generation: It constructs a self-contained HTML document loading KaTeX stylesheets/scripts and applying typography rules.
- 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.
- PDF Printing: Headless Chrome's print-to-PDF functionality (
Page.printToPDFvia Chrome DevTools Protocol) is triggered with A4 measurements and standard margins to produce a high-fidelity document.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e787b0aacfa5313afa51d0d3da1ff782ec13ae3be8a9e57ac7e24536e95c907f
|
|
| MD5 |
716908e2831aed7dbdda04a6653f6a03
|
|
| BLAKE2b-256 |
73553de428504599f2f90365c9bdd8c3e872909160233ae93e4abdb9720fa9ab
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b1ad5e31af4902135862d8d75ad1a7ee5d97d531babf8ce0d4230e8b4432766
|
|
| MD5 |
121b67d25792d5d362bcf2296442a981
|
|
| BLAKE2b-256 |
d35456c683957d363f6f4f712db969ca48b74718e34e00684b3544811749ed45
|