md2textbook
Turn a Markdown file into a coursebook-style PDF: gradient cover, table of contents, chapter banners, colored boxes, publication-quality equations and syntax-highlighted code. It runs fully offline on Windows, macOS and Linux, with no network access and no AI.
Install
pipx install md2textbook # recommended: isolated, global command
# or
pip install md2textbook
Requires Python 3.10 or newer. Poppins and Caladea fonts are bundled; nothing else to download.
On Linux the file chooser needs Tk (sudo apt install python3-tk on Debian/Ubuntu, sudo dnf install python3-tkinter on Fedora). Without it the tool falls back to zenity/kdialog, or to a prompt in the terminal. Passing the file on the command line never needs any of these.
Use
md2textbook # opens a file chooser
md2textbook notes.md # writes notes.pdf next to the input and opens it
md2textbook notes.md -o out/book.pdf --no-open
md2textbook-gui # same as no arguments, without a console window on Windows
python -m md2textbook notes.md
An example input is in examples/sample.md.
Markdown support
| Markdown | Result |
|---|---|
Front matter title, subtitle, author, date |
Cover page |
A single # Title, then ## / ### / #### |
Title on the cover; chapters, sections, subsections |
Several # headings |
Each # is a chapter |
$x^2$ and $$ ... $$ (or a math fence) |
Inline math and numbered display equations |
Fenced code, ```python title="Loss" |
Highlighted listing with line numbers and wrapping |
Pipe tables, optional Table: caption line |
Zebra tables with a repeating header |
 |
Numbered figure |
> [!DEFINITION] Title |
Colored box |
> **Example:** text |
Same, shorthand form |
Plain > quote |
Quiet unlabeled note |
Box kinds: DEFINITION, EXAMPLE, INSIGHT, WARNING, RECAP, OBJECTIVE, CODE, IDEA, REVIEW, BRIEF, MATH, NOTE, plus aliases such as TIP, CAUTION, THEOREM, PROOF, SUMMARY.
Code fence options: title="...", nonumbers, start=N.
Limitations
- Equations use matplotlib's mathtext, so some LaTeX (matrices,
\substack, custom macros) is unsupported and shown as source text. - Remote and SVG images are skipped.
- No Mermaid diagrams or footnotes.
Development
git clone https://github.com/MikeDegany/md2textbook
cd md2textbook
pip install -e ".[dev]"
pytest
| Module | Role |
|---|---|
cli.py |
Command line, file chooser, opening the result |
parser.py |
Markdown parsing and mapping onto the book |
builder.py |
ReportLab book builder (pages, boxes, code, tables) |
theme.py |
Fonts, palette, paragraph styles, inline markup |
mathkit.py |
LaTeX to PNG rendering with an on-disk cache |
License
MIT, see LICENSE. The bundled Poppins and Caladea fonts are under the SIL Open Font License 1.1 (src/md2textbook/fonts/OFL-*.txt).
Metadata
Release files for md2textbook 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| md2textbook-0.1.1.tar.gz | 552.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| md2textbook-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / md2textbook-0.1.1.tar.gz
| Download URL | md2textbook-0.1.1.tar.gz |
|---|---|
| Size | 552.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3992c8adada182bd53417b03be902394e828c0bbdd4f221224403d61bf6936f7
|
|
BLAKE2b-256 checksum How to use checksums |
32ac9c6269f698e23e26a15219e31f40cd8f4a55d4bdf1e14b22c4911c49be7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / md2textbook-0.1.1-py3-none-any.whl
| Download URL | md2textbook-0.1.1-py3-none-any.whl |
|---|---|
| Size | 557.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
11878bd6852d64509e6e91dce1b9947bc867262c3074d8b22c9d6e7e0a39800d
|
|
BLAKE2b-256 checksum How to use checksums |
98b4bfa6fa51f58ed4505d9b22b81432bdcfcd93e655db9d8d15b9bb86e59fa1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|