From brewdoc
Converts Markdown files to professional PDFs using reportlab (lightweight) or weasyprint (full CSS). Manages dependencies, custom styles, test mode, and auto-activates on pdf or md-to-pdf triggers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/brewdoc:md-to-pdfsonnetThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Converts Markdown files to professional PDF using one of two rendering engines.
Converts Markdown files to professional PDF using one of two rendering engines.
Parse $ARGUMENTS to determine mode and components.
| Component | Required | Description |
|---|---|---|
md_file | per mode | Path to .md file |
--engine | No | reportlab or weasyprint (overrides saved config) |
custom_prompt | No | Last argument in double quotes = LLM preprocessing instructions |
Mode detection rules:
| Condition | Mode |
|---|---|
Empty or help | HELP |
styles or config | STYLES |
test | TEST |
Path to .md file + quoted string at end | CONVERT+PROMPT |
Path to .md file (no quoted string) | CONVERT |
Extract --engine <name> from anywhere in arguments if present. Remove it before further parsing.
Determine the target engine (from --engine flag, saved config, or default reportlab).
EXECUTE using Bash tool:
bash "${CLAUDE_SKILL_DIR}/scripts/check_deps.sh" check ENGINE_NAME 2>&1; echo "EXIT_CODE=$?"
Replace ENGINE_NAME with the target engine.
If output contains MISSING_PIP or MISSING_SYSTEM:
Use AskUserQuestion presenting the engine comparison table:
| Feature | reportlab | weasyprint |
|---|---|---|
| Install | pip only | pip + brew |
| Quality | Good | Excellent |
| Speed | Fast | Moderate |
| Images | Basic | Full |
| CSS Styling | No | Yes |
| Code highlight | No | Yes (Pygments) |
Options:
If user chooses install, EXECUTE using Bash tool:
bash "${CLAUDE_SKILL_DIR}/scripts/check_deps.sh" install ENGINE_NAME 2>&1 && echo "---INSTALL_OK---" || echo "---INSTALL_FAILED---"
STOP if INSTALL_FAILED -- report error and exit.
If user cancels -- STOP.
Check for saved config in order:
.claude/md-to-pdf.config.json~/.claude/md-to-pdf.config.jsonIf --engine flag was provided -- use it (skip config lookup).
If no saved preference and no --engine flag -- use AskUserQuestion with the engine comparison table from Step 1. Save the choice:
{
"engine": "reportlab",
"pygments_theme": "github"
}
Write to project config .claude/md-to-pdf.config.json (create .claude/ dir if needed).
Print formatted usage:
MD to PDF Converter
Usage:
/brewdoc:md-to-pdf <file.md> Convert with saved engine/style
/brewdoc:md-to-pdf <file.md> --engine weasyprint Convert with specific engine
/brewdoc:md-to-pdf <file.md> "remove section X" Preprocess MD then convert
/brewdoc:md-to-pdf styles Configure page/color/font
/brewdoc:md-to-pdf test Convert bundled test file
/brewdoc:md-to-pdf help Show this help
Engines:
reportlab -- Pure Python, fast, no system deps (pip install reportlab)
weasyprint -- HTML/CSS pipeline, best quality (pip + brew deps)
EXIT after printing.
.pdf extension.--config CONFIG_PATH).EXECUTE using Bash tool:
python3 "${CLAUDE_SKILL_DIR}/scripts/md_to_pdf.py" "INPUT_PATH" "OUTPUT_PATH" --engine ENGINE --quiet 2>&1 && echo "---CONVERT_OK---" || echo "---CONVERT_FAILED---"
Replace INPUT_PATH, OUTPUT_PATH, ENGINE with actual values. Add --config CONFIG_PATH if a style config JSON exists. Add --pygments-theme THEME for weasyprint if configured.
STOP if CONVERT_FAILED -- read error output, attempt fix, retry once. If still failing -- report error.
STATUS, OUTPUT, PAGES, SIZE, ENGINE.custom_prompt instructions (delete sections, rewrite headings, restructure, etc.).{original_dir}/.tmp_{original_name}.mdEXECUTE using Bash tool:
rm -f "TEMP_FILE_PATH"
preprocessing: true.Run interactive configuration via AskUserQuestion dialogs:
Question 1 -- Page size:
Options: A4 (default), Letter, Legal
Question 2 -- Color scheme:
Options: Default blue (primary #1a3a5c), Dark (primary #2d3748), Custom (ask for hex values)
Question 3 -- Code theme (weasyprint only):
Options: github (default), monokai, friendly, solarized-dark, solarized-light
Question 4 -- Footer format:
Options: Page {page} of {total} (default), {page}/{total}, Disabled
Build JSON config matching styles/default.json structure, overriding changed values. Write to .claude/md-to-pdf.config.json.
Report saved settings table and EXIT.
${CLAUDE_SKILL_DIR}/test/test-all-elements.md as INPUT_PATH./tmp/md-to-pdf-test-ENGINE.pdf/tmp/ output).| Parameter | Value |
|---|---|
| Source | absolute path to input MD |
| Output | absolute path to output PDF |
| Pages | from PAGES= in script output |
| Size | from SIZE= in script output |
| Engine | reportlab or weasyprint |
| Preprocessing | custom_prompt summary (if used) or none |
npx claudepluginhub kochetkov-ma/claude-brewcode --plugin brewdocConverts Markdown files with Mermaid diagrams to styled PDFs using Python script and Puppeteer. Useful for generating PDF documentation, reports, or printable documents with custom styles.
Renders a polished markdown report to a letter-size PDF using pandoc with xelatex (11pt serif, 1-inch margins, numbered footnotes). Fails loudly with install instructions if pandoc or xelatex is missing.
Converts Markdown documents to professionally typeset PDFs using reportlab (primary) or pandoc+XeLaTeX (fallback). Handles CJK/Latin mixed text, code blocks, tables, Obsidian callouts, math formulas, and 14 color themes. Triggered by "markdown to PDF", "md2pdf", "any2pdf", or export requests.