lovstudio-any2pdf

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

any2pdf — Markdown to Professional PDF

any2pdf — Markdown转专业级PDF

This skill converts any Markdown file into a publication-quality PDF using Python's reportlab library. It was developed through extensive iteration on real Chinese technical reports and solves several hard problems that naive MD→PDF converters get wrong.
本技能使用Python的reportlab库将任意Markdown文件转换为出版级PDF。它是通过对真实中文技术报告进行大量迭代开发而成,解决了普通MD→PDF转换器常出错的几个难题。

When to Use

使用场景

  • User wants to convert
    .md
    .pdf
  • User has a markdown report/document and wants professional typesetting
  • Document contains CJK characters (Chinese/Japanese/Korean) mixed with Latin text
  • Document has fenced code blocks, markdown tables, or nested lists
  • User wants a cover page, table of contents, or watermark in their PDF
  • 用户需要将
    .md
    文件转换为
    .pdf
    文件
  • 用户拥有Markdown格式的报告/文档,需要专业排版
  • 文档包含CJK(中文/日文/韩文)与拉丁文字混合内容
  • 文档包含围栏代码块、Markdown表格或嵌套列表
  • 用户希望PDF中包含封面、目录或水印

Quick Start

快速开始

bash
python md2pdf/scripts/md2pdf.py \
  --input report.md \
  --output report.pdf \
  --title "My Report" \
  --author "Author Name" \
  --theme warm-academic
All parameters except
--input
are optional — sensible defaults are applied.
bash
python md2pdf/scripts/md2pdf.py \
  --input report.md \
  --output report.pdf \
  --title "My Report" \
  --author "Author Name" \
  --theme warm-academic
--input
外,所有参数均为可选——会应用合理的默认值。

Pre-Conversion Options (MANDATORY)

转换前必选选项

IMPORTANT: You MUST use the
AskUserQuestion
tool to ask these questions BEFORE running the conversion. Do NOT list options as plain text — use the tool so the user gets a proper interactive prompt. Ask all options in a SINGLE
AskUserQuestion
call.
Use
AskUserQuestion
with the following template. The tone should be friendly and concise — like a design assistant, not a config form:
开始转 PDF!先帮你确认几个选项 👇

━━━ 📐 设计风格 ━━━
 a) 暖学术    — 陶土色调,温润典雅,适合人文/社科报告
 b) 经典论文  — 棕色调,灵感源自 LaTeX classicthesis,适合学术论文
 c) Tufte     — 极简留白,深红点缀,适合数据叙事/技术写作
 d) 期刊蓝    — 藏蓝严谨,灵感源自 IEEE,适合正式发表风格
 e) 精装书    — 咖啡色调,书卷气,适合长篇专著/技术书
 f) 中国红    — 朱红配暖纸,适合中文正式报告/白皮书
 g) 水墨      — 纯灰黑,素雅克制,适合文学/设计类内容
 h) GitHub    — 蓝白极简,程序员熟悉的风格
 i) Nord 冰霜 — 蓝灰北欧风,清爽现代
 j) 海洋      — 青绿色调,清新自然
 k) LaTeX 清爽 — pandoc+XeLaTeX 原生排版,无封面无装饰,干净学术风(需装 pandoc+texlive)
 l) 咨询深蓝  — 深海军蓝色块 + 白底 + 大写左对齐标题,麦肯锡 / BCG / Deloitte 研究报告风格

━━━ 🖼 扉页图片(封面之后的全页插图) ━━━
 1) 跳过
 2) 我提供本地图片路径
 3) AI 根据内容自动生成一张

━━━ 💧 水印 ━━━
 1) 不加
 2) 自定义文字(如 "DRAFT"、"内部资料")
    可选调整:字号(默认52)、透明度(0-1)、角度(默认35°)、间距

━━━ 📇 封底物料(名片/二维码/品牌) ━━━
 1) 跳过
 2) 我提供图片
 3) 纯文字信息

