pdf-generation
Professional PDF generation from markdown using Pandoc with Eisvogel template and EB Garamond fonts. Use when converting markdown to PDF, creating w…
它会碰到什么
逐条看命中(1 条严重或高危)
- 高
scripts/generate_pdf.py:102exec-spawnresult = subprocess.run(cmd, check=True, capture_output=True, text=True)
这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。
技能内容
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:
# 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
---
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:
- Blank lines before lists - Required for proper list rendering
- Blank lines after headings - Improves spacing
- Nested list indentation - Use 3 spaces for sub-items
Common Claude Code Pattern
Lists after colons need blank lines:
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:
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
- Check context (Telegram = mobile, otherwise desktop)
- Check if Russian (use EB Garamond if yes)
- Run appropriate pandoc command
- Verify output
Workflow 2: Professional Title Page
- Add YAML frontmatter with theme color
- Include metadata (title, author, date)
- Choose layout (mobile vs desktop)
- Generate with xelatex
Workflow 3: Using Script
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:
# 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.pdffilename 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.
想直接用这个技能?
本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。