pdf-generation — Claude Code skill: markdown to PDF
Turns markdown into a finished PDF with Pandoc and the Eisvogel template: title page, table of contents, colour-coded themes. Built for reports and docs.
npx skills add glebis/claude-skills --skill pdf-generation -a claude-codeWhat pdf-generation does
The skill runs Pandoc with the xelatex engine and writes a PDF straight from your markdown file. The table of contents goes two levels deep, margins and font size come from flags, and the title page picks up its colour from a YAML block at the top of the document. White papers use blue 1e3a8a, marketing green 059669, research purple 7c3aed, technical docs gray 374151.
Russian text is set in EB Garamond, passed through -V mainfont. Two layouts ship with it: A4 with 2.5cm margins at 11pt for print, and a mobile 6x9 inch page with 0.5in margins at 10pt for phone reading. Inside a Telegram bot the mobile layout is the default unless someone asks for the print version.
A helper script, scripts/fix_markdown.py, repairs formatting before the build — lists that follow colons or headings, spacing in nested items. Skip it and a list after a colon collapses into a single line of text, so it is worth running. Pandoc and LaTeX have to be on the machine first: brew install pandoc and brew install --cask mactex.
What it helps with
- build a PDF from markdown with a table of contents
- give a document a title page in the right theme colour
- set Russian text in EB Garamond
- repair lists after colons before the build
- produce a 6x9 mobile PDF for reading on a phone
Example prompts for the agent
- build a PDF from
report.mdwith a table of contents two levels deep - make a mobile version of this document to send over Telegram
- run
fix_markdown.pyondoc.mdand build the PDF with EB Garamond
How to install pdf-generation
1Skills CLI (Vercel)
npx skills add glebis/claude-skills --skill pdf-generation -a claude-code2Manually: put the files in place
~/.claude/skills/pdf-generation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/pdf-generation/
1Skills CLI (Vercel)
npx skills add glebis/claude-skills --skill pdf-generation -a codex2Manually: put the files in place
.agents/skills/pdf-generation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add glebis/claude-skills --skill pdf-generation -a cursor2Manually: put the files in place
.cursor/skills/pdf-generation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install glebis/claude-skills pdf-generation2Manually: put the files in place
.github/skills/pdf-generation/SKILL.md1Skills CLI (Vercel)
npx skills add glebis/claude-skills --skill pdf-generation -a gemini-cli2Platform CLI
gemini skills install https://github.com/glebis/claude-skills --path pdf-generationManually: put the files in place
.devin/skills/pdf-generation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add glebis/claude-skills --skill pdf-generation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about pdf-generation
How do I install pdf-generation in Claude?
Run npx skills add glebis/claude-skills --skill pdf-generation -a claude-code. The skill lands in ~/.claude/skills/pdf-generation/SKILL.md.
What does pdf-generation do?
It converts markdown to PDF with Pandoc and the Eisvogel template: table of contents, a title page in your theme colour, and Russian text support. You pick a print or phone layout.
What do I need installed first?
Pandoc and LaTeX. The troubleshooting section gives brew install pandoc and brew install --cask mactex.
Source text
SKILL.md · MIT
--- name: pdf-generation description: Professional PDF generation from markdown using Pandoc with Eisvogel template and EB Garamond fonts. Use when converting markdown to PDF, creating white papers, research documents, marketing materials, or technical documentation. Supports both English and Russian documents with professional typography and color-coded themes. Mobile-optimized layout (6x9) by default for Telegram bot context, desktop/print layout (A4) for other contexts. --- # PDF Generation ## Overview Generate professional PDFs from markdown files using Pandoc with Eisvogel template styling. Supports English and Russian documents with customizable themes, table of contents, and professional typography including EB Garamond font for Russian text. ## Quick Start Basic commands: ```bash # Desktop/Print PDF (A4 format) pandoc doc.md -o doc.pdf --pdf-engine=xelatex --toc --toc-depth=2 -V geometry:margin=2.5cm -V fontsize=11pt -V documentclass=article # Mobile-friendly PDF (6x9 phone screen optimized) pandoc doc.md -o doc-mobile.pdf --pdf-engine=xelatex --toc --toc-depth=2 -V geometry:paperwidth=6in -V geometry:paperheight=9in -V geometry:margin=0.5in -V fontsize=10pt -V linestretch=1.2 # Russian PDF with EB Garamond pandoc doc-ru.md -o doc.pdf --pdf-engine=xelatex --toc --toc-depth=2 -V geometry:margin=2.5cm -V fontsize=11pt -V documentclass=article -V mainfont="EB Garamond" # Russian Mobile PDF pandoc doc-ru.md -o doc-mobile.pdf --pdf-engine=xelatex --toc --toc-depth=2 -V geometry:paperwidth=6in -V geometry:paperheight=9in -V geometry:margin=0.5in -V fontsize=10pt -V linestretch=1.2 -V mainfont="EB Garamond" ``` ## Document Theme Colors - **White Papers** - Blue (1e3a8a) - **Marketing** - Green (059669) - **Research** - Purple (7c3aed) - **Technical** - Gray (374151) ## YAML Frontmatter Example ```yaml --- title: "Document Title" subtitle: "Subtitle" author: "Author" date: "2025-11-18" titlepage: true titlepage-color: "1e3a8a" titlepage-text-color: "ffffff" book: true --- ``` See references/frontmatter_templates.md for complete templates. ## Markdown Formatting Best Practices For optimal PDF rendering, ensure: 1. **Blank lines before lists** - Required for proper list rendering 2. **Blank lines after headings** - Improves spacing 3. **Nested list indentation** - Use 3 spaces for sub-items ### Common Claude Code Pattern Lists after colons need blank lines: ```markdown Your data spans 9 years with complete tracking: - Item 1 - Item 2 ``` Without blank line after colon, renders as inline text. ### Automatic Fix Use preprocessing script: ```bash scripts/fix_markdown.py input.md output.md ``` Automatically detects and fixes: - Lists after colons (Claude Code format) - Lists after headings - Nested list spacing ## Layout Options ### Desktop/Print Layout (A4) - Paper: 210mm x 297mm (A4) - Margins: 2.5cm - Font size: 11pt - Best for: Printing, reading on large screens, archival ### Mobile Layout (Phone-optimized) - Paper: 6in x 9in (phone aspect ratio) - Margins: 0.5in (minimal for screen space) - Font size: 10pt with 1.2 line spacing - Best for: Phone/tablet reading, Telegram/messaging apps **Default for Telegram Bot**: Use mobile layout for all PDFs sent via Telegram unless user explicitly requests print/desktop version. ## Generation Workflows ### Workflow 1: Simple PDF 1. Check context (Telegram = mobile, otherwise desktop) 2. Check if Russian (use EB Garamond if yes) 3. Run appropriate pandoc command 4. Verify output ### Workflow 2: Professional Title Page 1. Add YAML frontmatter with theme color 2. Include metadata (title, author, date) 3. Choose layout (mobile vs desktop) 4. Generate with xelatex ### Workflow 3: Using Script ```bash scripts/generate_pdf.py doc.md -t white-paper scripts/generate_pdf.py doc.md -t marketing --russian scripts/generate_pdf.py doc.md --mobile # Mobile layout ``` ## Resources - **scripts/generate_pdf.py** - Automated generation - **references/frontmatter_templates.md** - YAML templates - **references/pandoc_reference.md** - Command reference ## Troubleshooting Install pandoc: `brew install pandoc` Install LaTeX: `brew install --cask mactex` ## Mobile-Friendly PDFs For phone and tablet reading, use the mobile layout option: ```bash # Using script (recommended) scripts/generate_pdf.py doc.md --mobile # Direct pandoc command pandoc doc.md -o doc-mobile.pdf \ --pdf-engine=xelatex \ --toc --toc-depth=2 \ -V geometry:paperwidth=6in \ -V geometry:paperheight=9in \ -V geometry:margin=0.5in \ -V fontsize=10pt \ -V linestretch=1.2 \ -V colorlinks=true \ -V linkcolor=blue \ -V urlcolor=blue ``` **Mobile layout features**: - 6x9 inch page size (optimal for mobile screens) - 10pt font (readable on smaller screens) - 0.5in margins (maximizes content area) - 1.2 line spacing (improved readability) - Auto-generated `-mobile.pdf` filename suffix **When to use mobile layout**: - Sharing research via Telegram/messaging apps - Reading on phones or tablets - Creating portable reference documents - Quick consumption on the go **Default context**: Mobile layout is used by default when generating PDFs through the Telegram bot for optimal mobile reading experience.
© glebis · MIT · glebis/claude-skills