示例回复:"a, 扉页跳过, 水印:仅供学习参考, 封底图片:/path/qr.png"
直接说人话就行,不用记编号 😄
重要提示:在运行转换前,必须使用
AskUserQuestion
工具询问以下问题。不要以纯文本形式列出选项——使用工具让用户获得合适的交互式提示。在单次
AskUserQuestion
调用中询问所有选项。
使用以下模板调用
AskUserQuestion
,语气应友好简洁——像设计助手而非配置表单:
开始转 PDF!先帮你确认几个选项 👇

━━━ 📐 设计风格 ━━━
 a) 暖学术    — 陶土色调,温润典雅,适合人文/社科报告
 b) 经典论文  — 棕色调,灵感源自 LaTeX classicthesis,适合学术论文
 c) Tufte     — 极简留白,深红点缀,适合数据叙事/技术写作
 d) 期刊蓝    — 藏蓝严谨,灵感源自 IEEE,适合正式发表风格
 e) 精装书    — 咖啡色调,书卷气,适合长篇专著/技术书
 f) 中国红    — 朱红配暖纸,适合中文正式报告/白皮书
 g) 水墨      — 纯灰黑,素雅克制,适合文学/设计类内容
 h) GitHub    — 蓝白极简,程序员熟悉的风格
 i) Nord 冰霜 — 蓝灰北欧风,清爽现代
 j) 海洋      — 青绿色调,清新自然
 k) LaTeX 清爽 — pandoc+XeLaTeX 原生排版,无封面无装饰,干净学术风(需装 pandoc+texlive)
 l) 咨询深蓝  — 深海军蓝色块 + 白底 + 大写左对齐标题,麦肯锡 / BCG / Deloitte 研究报告风格

━━━ 🖼 扉页图片(封面之后的全页插图) ━━━
 1) 跳过
 2) 我提供本地图片路径
 3) AI 根据内容自动生成一张

━━━ 💧 水印 ━━━
 1) 不加
 2) 自定义文字(如 "DRAFT"、"内部资料")
    可选调整:字号(默认52)、透明度(0-1)、角度(默认35°)、间距

━━━ 📇 封底物料(名片/二维码/品牌) ━━━
 1) 跳过
 2) 我提供图片
 3) 纯文字信息

示例回复:"a, 扉页跳过, 水印:仅供学习参考, 封底图片:/path/qr.png"
直接说人话就行,不用记编号 😄

Mapping User Choices to CLI Args

用户选择与CLI参数映射

ChoiceCLI arg
Design style a-k
--theme
with value from table below (k uses pandoc engine)
Frontispiece local
--frontispiece <path>
Frontispiece AIGenerate image first, then
--frontispiece /tmp/frontispiece.png
Watermark text
--watermark "文字"
Watermark style
--wm-size 30 --wm-opacity 0.1 --wm-angle 45
(all optional)
Image as cover
--image-cover true
(requires
--frontispiece
)
Back cover image
--banner <path>
Back cover text
--disclaimer "声明"
and/or
--copyright "© 信息"
选择CLI 参数
设计风格a-k
--theme
搭配下表中的值(k使用pandoc引擎)
本地扉页图片
--frontispiece <路径>
AI生成扉页图片先生成图片,再使用
--frontispiece /tmp/frontispiece.png
水印文字
--watermark "文字"
水印样式
--wm-size 30 --wm-opacity 0.1 --wm-angle 45
(均为可选)
图片作为封面
--image-cover true
(需搭配
--frontispiece
封底图片
--banner <路径>
封底文字
--disclaimer "声明"
和/或
--copyright "© 信息"

Theme Name Mapping

主题名称映射

Choice
--theme
value
Inspiration
a) 暖学术
warm-academic
Lovstudio design system
b) 经典论文
classic-thesis
LaTeX classicthesis
c) Tufte
tufte
Edward Tufte's books
d) 期刊蓝
ieee-journal
IEEE journal format
e) 精装书
elegant-book
LaTeX ElegantBook
f) 中国红
chinese-red
Chinese formal documents
g) 水墨
ink-wash
水墨画 / ink wash painting
h) GitHub
github-light
GitHub Markdown style
i) Nord
nord-frost
Nord color scheme
j) 海洋
ocean-breeze
k) LaTeX 清爽
latex-clean
pandoc+XeLaTeX 原生排版,无封面
l) 咨询深蓝
consulting-navy
McKinsey / BCG / Deloitte deep-research report
选择
--theme
参数值
灵感来源
a) 暖学术
warm-academic
Lovstudio设计系统
b) 经典论文
classic-thesis
LaTeX classicthesis
c) Tufte
tufte
Edward Tufte的书籍
d) 期刊蓝
ieee-journal
IEEE期刊格式
e) 精装书
elegant-book
LaTeX ElegantBook
f) 中国红
chinese-red
中文正式文档
g) 水墨
ink-wash
水墨画 / ink wash painting
h) GitHub
github-light
GitHub Markdown风格
i) Nord
nord-frost
Nord配色方案
j) 海洋
ocean-breeze
k) LaTeX 清爽
latex-clean
pandoc+XeLaTeX原生排版,无封面
l) 咨询深蓝
consulting-navy
麦肯锡/BCG/德勤深度研究报告

