用途
pdf-generation 用于把 Markdown 文件转换为专业排版的 PDF。它基于 Pandoc,配合 Eisvogel 模板样式,支持英文与俄文文档,可定制主题、目录与专业排版(俄文使用 EB Garamond 字体)。
主要能力
- 使用 Pandoc 与 xelatex 引擎从 Markdown 生成 PDF。
- 支持自动生成目录(--toc),可控制目录深度(--toc-depth)。
- 提供桌面/打印版式(A4,210mm x 297mm,边距 2.5cm,字号 11pt)适合打印、大屏阅读与归档。
- 提供移动端版式(6in x 9in,边距 0.5in,字号 10pt,行距 1.2),适合手机/平板阅读与 Telegram 等消息应用分享;移动版输出文件名自动追加 -mobile.pdf 后缀。
- 支持俄文:使用 EB Garamond 作为主字体(-V mainfont="EB Garamond")。
- 支持通过 YAML frontmatter 设置标题页与主题色。文档主题色对应关系为:白皮书 - 蓝色(1e3a8a)、营销 - 绿色(059669)、研究 - 紫色(7c3aed)、技术 - 灰色(374151)。
- 提供 YAML 模板参考(references/frontmatter_templates.md)与 Pandoc 命令参考(references/pandoc_reference.md)。
- 提供预处理脚本 scripts/fix_markdown.py,用于自动检测并修复列表格式问题:冒号后的列表、标题后的列表、嵌套列表间距。
- 提供自动化生成脚本 scripts/generate_pdf.py,支持 -t 主题参数、--russian、--mobile 等选项。
使用方式
基础命令示例:
桌面/打印 PDF(A4)
pandoc doc.md -o doc.pdf --pdf-engine=xelatex --toc --toc-depth=2 -V geometry:margin=2.5cm -V fontsize=11pt -V documentclass=article
移动端友好 PDF
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
俄文 PDF
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"
俄文移动版:
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"
使用脚本:
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
预处理 Markdown:
scripts/fix_markdown.py input.md output.md
YAML frontmatter 示例:
title: "Document Title" subtitle: "Subtitle" author: "Author" date: "2025-11-18" titlepage: true titlepage-color: "1e3a8a" titlepage-text-color: "ffffff" book: true
Markdown 格式最佳实践
- 列表前需要空行(正确渲染列表所必需)。
- 标题后加空行,改善间距。
- 嵌套列表缩进使用 3 个空格。
- 常见问题:冒号后的列表需要空行。若无空行,会被渲染为行内文本。例如“Your data spans 9 years with complete tracking:”后接列表项时应保留空行。
生成工作流
- 简单 PDF:检查上下文(Telegram 用移动版,否则桌面版);检查是否俄文(是则用 EB Garamond);运行相应 pandoc 命令;验证输出。
- 专业标题页:添加带主题色的 YAML frontmatter,包含元数据(标题、作者、日期),选择版式(移动或桌面),用 xelatex 生成。
- 使用脚本生成。
适用场景
- 白皮书、营销资料、研究报告、技术文档。
- 需要通过 Telegram 或消息应用分享的移动端阅读文档。
- 便携参考文档与随时随地快速阅读。
- 默认上下文:通过 Telegram 机器人生成 PDF 时默认使用移动版式,除非用户明确要求打印/桌面版本。
限制与要求
- 需要安装 Pandoc 与 LaTeX:brew install pandoc、brew install --cask mactex。
- 具体可用的主题、模板及脚本的完整参数范围暂未提供。