马克吐文是一个通用 Skill,用来把 AI 生成的 Markdown 转成 Word、PDF 或 Excel。
仓库地址:https://github.com/EchoRan6319/mark-to-win
Skill 有 三种 Markdown 转 PDF 的路径,按优先级依次尝试:
1. HTML PDF 引擎(最优先)
这是效果最好的路径,流程是:
-
Pandoc 渲染 Markdown → HTML5(mark_twain.py:845-872)
- 使用
pandoc --to html5 --standalone --mathml,支持数学公式、脚注、任务列表等扩展语法
- 使用
-
注入 GitHub 风格 CSS(mark_twain.py:830-842)
- 把
MARKDOWN_READER_CSS(76-219 行)注入 HTML<head>,模拟 GitHub Markdown 阅读器的排版样式
- 把
-
Chrome 无头模式打印 PDF(mark_twain.py:875-900)
- 调用
chrome --headless --print-to-pdf=output.pdf,用浏览器渲染引擎把 HTML 转成 PDF
- 调用
这是最接近 Markdown 阅读器效果的方式,支持 MathML 数学公式渲染、代码高亮、表格样式等。
2. Pandoc 直接转 PDF(次优先)
当 Chrome 不可用时,尝试用 Pandoc 直接生成 PDF(mark_twain.py:753-794):
-
需要一个 PDF 引擎,如
xelatex、lualatex、typst、weasyprint等 -
对中日韩文字,自动选择 CJK 字体(微软雅黑、苹方、Noto Sans CJK 等)
-
适合学术/LaTeX 风格的 PDF 输出
3. ReportLab 原生渲染(兜底)
前两个都不可用时,用 Python 的 ReportLab 库自己解析和渲染(mark_twain.py:610-718):
-
解析 Markdown(mark_twain.py:359-448)—— 把 Markdown 拆成 Block 对象(标题、段落、列表、引用、代码块、表格)
-
注册 CJK 字体(mark_twain.py:549-589)—— 自动探测系统里的中文字体(微软雅黑 → SimHei → SimSun → STSong-Light 依次尝试)
-
用 ReportLab 的 platypus 排版 —— 把 Block 转成
Paragraph、Preformatted、Table等元素,生成 A4 页面的 PDF
这种方式不需要任何外部依赖,但对复杂 Markdown(数学公式、脚注等)只保留纯文本。