Handling AI-Generated Frontispiece

处理AI生成的扉页图片

If user chose AI generation: read the document title + first paragraphs, use an image generation tool to create a themed illustration matching the chosen design style, show for approval, then pass via
--frontispiece /path/to/image.png
如果用户选择AI生成:读取文档标题+开头段落,使用图像生成工具创建与所选设计风格匹配的主题插图,展示供用户确认,然后通过
--frontispiece /path/to/image.png
传入。

Architecture

架构

Markdown → Preprocess (split merged headings) → Parse (code-fence-aware) → Story (reportlab flowables) → PDF build
Key components:
  1. Font system: Palatino (Latin body), Songti SC (CJK body), Menlo (code) on macOS; auto-fallback on Linux
  2. CJK wrapper:
    _font_wrap()
    wraps CJK character runs in
    <font>
    tags for automatic font switching
  3. Mixed text renderer:
    _draw_mixed()
    handles CJK/Latin mixed text on canvas (cover, headers, footers)
  4. Code block handler:
    esc_code()
    preserves indentation and line breaks in reportlab Paragraphs
  5. Smart table widths: Proportional column widths based on content length, with 18mm minimum
  6. Bookmark system:
    ChapterMark
    flowable creates PDF sidebar bookmarks + named anchors
  7. Heading preprocessor:
    _preprocess_md()
    splits merged headings like
    # Part## Chapter
    into separate lines
Markdown → 预处理(拆分合并标题) → 解析(识别代码块) → 内容流(reportlab flowables) → PDF构建
核心组件:
  1. 字体系统:macOS使用Palatino(拉丁正文)、Songti SC(CJK正文)、Menlo(代码字体);Linux自动 fallback
  2. CJK包装器
    _font_wrap()
    将CJK字符段包裹在
    <font>
    标签中,实现自动字体切换
  3. 混合文本渲染器
    _draw_mixed()
    处理画布上的CJK/拉丁混合文本(封面、页眉、页脚)
  4. 代码块处理器
    esc_code()
    在reportlab Paragraph中保留缩进和换行
  5. 智能表格宽度:根据内容长度设置比例列宽,最小宽度18mm
  6. 书签系统
    ChapterMark
    内容流创建PDF侧边栏书签+命名锚点
  7. 标题预处理器
    _preprocess_md()
    # Part## Chapter
    这类合并标题拆分为单独行

Hard-Won Lessons

实战经验总结

CJK Characters Rendering as □

CJK字符显示为□

reportlab's
Paragraph
only uses the font in ParagraphStyle. If
fontName="Mono"
but text contains Chinese, they render as □. Fix: Always apply
_font_wrap()
to ALL text that might contain CJK, including code blocks.
reportlab的
Paragraph
仅使用ParagraphStyle中的字体。如果
fontName="Mono"
但文本包含中文,会显示为□。解决方法:对所有可能包含CJK的文本(包括代码块)始终应用
_font_wrap()

Code Blocks Losing Line Breaks

代码块丢失换行

reportlab treats
\n
as whitespace. Fix:
esc_code()
converts
\n
<br/>
and leading spaces →
&nbsp;
, applied BEFORE
_font_wrap()
.
reportlab将
\n
视为空白字符。解决方法
esc_code()
\n
转换为
<br/>
,将前导空格转换为
&nbsp;
,且需在
_font_wrap()
之前应用。

CJK/Latin Word Wrapping

CJK/拉丁文字换行

Default reportlab breaks lines only at spaces, causing ugly splits like "Claude\nCode". Fix: Set
wordWrap='CJK'
on body/bullet styles to allow breaks at CJK character boundaries.
默认reportlab仅在空格处换行,导致类似"Claude\nCode"的丑陋拆分。解决方法:对正文/列表样式设置
wordWrap='CJK'
,允许在CJK字符边界处换行。

Canvas Text with CJK (Cover/Footer)

画布文本中的CJK(封面/页脚)

drawString()
/
drawCentredString()
with a Latin font can't render 年/月/日 etc. Fix: Use
_draw_mixed()
for ALL user-content canvas text (dates, stats, disclaimers).
使用拉丁字体的
drawString()
/
drawCentredString()
无法渲染“年/月/日”等字符。解决方法:对所有用户提供的画布文本(日期、统计信息、免责声明)使用
_draw_mixed()

Images Silently Dropped (Relative Paths)

图片被静默丢弃(相对路径)

![alt](charts/chart_01.png)
in a markdown file used to get skipped without warning because the image path was resolved against the current working directory, not the markdown's directory. Fix:
main()
now passes
input_dir
(the .md's directory) into the builder, and the image handler resolves relative paths against it. Missing images now also emit a
WARN: image not found: ...
to stderr instead of silently dropping.
Markdown文件中的
![alt](charts/chart_01.png)
曾被跳过且无警告,因为图片路径是相对于当前工作目录而非Markdown文件所在目录解析的。解决方法
main()
现在将
input_dir
(.md文件所在目录)传入构建器,图片处理器基于该目录解析相对路径。缺失的图片现在会向stderr输出
WARN: image not found: ...
警告,而非静默丢弃。

Multi-Line Image References (pandoc
--wrap=auto
)

多行图片引用(pandoc
--wrap=auto

When feeding pandoc's output into md2pdf, pandoc's default
--wrap=auto
(72 cols) wraps long
![alt text very long](path.png)
across multiple lines, which defeated the single-line image regex. Fix:
_preprocess_md()
now collapses multi-line image references into one line (outside code fences) before parsing.
Pipeline tip: If you're piping HTML → markdown via pandoc, use
pandoc --wrap=none input.html -o output.md
to avoid wrap-related parsing issues for images and tables alike.
将pandoc的输出传入md2pdf时,pandoc默认的
--wrap=auto
(72列)会将较长的
![alt text very long](path.png)
拆分为多行,这会破坏单行图片正则表达式。解决方法
_preprocess_md()
现在会在解析前将多行图片引用(代码块外的)合并为单行。
管道技巧:如果通过pandoc将HTML转换为Markdown,使用
pandoc --wrap=none input.html -o output.md
以避免图片和表格的换行相关解析问题。

Input Format

输入格式

This skill takes Markdown files only as input. If you have HTML, DOCX, or other formats, convert them to markdown first (e.g.
pandoc --wrap=none
). Embedded HTML blocks in markdown are passed through as text — pre-process any visual content (charts, complex tables) into plain markdown tables or image references before invoking md2pdf.
本技能仅接受Markdown文件作为输入。如果是HTML、DOCX或其他格式,请先转换为Markdown(例如使用
pandoc --wrap=none
)。Markdown中的嵌入式HTML块会作为文本传递——在调用md2pdf之前,需将任何可视化内容(图表、复杂表格)预处理为纯Markdown表格或图片引用。

Configuration Reference

配置参考

ArgumentDefaultDescription
--input
(required)Path to markdown file
--output
output.pdf
Output PDF path
--title
From first H1Document title for cover page
--subtitle
""
Subtitle text
--author
""
Author name
--date
TodayDate string
--version
""
Version string for cover
--watermark
""
Watermark text (empty = none)
--theme
warm-academic
Color theme name
--theme-file
""
Custom theme JSON file path
--cover
true
Generate cover page
--toc
true
Generate table of contents
--page-size
A4
Page size (A4 or Letter)
--frontispiece
""
Full-page image after cover
--banner
bundled
assets/backcover-banner.jpg
Back cover banner image (pass
none
to disable)
--header-title
""
Report title in page header
--footer-left
authorBrand/author in footer
--stats-line
""
Stats on cover
--stats-line2
""
Second stats line
--edition-line
""
Edition line at cover bottom
--disclaimer
""
Back cover disclaimer
--copyright
""
Back cover copyright
--code-max-lines
30
Max lines per code block
--image-cover
false
Use frontispiece as full-bleed cover (page 1), text cover becomes page 2
--heading-top-spacer
5
Top spacer before H1/H2 chapter titles in mm
--wm-size
auto (half page width)Watermark font size; auto-scales so text width ≈ 50% of page width
--wm-opacity
0.1
Watermark opacity (0.0–1.0)
--wm-angle
35
Watermark rotation angle in degrees
--wm-spacing-x
9999
Watermark horizontal spacing in pt (≥2000 = single centered per page)
--wm-spacing-y
9999
Watermark vertical spacing in pt (≥2000 = single centered per page)
参数默认值描述
--input
必填Markdown文件路径
--output
output.pdf
输出PDF路径
--title
第一个H1标题封面的文档标题
--subtitle
""
副标题文本
--author
""
作者姓名
--date
今日日期字符串
--version
""
封面的版本字符串
--watermark
""
水印文字(空值表示无水印)
--theme
warm-academic
配色主题名称
--theme-file
""
自定义主题JSON文件路径
--cover
true
生成封面
--toc
true
生成目录
--page-size
A4
页面尺寸(A4或Letter)
--frontispiece
""
封面后的全页图片
--banner
内置
assets/backcover-banner.jpg
封底横幅图片(传入
none
可禁用)
--header-title
""
页面页眉中的报告标题
--footer-left
作者页脚中的品牌/作者信息
--stats-line
""
封面的统计信息行
--stats-line2
""
第二行统计信息
--edition-line
""
封面底部的版本行
--disclaimer
""
封底的免责声明
--copyright
""
封底的版权信息
--code-max-lines
30
每个代码块的最大行数
--image-cover
false
将扉页图片用作全 bleed 封面(第1页),文字封面变为第2页
--heading-top-spacer
5
H1/H2章节标题上方的间距(单位:mm)
--wm-size
自动(页面宽度的一半)水印字体大小;自动缩放使文本宽度≈页面宽度的50%
--wm-opacity
0.1
水印透明度(0.0–1.0)
--wm-angle
35
水印旋转角度(单位:度)
--wm-spacing-x
9999
水印水平间距(单位:pt,≥2000表示每页居中单个水印)
--wm-spacing-y
9999
水印垂直间距(单位:pt,≥2000表示每页居中单个水印)

Themes

主题

Available:
warm-academic
,
nord-frost
,
github-light
,
solarized-light
,
paper-classic
,
ocean-breeze
,
consulting-navy
.
Each theme defines: page background, ink color, accent color, faded text, border, code background, watermark tint.
可用主题:
warm-academic
nord-frost
github-light
solarized-light
paper-classic
ocean-breeze
consulting-navy
每个主题定义:页面背景、文字颜色、强调色、淡色文本、边框、代码背景、水印色调。

Fallback: pandoc + XeLaTeX

备用方案:pandoc + XeLaTeX

When reportlab fails (e.g. wide/complex tables cause infinite loops in table width calculation), fall back to pandoc with XeLaTeX. This produces high-quality CJK PDFs with proper table handling.
当reportlab失败时(例如宽/复杂表格导致表格宽度计算无限循环),回退到使用XeLaTeX的pandoc。这可生成高质量CJK PDF,且表格处理更完善。

When to use pandoc engine

何时使用pandoc引擎

  • User chose
    latex-clean
    theme (k) — pandoc is the primary engine, not a fallback
  • Document has many wide multi-column tables (reportlab's table layout may hang)
  • Document needs LaTeX-quality typesetting (justified text, hyphenation)
  • reportlab md2pdf.py hangs or crashes on the input
  • 用户选择
    latex-clean
    主题(k)——pandoc是主引擎而非备用方案
  • 文档包含大量宽多列表格(reportlab的表格布局可能卡顿)
  • 文档需要LaTeX级排版(对齐文本、断字)
  • reportlab的md2pdf.py在处理输入时卡顿或崩溃

Basic command

基础命令

pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
--toc -V toc-title="目录" -V documentclass=article
pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
--toc -V toc-title="目录" -V documentclass=article

Adding watermark + headers/footers

添加水印 + 页眉/页脚

pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
-V colorlinks=true -V linkcolor=red -V toccolor=red -V urlcolor=red
--toc -V toc-title="目录" -V documentclass=article
-V header-includes=' \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small 页眉左侧文字} \fancyhead[R]{\small 页眉右侧文字} \fancyfoot[C]{\thepage} \usepackage{draftwatermark} \SetWatermarkText{水印文字} \SetWatermarkScale{0.5} \SetWatermarkColor[gray]{0.9} '
pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
-V colorlinks=true -V linkcolor=red -V toccolor=red -V urlcolor=red
--toc -V toc-title="目录" -V documentclass=article
-V header-includes=' \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small 页眉左侧文字} \fancyhead[R]{\small 页眉右侧文字} \fancyfoot[C]{\thepage} \usepackage{draftwatermark} \SetWatermarkText{水印文字} \SetWatermarkScale{0.5} \SetWatermarkColor[gray]{0.9} '

Pandoc theme presets

Pandoc主题预设

Each preset defines a complete set of pandoc
-V
flags. Use the full command from "Adding watermark + headers/footers" above, replacing the color/link flags per preset.
ThemelinkcolortoccolorurlcolorWatermark colorNotes
chinese-red
red
red
red
[gray]{0.9}
朱红正式,适合政企报告、白皮书
warm-academic
brown
brown
brown
[gray]{0.9}
陶土色调,温润学术风
classic-thesis
brown
brown
brown
[gray]{0.85}
LaTeX classicthesis 灵感
ieee-journal
blue
blue
blue
[gray]{0.9}
藏蓝严谨,期刊风格
github-light
blue
blue
blue
[gray]{0.92}
极简蓝白,程序员友好
ink-wash
black
black
black
[gray]{0.92}
水墨素雅,文学/设计类
nord-frost
teal
teal
teal
[gray]{0.9}
北欧冰霜蓝灰
consulting-navy
blue
blue
blue
[gray]{0.88}
咨询深蓝,研究报告风
每个预设定义一套完整的pandoc
-V
标志。使用上方“添加水印 + 页眉/页脚”中的完整命令,根据预设替换颜色/链接标志。
主题linkcolortoccolorurlcolor水印颜色说明
chinese-red
red
red
red
[gray]{0.9}
朱红正式,适合政企报告、白皮书
warm-academic
brown
brown
brown
[gray]{0.9}
陶土色调,温润学术风
classic-thesis
brown
brown
brown
[gray]{0.85}
LaTeX classicthesis 灵感
ieee-journal
blue
blue
blue
[gray]{0.9}
藏蓝严谨,期刊风格
github-light
blue
blue
blue
[gray]{0.92}
极简蓝白,程序员友好
ink-wash
black
black
black
[gray]{0.92}
水墨素雅,文学/设计类
nord-frost
teal
teal
teal
[gray]{0.9}
北欧冰霜蓝灰
consulting-navy
blue
blue
blue
[gray]{0.88}
咨询深蓝,研究报告风

chinese-red 完整示例(本次一滕项目实际使用)

chinese-red 完整示例(本次一滕项目实际使用)

pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
-V colorlinks=true -V linkcolor=red -V toccolor=red -V urlcolor=red
--toc -V toc-title="目录" -V documentclass=article
-V header-includes=' \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small 报告标题 | 品牌名} \fancyhead[R]{\small 商业机密} \fancyfoot[C]{\thepage} \usepackage{draftwatermark} \SetWatermarkText{商业机密} \SetWatermarkScale{0.5} \SetWatermarkColor[gray]{0.9} '
pandoc input.md -o output.pdf
--pdf-engine=xelatex
-V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo"
-V geometry:margin=2.5cm -V fontsize=11pt
-V colorlinks=true -V linkcolor=red -V toccolor=red -V urlcolor=red
--toc -V toc-title="目录" -V documentclass=article
-V header-includes=' \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small 报告标题 | 品牌名} \fancyhead[R]{\small 商业机密} \fancyfoot[C]{\thepage} \usepackage{draftwatermark} \SetWatermarkText{商业机密} \SetWatermarkScale{0.5} \SetWatermarkColor[gray]{0.9} '

latex-clean 完整示例(最简洁的 LaTeX 学术风格)

latex-clean 完整示例(最简洁的 LaTeX 学术风格)

选择
latex-clean
时,跳过 reportlab,直接使用 pandoc 生成。特点:无封面、无扉页、 无装饰色块,纯 LaTeX 排版 + 点线 TOC 引导符,适合内容为王的学术/技术文档。
pandoc input.md -o output.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo" \
  -V geometry:margin=2.5cm -V fontsize=11pt \
  -V colorlinks=true -V linkcolor=brown -V toccolor=brown -V urlcolor=brown \
  --toc -V toc-title="目录" -V documentclass=article
如需添加页眉页脚或水印,参考上方 "Adding watermark + headers/footers" 追加
-V header-includes
选择
latex-clean
时,跳过reportlab,直接使用pandoc生成。特点:无封面、无扉页、无装饰色块,纯LaTeX排版 + 点线TOC引导符,适合内容为王的学术/技术文档。
pandoc input.md -o output.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Songti SC" -V mainfont="Palatino" -V monofont="Menlo" \
  -V geometry:margin=2.5cm -V fontsize=11pt \
  -V colorlinks=true -V linkcolor=brown -V toccolor=brown -V urlcolor=brown \
  --toc -V toc-title="目录" -V documentclass=article
如需添加页眉页脚或水印,参考上方“添加水印 + 页眉/页脚”追加
-V header-includes

Known limitations (pandoc fallback)

pandoc备用方案的已知限制

  • No cover page (pandoc article class has no built-in cover — use
    --include-before-body
    with a LaTeX snippet if needed)
  • Frontispiece/back cover not supported (use md2pdf.py for these)
  • symbols may warn in Palatino — they render via CJK font fallback, safe to ignore
  • ASCII art diagrams render as code blocks (same as md2pdf.py)
  • 无封面(pandoc的article类无内置封面——如需封面,可使用
    --include-before-body
    搭配LaTeX代码段)
  • 不支持扉页/封底(如需这些功能,请使用md2pdf.py)
  • 符号在Palatino字体下可能发出警告——它们会通过CJK字体 fallback 渲染,可忽略
  • ASCII艺术图会渲染为代码块(与md2pdf.py一致)

Dependencies (pandoc fallback)

pandoc备用方案的依赖

Requires
pandoc
and a TeX distribution with XeLaTeX:
brew install pandoc
brew install --cask mactex-no-gui   # or basictex
需要
pandoc
和包含XeLaTeX的TeX发行版:
brew install pandoc
brew install --cask mactex-no-gui   # 或basictex

Dependencies

依赖

bash
pip install reportlab --break-system-packages
bash
pip install reportlab --break-system-packages