{"id":"bd0be45d-467d-46e5-8c7f-3af5581dde78","entityType":"agent","slug":"clawhub-zhaobod1-huo15-markdown-export","name":"Huo15 Markdown Export","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhaobod1-huo15-markdown-export","canonicalPath":"/agent/clawhub-zhaobod1-huo15-markdown-export","generatedAt":"2026-10-11T20:58:48.385Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":null},"description":"火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app... Skill: Huo15 Markdown Export Owner: zhaobod1 Summary: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app... Tags: latest:0.4.4 Version history: v0.4.4 | 2026-05-12T04:31:00.824Z | user v0.4.4 unsafe_host_check 扩 LAN IP + 跨 skill 适用。v0.4.3 只查 localhost,这次扩 RFC 1918 私网(192.168/10/172.16-31)+ 169.254 link-local + :","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-markdown-export","sourceUrl":"https://clawhub.ai/zhaobod1/huo15-markdown-export","homepage":"https://clawhub.ai/zhaobod1/skills/huo15-markdown-export","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhaobod1/huo15-markdown-export","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhaobod1/skills/huo15-markdown-export","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":null},"stars":null,"forks":null,"downloads":1021,"packageName":null,"latestVersion":"0.4.4","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:10:57.779Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T17:10:57.786Z","lastCrawledAt":"2026-10-11T17:10:57.779Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T17:10:57.779Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.4","createdAt":"2026-05-12T04:31:00.824Z","changelog":"v0.4.4 unsafe_host_check 扩 LAN IP + 跨 skill 适用。v0.4.3 只查 localhost,这次扩 RFC 1918 私网(192.168/10/172.16-31)+ 169.254 link-local + ::1。next_actions 加 structured unsafe_host_check 字段,AI 收到任何 share/preview URL 都跑这表 → host 命中就降级发文件。ai_instruction 强调跨 skill 适用 — 不只本 skill 的 enhance_share_file 输出,任何 enhance_preview / gateway static / agent 自写 HTML 等返回的 URL 都按此把关。","fileCount":36,"zipByteSize":88405},{"version":"0.4.3","createdAt":"2026-05-12T04:25:20.702Z","changelog":"v0.4.3 默认发文件不发链接(harness 思维)+ 修 localhost URL 404。用户报 enhance_share_file 返 http://localhost:18789/... URL 企微点开 404。按 harness 思维改造 next_actions:priority=1 send_file_to_channel(企微/钉钉/微信对话框直发文件,不依赖公网 URL)/ priority=2 share_via_public_url(明确要链接 / 文件 > 25MB 时,AI 必须检查 URL localhost 不发)/ priority=3 local_path 降级。加 --prefer file|link 参数。SKILL §九模式 F 重写。","fileCount":35,"zipByteSize":85494},{"version":"0.4.2","createdAt":"2026-05-12T04:16:45.934Z","changelog":"v0.4.2 三件套修复:(1)apple-tech 苹果科技风作默认主题(大字 hero + 紧字距 + 黑白蓝 + 大留白 + 圆角 panel,屏幕原生 SF Pro / PDF 切 Helvetica Neue 反 Type 3);(2)修 YAML frontmatter 被渲染成正文段错乱,render.js parse 前 stripFrontMatter + meta 注入 OG;(3)加强'火一五排版发布技能'触发词,description 开头 3 次重复 + aliases 前 8 位全锚词,补'苹果科技风排版'/'火一五苹果风';修 anchor permalink 染色致 h1/h2 全蓝色 bug。","fileCount":35,"zipByteSize":82649},{"version":"0.4.1","createdAt":"2026-05-07T10:07:37.458Z","changelog":"v0.4.1 PDF 文字浅灰看不清修复 — 反 Type 3 字体。macOS Headless Chromium 把 Apple 受保护字体(-apple-system/PingFang/SF Pro)+ OpenType CFF 字体(Source Han/Noto CJK/Hiragino Sans GB)嵌入 PDF 时走 Type 3 路径渲染,WPS/Foxit 看浅灰。修法字体栈剔除禁忌优先 PT Serif/Open Sans + 中文 fallback 用 Songti SC(macOS 预装真 TTC)。typora-night 加 @media print 自动反色 1.4→17.4:1。详见 themes/DESIGN.md §7.5。","fileCount":34,"zipByteSize":77922},{"version":"0.4.0","createdAt":"2026-05-07T05:50:30.908Z","changelog":"v0.4.0 主题系统重构 + 4 个新预设(anthropic-doc/editorial-magazine/manuscript-book/tufte-handout)+ themes/DESIGN.md 设计规范 + 抽 _tokens.css + 修 3 处 AI Slop 红线","fileCount":34,"zipByteSize":73609},{"version":"0.3.1","createdAt":"2026-05-05T17:02:23.311Z","changelog":"v0.3.1 加 scripts/install-to-workspaces.sh 治本多 workspace 安装(双层 skills/skills/ + node_modules symlink 共享 default,节省磁盘 6GB→100MB)。displayName=火一五排版技能,11 个'火一五'开头别名(火一五排版/火一五Markdown技能/火一五PDF导出技能/火一五出版技能/火一五发布技能/火一五美化排版/火一五分享文档/火一五长图技能/火一五二维码PDF 等)。","fileCount":28,"zipByteSize":54441},{"version":"0.3.0","createdAt":"2026-05-05T16:22:46.301Z","changelog":"v0.3.0 首发 — 火一五排版技能。Typora 风 markdown 渲染管线:9 工具(md-publish 多端发布+KB归档/md-share/md2pdf/docx/html/image/wechat/preview/diff)+ 7 主题 + capability detection 集成 huo15-openclaw-enhance 拿企微公网 share URL + HTML 自动 OG 卡片 + PDF --qr-url 嵌二维码。无 enhance 也独立可跑。","fileCount":27,"zipByteSize":51409}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-markdown-export","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:58:48.381Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-markdown-export/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":null},"readme":"Skill: Huo15 Markdown Export\n\nOwner: zhaobod1\n\nSummary: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app...\n\nTags: latest:0.4.4\n\nVersion history:\n\nv0.4.4 | 2026-05-12T04:31:00.824Z | user\n\nv0.4.4 unsafe_host_check 扩 LAN IP + 跨 skill 适用。v0.4.3 只查 localhost,这次扩 RFC 1918 私网(192.168/10/172.16-31)+ 169.254 link-local + ::1。next_actions 加 structured unsafe_host_check 字段,AI 收到任何 share/preview URL 都跑这表 → host 命中就降级发文件。ai_instruction 强调跨 skill 适用 — 不只本 skill 的 enhance_share_file 输出,任何 enhance_preview / gateway static / agent 自写 HTML 等返回的 URL 都按此把关。\n\nv0.4.3 | 2026-05-12T04:25:20.702Z | user\n\nv0.4.3 默认发文件不发链接(harness 思维)+ 修 localhost URL 404。用户报 enhance_share_file 返 http://localhost:18789/... URL 企微点开 404。按 harness 思维改造 next_actions:priority=1 send_file_to_channel(企微/钉钉/微信对话框直发文件,不依赖公网 URL)/ priority=2 share_via_public_url(明确要链接 / 文件 > 25MB 时,AI 必须检查 URL localhost 不发)/ priority=3 local_path 降级。加 --prefer file|link 参数。SKILL §九模式 F 重写。\n\nv0.4.2 | 2026-05-12T04:16:45.934Z | user\n\nv0.4.2 三件套修复:(1)apple-tech 苹果科技风作默认主题(大字 hero + 紧字距 + 黑白蓝 + 大留白 + 圆角 panel,屏幕原生 SF Pro / PDF 切 Helvetica Neue 反 Type 3);(2)修 YAML frontmatter 被渲染成正文段错乱,render.js parse 前 stripFrontMatter + meta 注入 OG;(3)加强'火一五排版发布技能'触发词,description 开头 3 次重复 + aliases 前 8 位全锚词,补'苹果科技风排版'/'火一五苹果风';修 anchor permalink 染色致 h1/h2 全蓝色 bug。\n\nv0.4.1 | 2026-05-07T10:07:37.458Z | user\n\nv0.4.1 PDF 文字浅灰看不清修复 — 反 Type 3 字体。macOS Headless Chromium 把 Apple 受保护字体(-apple-system/PingFang/SF Pro)+ OpenType CFF 字体(Source Han/Noto CJK/Hiragino Sans GB)嵌入 PDF 时走 Type 3 路径渲染,WPS/Foxit 看浅灰。修法字体栈剔除禁忌优先 PT Serif/Open Sans + 中文 fallback 用 Songti SC(macOS 预装真 TTC)。typora-night 加 @media print 自动反色 1.4→17.4:1。详见 themes/DESIGN.md §7.5。\n\nv0.4.0 | 2026-05-07T05:50:30.908Z | user\n\nv0.4.0 主题系统重构 + 4 个新预设(anthropic-doc/editorial-magazine/manuscript-book/tufte-handout)+ themes/DESIGN.md 设计规范 + 抽 _tokens.css + 修 3 处 AI Slop 红线\n\nv0.3.1 | 2026-05-05T17:02:23.311Z | user\n\nv0.3.1 加 scripts/install-to-workspaces.sh 治本多 workspace 安装(双层 skills/skills/ + node_modules symlink 共享 default,节省磁盘 6GB→100MB)。displayName=火一五排版技能,11 个'火一五'开头别名(火一五排版/火一五Markdown技能/火一五PDF导出技能/火一五出版技能/火一五发布技能/火一五美化排版/火一五分享文档/火一五长图技能/火一五二维码PDF 等)。\n\nv0.3.0 | 2026-05-05T16:22:46.301Z | user\n\nv0.3.0 首发 — 火一五排版技能。Typora 风 markdown 渲染管线:9 工具(md-publish 多端发布+KB归档/md-share/md2pdf/docx/html/image/wechat/preview/diff)+ 7 主题 + capability detection 集成 huo15-openclaw-enhance 拿企微公网 share URL + HTML 自动 OG 卡片 + PDF --qr-url 嵌二维码。无 enhance 也独立可跑。\n\nArchive index:\n\nArchive v0.4.4: 36 files, 88405 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (9146b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (11578b), scripts/md-share.sh (10250b), scripts/md2docx.sh (1484b), scripts/md2html.js (2131b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6588b), scripts/md2pdf.sh (2183b), scripts/md2wechat.js (1591b), skill-card.md (2631b), SKILL.md (31962b), templates/pdf-print.css (1501b), templates/README.md (1788b), themes/_tokens.css (8578b), themes/academic.css (2874b), themes/anthropic-doc.css (4098b), themes/apple-tech.css (8331b), themes/DESIGN.md (13605b), themes/editorial-magazine.css (5989b), themes/github.css (1875b), themes/huo15-brand.css (3613b), themes/manuscript-book.css (5473b), themes/tufte-handout.css (6287b), themes/typora-newsprint.css (1728b), themes/typora-night.css (3748b), themes/wechat.css (3673b), themes/xiaohongshu.css (3795b)\n\nFile v0.4.4:SKILL.md\n\n---\nname: huo15-markdown-export\ndisplayName: 火一五排版发布技能\ndescription: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **apple-tech(苹果科技风,大字 hero + 紧字距 + 黑白蓝 + 大留白,默认主题)**,其他 11 套:typora-newsprint 报纸 / typora-night 暗色 / github / academic / 微信 / 小红书 / huo15-brand 品牌 / anthropic-doc Anthropic 文档 / editorial-magazine 杂志 / manuscript-book 书稿 / tufte-handout Tufte 边注。Node + markdown-it + Puppeteer + qrcode。与 office-doc 互补(它走公文,本 skill 走 md 视觉美学)。v0.4.2:加 apple-tech 默认 + 修 YAML frontmatter 错乱渲染 + 强化触发词。v0.4.1:反 Type 3 字体修复(PDF 浅灰看不清);v0.4.0:抽 _tokens.css + DESIGN.md 团队规范(8 大设计范式 + 反 AI Slop / Type 3 红线)。capability detection 集成 enhance:md-share/md-publish 输出 JSON,AI chain 调 enhance_share_file 拿公网 URL 发企微/钉钉/微信;无 enhance 独立可跑。触发词:火一五排版发布、火一五排版发布技能、火一五排版、火一五出版、火一五发布、火一五markdown、火一五PDF、火一五导出、排版发布、导出PDF、导出Word、md转PDF、md转Word、md2pdf、md2docx、Typora、长图、小红书、朋友圈长图、微信公众号、博客导出、复盘、changelog、版本对比、品牌报告、发到企微、发给客户、分享链接、公网链接、卡片预览、二维码、苹果科技风、Apple 风、科技风、技术博客、产品文档、品牌故事、深度长文、小说、长篇随笔、研究报告、数据分析、教学讲义、Anthropic 文档风、杂志体、书稿体、Tufte 边注。\nversion: 0.4.4\naliases:\n  - 火一五排版发布技能\n  - 火一五排版发布\n  - 火一五排版\n  - 火一五排版技能\n  - 火一五出版技能\n  - 火一五出版\n  - 火一五发布技能\n  - 火一五发布\n  - 火一五Markdown\n  - 火一五Markdown技能\n  - 火一五Markdown排版发布\n  - 火一五PDF导出\n  - 火一五PDF导出技能\n  - 火一五PDF\n  - 火一五导出\n  - 火一五Typora替代\n  - 火一五多端发布技能\n  - 火一五美化排版\n  - 火一五分享文档\n  - 火一五长图技能\n  - 火一五二维码PDF\n  - 火一五苹果科技风\n  - 火一五Apple风\n  - 苹果科技风排版\n  - markdown 渲染\n  - markdown 导出\n  - md2pdf\n  - md2docx\n  - md2image\n  - md2wechat\n  - md-publish\ndependencies:\n  npm-packages:\n    - markdown-it\n    - puppeteer\n    - katex\n    - juice\n    - highlight.js\n  optional-binaries:\n    - pandoc        # 仅 md2docx 必需\n    - weasyprint    # 仅 --engine pandoc 走 weasyprint 路线时\n---\n\n# 火一五 Markdown 视觉渲染管线 v0.1.0\n\n> Typora 不需要复刻——它的能力本来就是开源拼装的。这个 skill 把同一套拼装做成 AI 可调用的版本。\n\n**愿景:** 加速企业向全场景人工智能机器人转变\n**理念:** 打破信息孤岛,用一套系统驱动企业增长\n\n---\n\n## 〇、与 `huo15-openclaw-office-doc` 的边界(必读)\n\n| 维度 | huo15-openclaw-office-doc | huo15-markdown-export(本 skill) |\n|---|---|---|\n| 输入 | 自然语言指令(写合同/写 PRD) | 已有的 markdown 文件 |\n| 引擎 | python-docx + reportlab(结构化直出) | markdown-it + Puppeteer + Pandoc |\n| 适用 | 合同 / PRD / 会议纪要 / 故障报告等**结构化业务公文** | 技术博客 / 复盘 / 营销文案 / 客户报告等**视觉化 markdown** |\n| 主题 | 一套企业公文规范 | 7 套(报纸风/暗色/学术/公众号/小红书/品牌等) |\n| 多端 | docx / PDF | docx / PDF / HTML / 长图 / 公众号 inline / live preview |\n\n**选择规则**:用户给\"目的+主题\"让你**写**新文档 → office-doc;用户给一份**已有的 .md** 让你\"导出/渲染/换主题/做长图\" → 本 skill。\n\n---\n\n## 一、能干什么(7 个工具一图)\n\n```\ninput.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  juice 内联,粘到公众号编辑器\n           │\n           ├──► md-preview.js    ──► http://localhost  改文件自动 reload + 主题热切换\n           │\n           └──► md-diff.sh <from> <to>  ──► changelog.pdf   git ref 之间的变更报告\n```\n\n---\n\n## 二、最小可用流程\n\n```bash\n# 1. 第一次用先装依赖\nbash scripts/install-deps.sh\n\n# 2. 用样例文件试一发\nnode scripts/md2pdf-puppet.js examples/sample.md             # → examples/sample.pdf\nnode scripts/md2html.js       examples/sample.md             # → examples/sample.html\nnode scripts/md2image.js      examples/sample.md             # → examples/sample.png(小红书)\nnode scripts/md2wechat.js     examples/sample.md             # → examples/sample.wechat.html\n\n# 3. 实时预览\nnode scripts/md-preview.js    examples/sample.md             # 浏览器开 http://127.0.0.1:7777\n```\n\n---\n\n## 三、主题选择决策树(给 AI 用)\n\n> v0.4.0 起 11 套主题分两大流派阵营:**信息密集**(给信息读者)/ **视觉沉浸**(给阅读者)。\n> 设计规范完整版见 [`themes/DESIGN.md`](themes/DESIGN.md)。\n\n### 默认 / 通用首选\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"苹果风 / 科技风 / 产品发布稿 / 默认就行\" | **`apple-tech`** ⭐ v0.4.2 默认 | `md2pdf` 或 `md2html` |\n\n### 信息密集类(短段落 + 列表 + 代码)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"技术博客 / 长文随笔 / 个人复盘 / 报纸感\" | `typora-newsprint` | `md2pdf` 或 `md2html` |\n| \"技术博客 / **产品文档 / Anthropic 风 / Stripe 风** / 行业标杆审美\" | **`anthropic-doc`** ⭐ v0.4.0 | `md2html` 或 `md2pdf` |\n| \"GitHub / 开源 / API 文档\" | `github` | `md2pdf` |\n| \"夜间阅读 / 投影 / 暗色\" | `typora-night` | `md2html` |\n| \"学术论文 / IEEE / 投稿初稿\" | `academic` | `md2pdf` |\n| \"公司报告 / 客户提案 / 内部周报 / 带页眉页脚\" | `huo15-brand` | `md2pdf` |\n| \"changelog / release notes / 版本对比\" | `huo15-brand` | `md-diff` |\n\n### 视觉沉浸类(长段落 + 节奏 + 留白)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"**品牌故事 / 商业杂志 / 深度长文 / 访谈**\" | **`editorial-magazine`** ⭐ v0.4.0 | `md2pdf` 或 `md2html` |\n| \"**小说 / 长篇随笔 / 思考长文 / 沉浸阅读**\" | **`manuscript-book`** ⭐ v0.4.0 | `md2pdf` |\n| \"**研究报告 / 数据分析 / 教学讲义 / 论证型长文**\" | **`tufte-handout`** ⭐ v0.4.0 | `md2html`(右挂边注需 ≥1100px 宽屏) |\n\n### 多端发布类(目标编辑器特殊)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"微信公众号 / 推文\" | `wechat` | `md2wechat`(juice 内联化) |\n| \"小红书 / 朋友圈 / 长图文\" | `xiaohongshu` | `md2image`(1080px PNG) |\n\n**用户没说就默认** `apple-tech`(苹果科技风,通用 + 极简 + 黑白蓝 + 大留白,适合 90% 场景)。\n**做技术文档无脑选** `anthropic-doc`(2026 年行业主流审美)。\n\n---\n\n## 四、关键参数速查\n\n### `md2pdf-puppet.js`\n```bash\nnode scripts/md2pdf-puppet.js <input.md> [output.pdf] \\\n  --theme typora-newsprint     # 11 选 1(见 §三 决策树)\n  --paper A4                   # A4 / Letter / A3 / A5\n  --margin 18                  # 四边等距 mm(默认 18)\n  --header \"我的文档\"          # 自定义页眉(huo15-brand 主题已内置)\n  --footer \"{pageNumber} / {totalPages}\"\n  --print-urls                 # 链接后追加 (URL) 文本\n  --no-mermaid                 # 跳过 mermaid 等待加速\n```\n\n### `md2docx.sh`(需先装 pandoc)\n```bash\nbash scripts/md2docx.sh <input.md> [output.docx] \\\n  --no-toc                              # 不要目录\n  --reference templates/reference.docx  # 自定义模板\n```\n\n### `md2image.js`\n```bash\nnode scripts/md2image.js <input.md> [output.png] \\\n  --theme xiaohongshu          # 默认 xiaohongshu\n  --width 1080                 # 画幅宽度\n  --scale 2                    # 倍清(2 = retina)\n```\n\n### `md-diff.sh`\n```bash\nbash scripts/md-diff.sh <from-ref> <to-ref> [output.pdf] \\\n  --theme huo15-brand          # 默认 huo15-brand\n  --repo /path/to/git/repo     # 默认当前目录\n```\n\n---\n\n## 五、AI 调用模式(集成到对话流)\n\n### 模式 A:一步导出\n> 用户:\"把这份分析报告导成 PDF 给我\"\n> AI:Bash → `bash scripts/md2pdf.sh /tmp/report.md /tmp/report.pdf --theme huo15-brand`\n\n### 模式 B:导出 + 转发(联动 huo15-wecom)\n> 用户:\"复盘报告导成 PDF 发到运营群\"\n> 1. AI 写 `report.md` 到 `/tmp`\n> 2. AI 调本 skill 导 PDF → `/tmp/report.pdf`\n> 3. AI 调 `huo15-wecom` 发文件到目标群\n\n### 模式 C:多端并行(一份 md 多种产出)\n> 用户:\"这篇文章我要发公众号 + 小红书 + 个人博客\"\n> AI 并行:\n> - `md2wechat.js article.md` → 公众号粘贴版\n> - `md2image.js article.md --theme xiaohongshu` → 小红书长图\n> - `md2html.js article.md --theme typora-newsprint` → 博客 HTML\n\n### 模式 D:AI 改主题\n> 用户:\"主题再暖一点,标题大一点\"\n> AI 用 Edit 工具直接改 `themes/typora-newsprint.css` 的 `--accent` 与 `h1 font-size`,**不需要写新脚本**——这是本 skill 的元能力。\n\n### 模式 E:版本对比 PDF\n> 用户:\"v1.2 到 v1.3 都改了什么,出个 PDF 给客户\"\n> AI:`bash scripts/md-diff.sh v1.2.0 v1.3.0 release-notes.pdf --theme huo15-brand`\n\n### 模式 F:企微/钉钉/微信对话渲染送达(harness 思维,**最常用**)\n> 用户(在企微对话框):\"把这份复盘渲染成 PDF 发给我\"\n> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"`(默认 `--prefer file`)\n> 2. AI 拿到 stdout 的 JSON,看到 `files[0].path = /tmp/.../report-20260505.pdf` + 3 个 `next_actions`\n> 3. **priority=1 send_file_to_channel**:AI 看当前会话有哪个 `*_send_file` / `*_upload_file` 工具(`wecom_send_file` / `wechat_send_file` / `dingtalk_send_file` 等),**直接发文件到对话框**——用户在企微/钉钉/微信里看到的是带预览的文件消息,点开下载\n> 4. **priority=2 share_via_public_url(fallback)**:send_file 类工具都不可见 / 文件 > 25MB / 用户明确说\"给我链接\" → 才调 `enhance_share_file` 拿公网 URL。**收到 URL 后检查 host**:含 `localhost:18789` 就不要发(用户看 404 — 见 §八踩坑 §14),降级 priority=3\n> 5. **priority=3 local_path(降级)**:把 `file.path` 告诉用户(终端 / SSH 场景)\n> **用户明确要链接**:加 `--prefer link` 反转顺序,先拿 URL 再降级到发文件\n\n### 模式 F 变体:用户明确要分享链接\n> 用户:\"给我个公网链接发给客户,链接形式\"\n> AI:`bash scripts/md-share.sh report.md --mode pdf --label \"...\" --prefer link`\n> → JSON.next_actions 的 priority=1 变成 `share_via_public_url`,AI 调 `enhance_share_file` 拿 URL 发出\n\n### 模式 G:发布 + 多端 + 自动归档(v0.3.0,**复盘场景首选**)\n> 用户:\"把 Q1 复盘**发布**出去,我可能要发企微 + 朋友圈 + 邮件\"\n> AI:`bash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘\"`(默认 mode=all)\n> → 一次渲染 4 端产物 + 写归档 `~/knowledge/huo15/<日期>-<slug>.md` + JSON.post_share_actions\n> → 4 个 file 各调一次 `enhance_share_file` 拿 URL → AI 用 Edit 把 URL 回写到 KB 归档 frontmatter `share_urls:`\n> → 组装\"多版本菜单\"消息回当前会话(PDF / 长图 / HTML / 公众号 inline)— **用户自己**决定转发哪个,不替用户广播\n> 加 `--with-qr` 触发\"二阶段二维码\":AI 用 PDF URL 二刷 `md2pdf-puppet --qr-url <url>` 出打印版\n\n### 模式 H:卡片预览(v0.3.0)\n> 用户:\"发个链接给同事,要在企微对话框里直接看到标题+摘要预览\"\n> AI:`md2html.js` 生成 HTML(默认从 markdown 抽 H1 + 首段作 OG title/description)→ `enhance_share_file` → 发企微\n> 同事看到带卡片预览的链接(微信/企微/Slack/Twitter 都支持 OG)\n\n### 模式 I:线下纸质 ↔ 线上文档(v0.3.0)\n> 用户:\"客户提案打印 50 份发线下,客户能扫码看在线版\"\n> 两阶段:① `md-publish.sh proposal.md --mode pdf --with-qr` 拿 PDF URL ② `md2pdf-puppet --qr-url <PDF URL> --qr-label \"扫码看完整在线版\"` 二维码进每页页脚\n> 用户打印 → 客户扫码 → 跳 enhance 公网链接看高保真 PDF\n\n---\n\n## 六、自定义主题(给 AI 的)\n\n用户说\"我要 X 风格\" → AI 直接改 CSS,**不要重写脚本**:\n\n1. **先读** [`themes/DESIGN.md`](themes/DESIGN.md)(8 大设计范式 + 红线清单 + 命名规范)\n2. 复制最相近的主题到新文件:`cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改 `:root` 中的 **token override**(差异化变量,如 `--font-body` / `--color-accent` / `--measure` / `--leading`)— **不要复制 _tokens.css 的内容**,render.js 自动 prepend\n4. 写本主题独有的\"特征\"(双线 / drop cap / 边注 / 居中标题等)\n5. 在 [`scripts/lib/render.js`](scripts/lib/render.js) 的 `AVAILABLE_THEMES` 数组加新名字\n6. 在本 SKILL.md 第三节决策树加一行\n7. 立刻可用:`--theme <my-theme>`\n\n**主题文件不允许**:\n- 塞 `<script>` / 远程 `@import` 字体(打印会卡)/ JS\n- 用 Inter / Roboto 默认字体(反 AI Slop 红线 — 见 DESIGN.md §1.7)\n- h2/h3 加左竖条装饰(同上,2023 ChatGPT 卡片风泛滥)\n- 渐变背景 / 大 box-shadow 红紫光晕(同上)\n\n---\n\n## 七、依赖说明\n\n| 依赖 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | https://nodejs.org/ 或 `brew install node` |\n| `npm install`(本目录) | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | `md2docx` 必需 | `brew install pandoc` / `apt install pandoc` |\n| WeasyPrint | `md2pdf --engine pandoc` 路线可选 | `pip install weasyprint` |\n| **huo15-openclaw-enhance** | **可选** — 装了启用\"企微对话拿公网 URL\"模式 F | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n**默认路线(puppeteer)只需 npm install,不依赖 pandoc;企微集成所需的 enhance 也是可选,无 enhance 仍能用本机渲染**。\n\n---\n\n## 八、踩坑提示(给 AI 的预防针)\n\n1. **微信公众号粘贴丢样式**:必须用 `md2wechat.js`(已 juice 内联),**不能**直接用 `md2html.js` 的输出粘\n2. **mermaid 渲染需要联网**:`md2pdf-puppet.js` 默认从 jsdelivr CDN 加载 mermaid 运行时,离线环境加 `--no-mermaid`\n3. **小红书长图过长会被压缩**:超过 5000px 时拆成两张,先用 markdown 二级标题分段后分别导\n4. **学术 PDF 中文断行**:`academic` 主题用衬线英文优先,中文长段落建议手动加空格断词,或改用 `huo15-brand` 主题\n5. **品牌页眉页脚只在 huo15-brand 主题生效**:其他主题想要页眉用 `--header` 参数手动加\n6. **reference.docx 不存在不报错**:Pandoc 自动用内置默认。想要品牌 Word → 见 `templates/README.md`\n7. **严禁手写 enhance-share URL**:配合 enhance 时,必须从 `enhance_share_file` 工具的 `structuredContent.url` 取真实链接。**不能**手写、拼接、猜测、回忆类似 `http://localhost:18789/<file>`、`/plugins/enhance-share/<filename>`(缺 token)等任何形式——它们都不是真实链接,用户点了只会 404。这条与 enhance v5.7.24+ 的规则一致\n\n14. **任何内网 URL 都不要发给企微/钉钉外网用户**(v0.4.3 起,v0.4.4 扩到 LAN IP):enhance 默认 `bot_base_url=http://localhost:18789`,OpenClaw gateway 默认端口 18999(可能绑 LAN IP)。如果用户的 OpenClaw 没配公网 `bot_base_url`,任何 share/preview 工具返回的 URL 可能是 **localhost** 或 **LAN IP**(`http://192.168.1.x:18999/...` / `http://10.0.0.x:18789/...`),企微/钉钉外网用户机器**根本访问不到**这些地址,点开就 404。**AI 拿到 URL 后必须跑 unsafe_host_check**:\n    - **host 在**:`localhost` / `127.0.0.1` / `0.0.0.0` / `::1` → 不发\n    - **host 以**:`192.168.` / `10.` / `169.254.` / `172.16.`-`172.31.` 开头 → 不发(RFC 1918 私网地址)\n    - 触发任一条 → 降级:`priority=3`(本地路径) 或 `priority=$P_SEND`(发文件),并提示用户\"enhance/gateway 未配公网 bot_base_url,本次走文件路径\"\n    - **跨 skill 适用**:不只是本 skill 的 `enhance_share_file`,任何来自 enhance_preview / gateway static / agent 自写 HTML 等第三方工具的 URL 都按这条把关\n    - v0.4.3 起 skill 默认 `--prefer file` 直接绕过这个坑——发文件不依赖公网 URL。`md-share.sh` / `md-publish.sh` JSON `next_actions[].unsafe_host_check` 字段明文列了所有 unsafe host pattern,AI 必看必跑\n8. **md-preview.js 不要直接暴露给企微用户**:它绑 127.0.0.1,内网穿透看不见。企微场景必用 `md-share.sh` + enhance_share_file 链路\n9. **md-share.sh / md-publish.sh 不调 enhance**:本 skill 输出 JSON 的 next_actions 是**指示**,不是直接调用——独立装本 skill(没装 enhance)依然能跑(降级 priority=2 输出本地路径)\n10. **md-publish 不替用户广播**:即使用户说\"发到所有群\",也只输出 4 个 URL 让**用户自己**转发。严禁 AI 主动调 wecom 类工具广播——这是 §6.5 + memory `lesson_wecom_at_all_broadcast.md` v2.8.1 @all 事故的红线\n11. **OG 卡片需要公网 URL 才显示完整**:HTML 自包含可粘到本地预览,但**只有把 HTML 通过 enhance_share_file 暴露到公网**,微信/企微/Slack 抓 OG meta 时才会渲染卡片(本机 file:// 不会触发卡片抓取)\n12. **二维码两阶段不能合一**:**md2pdf-puppet --qr-url 必须传一个已存在的公网 URL**——不能在第一阶段渲染 PDF 时就嵌\"未来这个 PDF 的 URL\"(鸡生蛋问题)。正确流程:第一阶段 publish 拿 PDF URL → 第二阶段用该 URL 重渲染带 QR 的 PDF\n13. **KB 归档 frontmatter 的 share_urls 由 AI 回写**:md-publish 写归档时 share_urls 留空数组,**AI 拿到 enhance URL 后用 Edit 工具回写**——脚本不调 enhance,所以脚本自己写不出 URL(capability detection 设计的代价)\n\n---\n\n## 九、企微 / 钉钉 / 微信场景:capability detection 集成 enhance\n\n### 设计原则(与 §11.4 红线 + memory `feedback_plugins_must_be_independently_installable.md` 一致)\n\n- ✅ 本 skill 不 import / 不依赖 enhance\n- ✅ md-share.sh 仅渲染 + 输出标准 JSON\n- ✅ 由调用 skill 的 AI 在运行时检测 enhance 是否在场:**enhance_share_file 工具可见 → 调它拿 URL;不可见 → 给本地路径**\n- ❌ 不写跨插件 import,不写\"if enhance 装了\"的硬判断,不在脚本里 spawn 任何 plugin\n\n### 工作流图\n\n```\n企微用户:\"把这份分析报告导成 PDF 发我\"\n        │\n        ▼\n   OpenClaw inbound\n        │\n        ▼\n   AI 看到 SKILL.md §九 模式 F\n        │\n        ▼\n   bash scripts/md-share.sh report.md --mode pdf --label \"...\"\n        │\n        │ stdout: {\"files\":[{\"path\":\"/tmp/.../report-TS.pdf\",...}], \"next_actions\":[...]}\n        ▼\n   AI 按 next_actions priority=1 尝试:\n   enhance_share_file({filePath, label, expireHours: 24})\n        │\n        ├─ 工具可见 ─→ 拿 structuredContent.url ─→ outbound 发链接到企微 ─→ ✓\n        │\n        └─ 工具不可见 / 调用失败 ─→ priority=2 fallback ─→\n                                 outbound 把 file.path 告诉用户(降级)\n```\n\n### `md-share.sh` 用法速查\n\n```bash\n# 单一格式\nbash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"\nbash scripts/md-share.sh post.md   --mode image --theme xiaohongshu  # 小红书长图\nbash scripts/md-share.sh news.md   --mode wechat                      # 公众号 inline\n\n# 一份 md 多端并行(企微一次给齐 PDF + 长图 + 网页 三个链接)\nbash scripts/md-share.sh report.md --mode all --label \"战略分析报告\"\n\n# 长效链接(客户 30 天内可访问)\nbash scripts/md-share.sh proposal.md --mode pdf --expire-hours 720 --label \"客户提案 v1\"\n```\n\n### `md-publish.sh` 用法速查(v0.3.0,**比 md-share 多了 KB 归档 + 多端默认**)\n\n```bash\n# 默认:mode=all,自动归档到 ~/knowledge/huo15/<日期>-<slug>.md\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n\n# 客户提案(打印场景):带二维码,二阶段 AI 自动二刷 PDF\nbash scripts/md-publish.sh proposal.md --slug client-proposal-v1 \\\n  --label \"客户提案 v1\" --with-qr --expire-hours 720\n\n# 不归档(纯发布,不写知识库)\nbash scripts/md-publish.sh quick-note.md --no-archive\n\n# 自定义归档目录\nbash scripts/md-publish.sh internal.md --kb-dir ~/work/wiki/2026-q2\n\n# 仅 PDF + 归档\nbash scripts/md-publish.sh report.md --mode pdf --slug q1-summary\n```\n\n**md-publish vs md-share 选择**:\n- 一次性\"发我看看\" → md-share(轻量)\n- \"发布出去 + 留档案\" → md-publish(归档 + 多端默认 + 二维码可选)\n- 复盘 / 客户提案 / 周月报 / 公司公告 → md-publish\n\n### v0.3.0 新增能力(简表)\n\n- **OG 卡片**:`md2html` 默认从 H1 + 首段抽 og:title/description;显式覆盖用 `--og-title/--og-description/--og-image/--og-url`。HTML 粘到企微/微信/Slack 自动渲染卡片\n- **PDF 二维码**:两阶段 — ①拿 PDF URL ②`md2pdf-puppet --qr-url <URL> --qr-label \"扫码看在线版\"`,二维码进每页右下角页脚(huo15-brand 主题最佳)\n\n输出 JSON(stdout)始终遵循 schema:\n\n```json\n{\n  \"status\": \"render_complete\",\n  \"files\": [{ \"path\": \"/tmp/.../xxx.pdf\", \"kind\": \"pdf\", \"label\": \"...\", \"size_kb\": 234, \"mime\": \"...\", \"theme\": \"huo15-brand\" }],\n  \"next_actions\": [\n    { \"priority\": 1, \"tool\": \"enhance_share_file\", \"args_per_file\": {...}, \"result_field\": \"structuredContent.url\", \"warning\": \"严禁手写 URL\" },\n    { \"priority\": 2, \"tool\": null, \"fallback\": \"把 path 告诉用户\" }\n  ],\n  \"ai_instruction\": \"对每个 file 优先 priority=1,失败降级 priority=2\"\n}\n```\n\n### AI 触发判断(给读 SKILL.md 的 AI)\n\n用户出现以下意图就走模式 F:\n- \"**发**给我 / 发给客户 / 发到群里\" — outbound 意图\n- \"**链接**给我 / 给我个链接 / 公网链接 / 分享链接\" — URL 需求\n- \"**给我看看 / 看效果 / 预览**\" + 渠道在 IM(企微/钉钉/微信)— 视觉送达\n- 当前会话来自企微/钉钉/微信 inbound — 渠道天然适配 enhance\n\n如果用户**只是**说\"导出 PDF\" 而**没有发送/链接**意图,走模式 A(纯本机文件输出);用户后续说\"发我\" 再切到模式 F。\n\n---\n\n## 十、文件清单\n\n```\nhuo15-markdown-export/\n├── SKILL.md / README.md / package.json / _meta.json / LICENSE\n├── scripts/\n│   ├── install-deps.sh / install-to-workspaces.sh\n│   ├── md2pdf.sh + md2pdf-puppet.js   # PDF\n│   ├── md2docx.sh                      # Word(Pandoc)\n│   ├── md2html.js                      # HTML 自包含 + OG 卡片\n│   ├── md2image.js                     # 长图 PNG\n│   ├── md2wechat.js                    # 微信公众号 inline\n│   ├── md-preview.js                   # 127.0.0.1 live preview\n│   ├── md-share.sh / md-publish.sh    # 对接 enhance(JSON)\n│   ├── md-diff.sh                      # git → changelog PDF\n│   └── lib/render.js                   # 共享渲染核心\n├── themes/\n│   ├── DESIGN.md   ⭐ v0.4.0          # 设计规范(必读)\n│   ├── _tokens.css ⭐ v0.4.0          # design tokens\n│   ├── apple-tech.css ⭐ v0.4.2 默认  # 苹果科技风\n│   ├── typora-newsprint / -night / github / academic / huo15-brand\n│   ├── anthropic-doc / editorial-magazine / manuscript-book / tufte-handout  ⭐ v0.4.0\n│   └── wechat / xiaohongshu           # hardcode(目标编辑器剥 var)\n├── templates/{pdf-print.css, README.md}\n└── examples/{sample.md, chart-demo.md}\n```\n\n---\n\n## 十一、版本\n\n- **v0.4.4**(2026-05-12):**unsafe_host_check 扩 LAN IP(192.168/10/172.16-31/169.254)+ 跨 skill 适用**\n  - 用户报:某 agent 用 canvas 渲染 markdown 到 HTML 后,给出 `http://192.168.1.177:18999/nengbai_preview.html` LAN 预览链接,企微外网用户访问不到。18999 是 **OpenClaw gateway 默认端口**,LAN IP 是用户机器内网地址 — 跟 v0.4.3 修的 localhost:18789 同源\n  - v0.4.3 只检测 `localhost` / `127.0.0.1`,这次**扩**:\n    - host 在:`localhost` / `127.0.0.1` / `0.0.0.0` / `::1`(本机 loopback)\n    - host 以下列开头:`192.168.` / `10.` / `169.254.` / `172.16.`-`172.31.`(RFC 1918 私网地址)\n  - JSON `next_actions[].unsafe_host_check` 新增字段明文列检测规则;`ai_instruction` 强调**跨 skill 适用** — 不只检查 `enhance_share_file` 返回值,任何来自第三方工具(enhance_preview / gateway static / agent 自写 HTML 等)的 URL 也按此把关\n  - SKILL.md §八第 14 条重写\n- **v0.4.3**(2026-05-07):**默认发文件而不是发链接(harness 思维)+ 修 localhost URL 404**\n  - 用户报:用 `enhance_share_file` 拿的 URL 是 `http://localhost:18789/plugins/enhance-share/...`(enhance 默认 bot_base_url 未改),企微用户点开 404\n  - **harness 思维改造**(SKILL 脚本硬编码 priority 顺序,AI 只 dispatch 在场工具):\n    - `md-share.sh` / `md-publish.sh` 默认 `--prefer file`,JSON `next_actions` 改 3 优先级:\n      - **priority=1 send_file_to_channel** — 直接发文件到对话框(企微/钉钉/微信原生文件消息),不依赖公网 URL,不暴露 token\n      - **priority=2 share_via_public_url** — 拿公网 URL 发链接(用户明确要 / 文件 > 25MB / send_file 不可用时),AI **必须检查 URL host 是否 localhost**,是则降级\n      - **priority=3 local_path_only** — 告诉用户本地路径(终端/SSH 场景)\n    - 加 `--prefer link` 反转优先级(用户明确要链接时用)\n    - `tools_pattern` 列举:`wecom_send_file` / `wechat_send_file` / `dingtalk_send_file` / `*_send_file` / `*_upload_file`\n  - SKILL.md §九 重写\"模式 F\",新增\"模式 F 变体(明确要链接)\";§八踩坑加第 14 条 localhost URL warning\n- **v0.4.2**(2026-05-07):**新默认主题 apple-tech(苹果科技风)+ 修 YAML frontmatter 错乱 + 加强触发词**\n  - 新增 **`apple-tech`** 主题作为默认 — Apple 官网视觉:大字 hero(h1=3rem 紧字距 -0.022em)+ 大留白(80px+ padding)+ 黑白为主(#1d1d1f 字 / #ffffff 底)+ 极少色(Apple Blue #0066cc 仅在链接,60-30-10)+ 圆角(8-12px panel)+ 零装饰(无下划线 / 无边框 / 无分隔线)\n  - **字体双轨**:屏幕用 -apple-system / SF Pro / PingFang(Mac 原生视觉),`@media print` 切到 Helvetica Neue + Songti SC(反 Type 3 安全字体,PDF 嵌入 CID TrueType 正常)\n  - **修 YAML frontmatter 渲染 bug**(用户截图实测):`render.js` 在 markdown-it parse 前调 `stripFrontMatter()` 剥掉 `--- title: x\\nauthor: y ---`,原来被当成 `<hr>` + 段落渲染显示为大字标题段,现在剥干净 + meta.title 注入 OG title\n  - **改默认主题**:`render.js` 内 `DEFAULT_THEME = 'apple-tech'`(原 `typora-newsprint`),`md2html.js` / `md2pdf-puppet.js` / `md2pdf.sh` / `md-share.sh` 默认全部同步\n  - **加强触发词**:`description` 开头加\"火一五排版发布技能\"重复 3 次提升嵌入向量命中,`aliases` 列表前 8 位全是\"火一五XXX\"高频锚词,补\"苹果科技风排版\" / \"火一五苹果风\"\n  - 修 `anchor permalink` 染色 bug:`markdown-it-anchor` 给 h1-h6 内嵌的 `<a>` 继承 `--color-accent` 致 h1/h2 整段变 Apple Blue,显式 `h1-h6 a { color: inherit }` 让标题保持 fg 色\n- **v0.4.1**(2026-05-07):**反 Type 3 字体修复 — PDF 渲染浅灰看不清的真根因**\n  - 用户报\"科技风、其他风格 PDF 文字很浅看不清\"。深度调研发现:macOS Headless Chromium 把字体嵌入 PDF 时,Apple 受保护字体(`-apple-system` / `system-ui` / `PingFang SC` / `SF Pro` / `Iowan Old Style`)+ OpenType CFF 字体(`Source Han Sans/Serif SC` / `Noto CJK` / `Hiragino Sans GB`)走 **Type 3 路径渲染**,WPS / Foxit / 旧 Acrobat 渲染成笔画细 + 灰阶模糊\n  - 调研对照 Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)— **零用** Apple 系统字体,英文用 PT Serif / Open Sans / Merriweather / Helvetica Neue,中文 fallback 只用 STSong / Songti SC。我们对齐\n  - **修法 1**:`_tokens.css` 字体栈剔除所有禁忌字体,英文用 `PT Serif/Merriweather/Open Sans/Helvetica Neue`,**中文 fallback 不论英文衬线/无衬线统一用 `Songti SC`**(macOS 预装真 TTC,嵌成 CID TrueType 正常)\n  - **修法 2**:typora-night 加 `@media print` 自动反色为浅底深字 — 原本暗底浅字打印模式 1.4:1(WCAG 远不达 4.5:1)看不清,反色后 17.4:1\n  - **修法 3**:`templates/pdf-print.css` 删 `body { background: #ffffff !important }` 强制白底 — 让主题自控背景(newsprint 米色 / manuscript 旧书纸 / editorial 暖白等保留)\n  - **修法 4**:`themes/DESIGN.md §7.5` 新增\"反 Type 3 字体硬红线\"段,落禁忌字体清单 + 推荐字体 + 发版前 `pdffonts | grep \"Type 3\"` 自查\n  - 验收:9 主题 PDF 重渲染,Type 3 字体从 178/177/177/9/194/35/14/10/9 → 5/5/5/9/5/5/9/6/5(主体字体全部 CID TrueType,5-9 个边缘 emoji / 标点 fallback 不影响视觉);9 主题打印模式 WCAG 全部 ≥ 14:1\n- **v0.4.0**(2026-05-07):**主题系统重构 + 4 个新预设**\n  - 抽 `themes/_tokens.css`(全局 design tokens:字体栈 / 字号阶梯 1.25 Major Third / 行高档位 / 留白 8pt grid / 容器宽 / 语义色)\n  - `render.js` 自动为 9 个支持 token 的主题 prepend `_tokens.css`,wechat / xiaohongshu 因目标编辑器剥 var 保留 hardcode\n  - 新增 [`themes/DESIGN.md`](themes/DESIGN.md) — 8 大设计范式 + 反 AI Slop 红线 + 主题选择决策树 + 新主题 7 步 checklist + 发版前红线 grep 自查\n  - 重构 5 旧主题(newsprint / night / github / academic / brand)用 token,代码量 ~40% 收缩\n  - **修 3 处 AI Slop 红线**:typora-night 字体 Inter → system-ui + 暗底 #1f2329 → #121212;huo15-brand 去 h2 左竖条 + 改 60-30-10(strong / h3 不再染主色,主色降到 ≤10%);xiaohongshu 去渐变背景 + 去 strong 渐变高亮 + 去图片红光晕\n  - **新增 4 个预设**:\n    - `anthropic-doc` — Anthropic / Stripe 技术文档风,衬线正文 + 灰底代码 + 极少装饰(2026 年技术文档主流审美)\n    - `editorial-magazine` — 商业杂志体,Playfair Display 大字 + drop cap + 满版图 + 大留白(品牌故事 / 深度长文)\n    - `manuscript-book` — 书稿 / 小说体,单一衬线 + 1.95 行高 + 章标居中 + 0 装饰 + 段首缩进(无干扰沉浸阅读)\n    - `tufte-handout` — Tufte 边注体,窄主文 + 右挂边注(≥1100px)+ 三线表 + ET Book 衬线感(数据分析 / 研究报告)\n  - 主题决策树拆\"信息密集 / 视觉沉浸 / 多端发布\"三阵营(更易选)\n- **v0.3.x**(2026-05-06):`md-publish.sh` 多端发布 + KB 归档;HTML OG 卡片;PDF `--qr-url` 二维码;`install-to-workspaces.sh` 多 workspace 安装\n- **v0.2.0**(2026-05-05):`md-share.sh` + capability detection 集成 enhance\n- **v0.1.0**(2026-05-05):首发,7 主题 + 7 脚本 + KaTeX + mermaid + highlight.js\n\n> 详细 changelog 见 `git log` / cnb.cool 仓库 commit history\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v0.4.4:README.md\n\n# 火一五 Markdown 视觉渲染管线\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>打破信息孤岛,用一套系统驱动企业增长</h3>\n<h3>加速企业用户向全场景人工智能机器人转变</h3>\n\n\n</div>\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n## 这是什么\n\n**`huo15-markdown-export`** 是火一五 OpenClaw 生态的 markdown 视觉渲染管线。任何 `.md` 文件,一行命令就能导出 PDF / Word / 单文件 HTML / 小红书长图 / 微信公众号 inline / live preview / git changelog PDF——7 种产出,7 套主题,零 AI 也能跑,接进 Claude 后 AI 直接调用。\n\n把 Typora 的\"渲染美学 + 多格式导出\"剥离出来,做成 AI 可编排的工具——**编辑器交给 VSCode / Obsidian / Cursor,渲染交给本 skill**。\n\n---\n\n## 与 huo15-openclaw-office-doc 的关系\n\n| 场景 | 用哪个 |\n|---|---|\n| 让 AI **写**一份合同/PRD/会议纪要 | `huo15-openclaw-office-doc`(结构化公文,reportlab 直出) |\n| 我有一份 .md,想**导出**成 PDF/Word/长图 | `huo15-markdown-export`(本 skill) |\n\n**两者互补,不重叠**。\n\n---\n\n## 快速开始\n\n```bash\n# 1. 进 skill 目录\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-markdown-export\n\n# 2. 装依赖(node + 可选 pandoc)\nbash scripts/install-deps.sh\n\n# 3. 试一发\nnode scripts/md2pdf-puppet.js examples/sample.md\nnode scripts/md2image.js      examples/sample.md --theme xiaohongshu\nnode scripts/md-preview.js    examples/sample.md\n# 浏览器打开 http://127.0.0.1:7777\n```\n\n---\n\n## 9 个工具\n\n| 脚本 | 输入 → 输出 | 用途 |\n|---|---|---|\n| `md2pdf-puppet.js` | md → PDF | Chromium 打印(Typora 同款),7 主题;**v0.3.0 加 `--qr-url` 嵌二维码** |\n| `md2docx.sh` | md → docx | Pandoc + 火一五 reference.docx 模板 |\n| `md2html.js` | md → 单文件 html | **v0.3.0 自动加 OG 卡片**(企微/微信粘贴显示标题摘要) |\n| `md2image.js` | md → png | 1080px 小红书长图,也可 huo15-brand 沉稳风 |\n| `md2wechat.js` | md → inline html | juice 内联,粘到微信公众号 |\n| `md-preview.js` | md → http server | 本机 127.0.0.1(企微看不见,本机调试用) |\n| `md-diff.sh` | git ref × 2 → PDF | 版本对比 / changelog |\n| **`md-share.sh`** ⭐ v0.2.0 | md → 多产物 + JSON | **企微对话渲染送达**,对接 enhance 拿公网 URL |\n| **`md-publish.sh`** ⭐⭐ v0.3.0 | md → 多端 + JSON + KB 归档 | **发布场景首选**:多端 + 归档 `~/knowledge/huo15/` + 二阶段 QR PDF;人在回路转发 |\n\n---\n\n## 7 套主题\n\n| 主题 | 适用 |\n|---|---|\n| `typora-newsprint` | 报纸风衬线,个人博客 / 长文随笔 |\n| `typora-night` | 暗色护眼,夜间 / 投影 |\n| `github` | GitHub README 风,开源文档 |\n| `academic` | 学术论文,IEEE/ACM 风格初稿 |\n| `wechat` | 微信公众号(已剥离 grid/flex/var) |\n| `xiaohongshu` | 小红书长图,1080px 暖色大字号 |\n| `huo15-brand` | 火一五品牌,客户报告 / 内部周报(自带页眉页脚) |\n\n切主题:`--theme <name>`。AI 想做新主题:复制最相近的 CSS 改即可。\n\n---\n\n## 集成到 OpenClaw / Claude\n\n**自然语言示例**(AI 自动调用):\n\n> \"把这份分析报告**发给客户**\" → AI 调 `md-share.sh --mode pdf` → chain 调 `enhance_share_file` 拿公网 URL → 发企微对话\n> \"这份 Q1 复盘**发布**出去 + 留档\" → AI 调 `md-publish.sh --slug q1-summary` → 多端发布 + 归档 KB + 4 个 URL 让用户挑转发\n> \"客户提案打印 50 份,要让客户能扫码看在线版\" → AI 调 `md-publish.sh --with-qr` → 二阶段拿到 URL → 二刷 PDF 嵌二维码\n> \"这篇文章发链接给同事,要在企微显示标题摘要预览\" → AI 调 `md2html.js`(v0.3.0 自动 OG)→ enhance share → 发链接,自动卡片\n> \"v1.2 到 v1.3 改了什么,出个 PDF\" → AI 调 `md-diff.sh`\n> \"主题再暖一点\" → AI 用 Edit 工具改 themes/*.css(不写新脚本)\n\n---\n\n## 企微 / 钉钉 / 微信对话渲染送达(v0.2.0 新增)\n\n**问题**:OpenClaw 部署在内网穿透后(`https://<bot_base_url>` → `localhost:18789`),企微用户无法访问 `127.0.0.1` 起的预览 server。\n\n**方案**:`md-share.sh` + `huo15-openclaw-enhance`(可选)的 `enhance_share_file` 工具 = 渲染产物自动暴露成 `https://<bot_base_url>/plugins/enhance-share/<token>-<file>` 公网 URL。\n\n```\n企微用户:\"把复盘渲染成长图发我\"\n     ↓\nAI:bash md-share.sh report.md --mode image --label \"Q1 复盘\"\n     ↓\n拿到 stdout JSON.files[0].path\n     ↓\nAI:enhance_share_file({filePath, label, expireHours: 24})    ← enhance 工具\n     ↓\nurl = https://keepermac.huo15.com/plugins/enhance-share/abc-Q1.png\n     ↓\nAI 把 url 发回企微对话,用户点链接看图\n```\n\n**capability detection 设计**:本 skill **不强依赖 enhance**——\n\n- 装了 enhance:走上面的优雅链路(priority=1)\n- 没装 enhance:`md-share.sh` 输出的 JSON 仍然给本地路径(priority=2 fallback),AI 把路径告诉用户(降级,不报错)\n- 跨 OpenClaw 部署自适应:`bot_base_url` 不同的实例,enhance 自动从 host header 检测,无需配 env\n\n详细 chain 调用模式见 [SKILL.md §九](SKILL.md)。\n\n---\n\n## 发布 + 归档(v0.3.0 新增)\n\n`md-publish.sh` 把\"发出去给人看\"和\"给自己留档\"做成同一个动作:\n\n```bash\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n```\n\n一次完成:\n1. **多端渲染** — PDF + 长图 + HTML(带 OG 卡片)+ 公众号 inline,共 4 个产物\n2. **KB 归档** — 自动写 `~/knowledge/huo15/2026-05-06-q1-summary.md`,带 frontmatter(title / slug / published_at / source / summary / render_outputs / share_urls 占位 / tags)\n3. **share-ready JSON** — AI 拿到后逐个调 `enhance_share_file` 拿 4 个 URL\n4. **回写 KB** — AI 用 Edit 工具把 4 个 URL 写回 KB frontmatter `share_urls:` 列表(未来翻档案能直接拿到当时的公网链接)\n5. **多版本菜单** — AI 把 4 个 URL 组装成消息发回当前会话,**用户自己**决定转发哪个版本到哪个群(人在回路,严守 §6.5 \"禁广播\")\n\n`--with-qr` 启用二阶段:AI 拿到 PDF URL 后,自动用 `md2pdf-puppet --qr-url <url>` 二刷一份带二维码页脚的打印版 PDF。**线下客户提案 / 海报 / 名片背面 / 印刷品**专用——扫码直达在线版。\n\n---\n\n## OG 卡片(v0.3.0 新增)\n\n`md2html.js` 默认从 markdown 抽 H1 + 首段作为 `og:title` / `og:description`。HTML 通过 enhance 暴露成公网 URL 后,粘到企微/微信/Slack 对话框**自动显示标题+摘要的卡片预览**(不是冷链接)。\n\n```bash\n# 自动模式(零配置)\nnode scripts/md2html.js article.md\n\n# 显式覆盖 + 加封面图\nnode scripts/md2html.js article.md article.html \\\n  --og-title \"AI 时代的 Markdown 工具链\" \\\n  --og-description \"把 Typora 拆成 OpenClaw skill 的设计思考\" \\\n  --og-image https://tools.huo15.com/uploads/cover.png\n```\n\n---\n\n## 依赖\n\n| 工具 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | `brew install node` |\n| npm install | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | 仅 `md2docx` | `brew install pandoc` |\n| **huo15-openclaw-enhance** | 仅企微对话送达模式(可选) | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n默认 puppeteer 路线只需 Node,不依赖 pandoc;企微集成所需的 enhance 也是可选——**装不装本 skill 都能跑**。\n\n---\n\n## 详细文档\n\n- 完整能力 + AI 调用模式 → [SKILL.md](SKILL.md)\n- 主题选择决策树 + reference.docx 自定义 → [templates/README.md](templates/README.md)\n- 跑一遍 → [examples/sample.md](examples/sample.md)\n\n---\n\n## 协议\n\nMIT — 见 [LICENSE](LICENSE)。\n\n---\n\n<div align=\"center\">\n\n**公司名称:** 青岛火一五信息科技有限公司\n\n**联系邮箱:** postmaster@huo15.com | **QQ群:** 1093992108\n\n---\n\n**关注逸寻智库公众号,获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\n---\n\nFile v0.4.4:templates/README.md\n\n# 主题选择决策树\n\n| 场景 | 选哪个主题 | 输出格式 | 推荐脚本 |\n|---|---|---|---|\n| 个人技术博客 / 长文随笔 | `typora-newsprint` | HTML / PDF | `md2pdf` / `md2html` |\n| 夜间阅读 / 投影演示 | `typora-night` | HTML | `md2html` |\n| 开源项目文档 / GitHub README | `github` | HTML / PDF | `md2pdf` |\n| 学术论文初稿 | `academic` | PDF | `md2pdf` |\n| 微信公众号发布 | `wechat` | HTML(内联 CSS) | `md2wechat` |\n| 小红书长图文 | `xiaohongshu` | PNG 长图 | `md2image` |\n| 公司对外报告 / 客户提案 | `huo15-brand` | PDF(带页眉页脚) | `md2pdf` |\n| 内部 changelog / 版本对比 | `huo15-brand` | PDF | `md-diff` |\n\n## 想做新主题?\n\n把这个目录里任何一个 CSS 复制为 `themes/<my-theme>.css`,改完在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上名字即可。\n\n主题文件**只允许**写视觉样式——不要在主题里塞 JS,不要 import 远程字体(打印会卡)。\n\n## reference.docx(Word 模板)\n\n`md2docx` 走 Pandoc,默认用本目录的 `reference.docx` 作为字体/页眉模板。\n\n**没有 reference.docx 也能跑**——Pandoc 用内置默认模板。但如果你想要\"火一五品牌的 Word 输出\":\n\n```bash\n# 1. 先用 Pandoc 生成默认 reference.docx\npandoc -o reference.docx --print-default-data-file reference.docx\n\n# 2. 用 Word 打开,改字体(中文 → 等线 / 英文 → Calibri)、改样式、加页眉 logo\n\n# 3. 替换本目录的 reference.docx\nmv ~/Downloads/my-reference.docx /Users/jobzhao/workspace/projects/openclaw/huo15-skills/huo15-markdown-export/templates/reference.docx\n```\n\n## pdf-print.css\n\n控制 PDF 打印时的额外规则:页眉页脚、避免标题孤行、表格不跨页。**改它会影响所有 PDF 输出**——慎改。\n\nFile v0.4.4:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-markdown-export\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1778560260824\n}\n\nFile v0.4.4:examples/chart-demo.md\n\n# Mermaid 图表示例\n\n测试 mermaid 各种图表在 PDF / HTML / PNG 长图中的渲染。\n\n## 流程图\n\n```mermaid\nflowchart TD\n  Start([开始]) --> Input[/输入 markdown/]\n  Input --> Render{渲染}\n  Render -->|markdown-it| HTML[HTML]\n  HTML -->|puppeteer| PDF[PDF]\n  HTML -->|juice 内联| WeChat[微信公众号]\n  HTML -->|screenshot| PNG[长图 PNG]\n  PDF --> End([输出])\n  WeChat --> End\n  PNG --> End\n```\n\n## 时序图\n\n```mermaid\nsequenceDiagram\n  participant U as 用户\n  participant AI as Claude\n  participant S as huo15-markdown-export\n  participant W as huo15-wecom\n\n  U->>AI: 把这份分析报告发给客户\n  AI->>S: bash md2pdf.sh report.md\n  S->>S: markdown-it → HTML → Chromium → PDF\n  S-->>AI: report.pdf\n  AI->>W: send_file(report.pdf, target=客户群)\n  W-->>U: ✓ 已送达\n```\n\n## 甘特图\n\n```mermaid\ngantt\n  title huo15-markdown-export 迭代节奏\n  dateFormat YYYY-MM-DD\n  section v0.1\n  底座 + 主题 :a1, 2026-05-05, 1d\n  脚本 :a2, after a1, 1d\n  section v0.2\n  Pandoc 后端完善 :2026-05-08, 2d\n  reference.docx 模板 :2026-05-10, 1d\n```\n\n## 类图(架构概览)\n\n```mermaid\nclassDiagram\n  class Render {\n    +buildMd()\n    +buildHtml()\n    +readTheme()\n  }\n  class Md2Pdf\n  class Md2Html\n  class Md2Image\n  class Md2Wechat\n  class MdPreview\n\n  Md2Pdf --> Render\n  Md2Html --> Render\n  Md2Image --> Render\n  Md2Wechat --> Render\n  MdPreview --> Render\n```\n\nFile v0.4.4:examples/sample.md\n\n---\ntitle: huo15-markdown-export 渲染样例\nauthor: 火一五\n---\n\n# huo15-markdown-export 渲染样例\n\n> 用这份文档测试所有主题、KaTeX、代码高亮、表格、Mermaid。\n\n## 1. 段落与强调\n\n这是一个普通段落,包含**加粗**、*斜体*、~~删除线~~、==高亮==、`行内代码`、[外链](https://huo15.com)。\n\n中英文混排:Markdown 是一种**轻量级标记语言**,2004 年由 John Gruber 与 Aaron Swartz 共同设计。\n\nH~2~O 与 X^2^ + Y^2^ = Z^2^。\n\n## 2. 列表\n\n无序列表:\n\n- 苹果\n- 橙子\n  - 红橙\n  - 脐橙\n- 香蕉\n\n任务列表:\n\n- [x] 写底座\n- [x] 写主题\n- [ ] 跑通所有脚本\n\n## 3. 表格\n\n| 主题 | 适用场景 | 输出 |\n|---|---|---|\n| `typora-newsprint` | 个人博客 | HTML/PDF |\n| `github` | 开源文档 | HTML/PDF |\n| `wechat` | 微信公众号 | inline HTML |\n| `xiaohongshu` | 小红书长图 | PNG |\n| `huo15-brand` | 公司报告 | PDF(带页眉页脚) |\n\n## 4. 代码块\n\n```javascript\nfunction hello(name) {\n  return `Hello, ${name}!`;\n}\n\nconsole.log(hello('huo15'));\n```\n\n```python\ndef fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        yield a\n        a, b = b, a + b\n\nprint(list(fib(10)))\n```\n\n## 5. 引用\n\n> 「好文案不是写出来的,是留出来的。」 —— Allen 流\n\n> 多层引用:\n> > 嵌套层 1\n> > > 嵌套层 2\n\n## 6. 数学公式\n\n行内:质能方程 $E = mc^2$。\n\n块级:\n\n$$\n\\int_{-\\infty}^{\\infty} e^{-x^2} \\, dx = \\sqrt{\\pi}\n$$\n\n$$\n\\frac{\\partial L}{\\partial \\theta} = \\mathbb{E}\\left[\\nabla_\\theta \\log \\pi_\\theta(a|s) \\cdot Q^\\pi(s, a)\\right]\n$$\n\n## 7. Mermaid 流程图\n\n```mermaid\nflowchart LR\n  A[markdown 源文件] --> B{选择目标}\n  B -->|PDF| C[md2pdf-puppet.js]\n  B -->|HTML| D[md2html.js]\n  B -->|长图| E[md2image.js]\n  B -->|公众号| F[md2wechat.js]\n  C --> G[Chromium 打印]\n  E --> G\n  G --> H[输出文件]\n  D --> H\n  F --> H\n```\n\n## 8. 脚注\n\n这是一个有脚注的句子[^1]。后面再来一个[^typora]。\n\n[^1]: 脚注内容支持 markdown,**包括加粗**和 [链接](https://example.com)。\n[^typora]: Typora 是 2015 年由 Abner Lee 开发的所见即所得 markdown 编辑器。\n\n---\n\n更多用法:`templates/README.md` 主题决策树。\n\nFile v0.4.4:skill-card.md\n\n## Description:\n\nHuo15 Markdown Export converts existing Markdown into styled PDF, DOCX, HTML, long-image PNG, WeChat inline HTML, live previews, and share-ready publishing outputs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaobod1](https://clawhub.ai/user/zhaobod1)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, operators, and content teams use this skill to turn existing Markdown into polished multi-format documents for technical blogs, customer reports, social posts, WeChat articles, release notes, and shareable previews.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Rendering active Markdown or Mermaid content can execute browser-side HTML or fetch remote Mermaid code.\n\nMitigation: Use trusted Markdown only and pass --no-mermaid for sensitive, offline, or network-restricted documents.\n\nRisk: Preview or share URLs can point to localhost or private LAN hosts that external recipients cannot access.\n\nMitigation: Check returned URLs before sharing and fall back to file delivery or a local path when the host is loopback or private network.\n\nRisk: Publishing workflows can create public links and local knowledge-base archives for source documents.\n\nMitigation: Avoid confidential inputs, use --no-archive for sensitive documents, and set short share-link lifetimes when public links are needed.\n\nRisk: The workspace installer can copy the skill into multiple OpenClaw workspaces.\n\nMitigation: Run the installer with a dry run first, back up affected workspaces, and review each target before installation.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhaobod1/skills/huo15-markdown-export)\n- [Artifact README](README.md)\n- [Theme design guide](themes/DESIGN.md)\n- [Template README](templates/README.md)\n- [Package manifest](package.json)\n\n## Skill Output:\n\n**Output Type(s):** [Files, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with bash commands and JSON handoff data; rendered artifacts include PDF, DOCX, HTML, PNG, and inline HTML.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Node >=18 is required; Pandoc is required for DOCX output; WeasyPrint is optional for the Pandoc PDF path.]\n\n## Skill Version(s):\n\n0.4.4 (source: SKILL.md frontmatter, package.json, server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.4.4:themes/DESIGN.md\n\n# 火一五排版设计规范(themes/DESIGN.md)\n\n> 本文件是 `huo15-markdown-export` 所有主题(themes/*.css)的工作宪法。\n> 任何新增 / 修改主题前先读此文件,任何不一致的地方以本文件为准。\n>\n> v0.4.0 起整套主题改为\"`_tokens.css` 提供 design tokens + 各主题只 override 差异化变量\"的两层架构。\n> 维护:发现新坑或新派别先更新本文件,再改 CSS。\n\n---\n\n## 一、八大设计范式\n\n### 1. 排版(Typography)\n\n| 维度 | 原则 | 中文执行 |\n|---|---|---|\n| **字体分类** | 衬线长文阅读 / 无衬线短文 UI / 等宽代码 | 衬线=Source Han Serif / Songti SC;无衬线=PingFang SC / Source Han Sans;等宽=JetBrains Mono / SF Mono |\n| **字号阶梯** | 数学比例:Minor Third 1.2 / Major Third 1.25 / Perfect Fourth 1.333 | 中文统一用 **1.25 (Major Third)**,温和不喧宾夺主 |\n| **行高(Leading)** | 英文 1.5-1.65 / 中文 **1.7-1.9** | 中文长文 ≥ 1.75 是底线;1.85 适合阅读密度低的随笔 |\n| **行宽(Measure)** | 英文 65ch / 中文 28-40 字 | 720px-820px 最舒服 |\n| **字重对比** | 只用 400 + 700,中间值在打印机糊成一片 | PingFang 600 在 Mac 漂亮但 Win 渲染差,生产用 700 |\n\n### 2. 8pt 网格(Grid)\n\n所有 `margin / padding / font-size / gap` 都是 **8 的倍数**:`8 / 16 / 24 / 32 / 40 / 48 / 64 / 96`。\n\n违反会让\"切主题文档跳动\",视觉系统崩溃。\n\n### 3. 色彩 — 60-30-10 + WCAG AA + OKLCH\n\n- **60-30-10 法则**:背景 60% + 次要色 30% + 强调色 ≤ 10%。**主色不得堆**:strong + h2 边 + h3 + table th 都染主色 = 主色 ≥ 30% = 全文炸\n- **OKLCH > HSL**:HSL 不同色相亮度感知不均;OKLCH 感知均匀。新写主题用 `oklch(...)`,老主题保留 hex 但下次重构时迁移\n- **WCAG 2.2 AA**:正文 4.5:1 / 标题 3:1 / 大字 18px+ 3:1\n- **暗底不要 #000**:屏幕过曝。用 `#0d0d0d` ~ `#1a1a1a`,纯黑只用于打印\n\n### 4. CRAP 四原则(Robin Williams 经典)\n\n- **C**ontrast — 弱对比 = 看不出层级 = 设计失败\n- **R**epetition — 同类元素一致(所有 h2 一个样,所有 quote 一个样)\n- **A**lignment — 严格对齐,不要\"差不多就行\"\n- **P**roximity — 相关元素挨近(h3 距上面 h2 大 / 距下面正文小)\n\n### 5. 印刷美学传承(每种 = 一种主题流派)\n\n| 流派 | 灵魂 | 标志 | 当前主题 |\n|---|---|---|---|\n| **Newsprint(报纸)** | 高密度信息 | 双线分隔 / 衬线小字 / 多列 | typora-newsprint |\n| **Editorial(杂志)** | 慢阅读美学 | 大留白 / drop cap / 引号挂边 / 满版图 | editorial-magazine(v0.4.0) |\n| **Academic(学术)** | 严谨克制 | Times / 双栏 / 编号公式 / 脚注 | academic |\n| **Manuscript(书稿)** | 朴素无干扰 | 单一衬线 / 1.85 行高 / 章标居中 / 零装饰 | manuscript-book(v0.4.0) |\n| **Tufte(边注)** | 数据为本 | 主文 + 右挂边注 / 极少修饰 / 数据嵌入 | tufte-handout(v0.4.0) |\n\n### 6. 数字原生美学\n\n- **Anthropic / Stripe doc**:朴素衬线 + 灰底代码 + 单色 accent + **极少**装饰 — 当前技术文档行业标杆 → `anthropic-doc`(v0.4.0)\n- **GitHub README**:无衬线 + 系统字体 + 蓝 accent → `github`\n- **Notion / Linear**:无衬线紧凑 + 灰阶 + 圆角中性 — SaaS 内部知识库\n- **iOS HIG / Material 3**:不在本 skill 范围(那是 UI 不是文档)\n\n### 7. 反 AI Slop 硬红线(违反则一眼\"AI 生成感\")\n\n| 禁忌 | 原因 | 检查 |\n|---|---|---|\n| 紫色渐变 / 多色彩虹 bg | Midjourney / Stable Diffusion 标志性产物 | grep `linear-gradient` 任何主题 → 必须解释或删 |\n| Emoji 当 icon | 廉价感,改用 lucide / heroicons 实线 SVG | 主题 CSS 不内嵌 emoji |\n| **圆角卡 + 左竖条** | 2023 年 ChatGPT 卡片风,2026 已俗 | grep `border-left.*solid` h2/h3 上 → 改\"上方双线\"或\"字号+letter-spacing\"区分 |\n| **Inter / Roboto 默认** | \"AI 生成网页\"标配,已被识别 | font-family 第一个不能是 Inter / Roboto;参考 §7.5 字体栈选 |\n| CSS 画伪产品图 | AI 标志 | 不准 |\n| 大 box-shadow 红/紫光晕 | AI 标志 | 阴影只用极淡灰 `0 1px 2px rgba(0,0,0,0.05)` |\n\n### 7.5 反 Type 3 字体硬红线(PDF 渲染浅灰看不清的真根因)\n\n> v0.4.1 新增。用户报\"科技风、其他风格 PDF 文字很浅看不清\",根因是 macOS Headless\n> Chromium 把某些字体嵌入 PDF 时走 **Type 3**(路径渲染)而不是 **CID TrueType**,\n> WPS / Foxit / 旧 Acrobat 渲染 Type 3 成笔画细 + 灰阶模糊。\n\n#### 禁忌字体清单(不要在 font-family 里**优先**出现)\n\n| 字体 | 类别 | 原因 |\n|---|---|---|\n| `-apple-system` / `system-ui` / `BlinkMacSystemFont` | CSS 通用族 | macOS 解析为 SF Pro,受保护字体走 Type 3 |\n| `SF Pro` / `SF Mono` | Apple 系统字体 | 受保护无法直接嵌入,走 path |\n| `PingFang SC` | Apple 系统字体 | 受保护(Catalina+ 移到 system),Skia 嵌成 Type 3 |\n| `ui-serif` / `ui-sans-serif` / `ui-monospace` | CSS 通用族 | macOS 走 Apple 受保护字体 |\n| `Iowan Old Style` | Apple Books 字体 | 受保护,走 Type 3 |\n| **`Source Han Sans/Serif SC`** | 开源 OTF | Adobe Source Han 是 OTF/CFF,Skia 嵌成 Type 3 |\n| **`Noto Sans/Serif CJK SC`** | 开源 OTF | Google Noto CJK 同上,OTF/CFF 走 Type 3 |\n| **`Hiragino Sans GB`** | macOS 预装 | OpenType CFF outlines,Skia 嵌成 Type 3 |\n| `STHeiti` / `Heiti SC` | macOS 预装 | OpenType CFF,可能走 Type 3 |\n\n#### 应该用的字体(真 TrueType,可正常嵌入 CID TrueType)\n\n| 类别 | 优先字体 |\n|---|---|\n| 英文衬线 | `PT Serif` / `Merriweather` / `Charter` / `Georgia` / `Times New Roman` / `Liberation Serif` |\n| 英文无衬线 | `Open Sans` / `Helvetica Neue` / `Helvetica` / `Arial` / `Lucida Grande` |\n| 英文等宽 | `Menlo` / `Monaco` / `Consolas` / `Courier New` / `Liberation Mono` |\n| **中文 fallback(不论英文衬线/无衬线)** | **`Songti SC`**(STSongti-SC,macOS 预装真 TTC)/ `STSong` / `SimSun`(Win) |\n| 中文 Win 兜底 | `Microsoft YaHei` |\n| Emoji | `Segoe UI Emoji` / `Apple Color Emoji` / `Noto Color Emoji` |\n\n#### 关键洞察\n\n1. **不论英文是衬线还是无衬线,中文 fallback 都用 `Songti SC`** — 这是 macOS Headless Chromium 下唯一嵌成 CID TrueType 的预装中文字体。Typora 官方 github 主题(英文 Open Sans + 中文 STSong)就是这个策略\n2. **PDF 视觉上中文衬线 vs 无衬线差异极小** — 优先**清晰**而不是纯衬线匹配\n3. **Apple 系统字体在 PDF 上不可控** — Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)**全部零用** -apple-system / system-ui / PingFang SC,我们对齐\n4. **暗主题不要直接走 PDF** — typora-night 加 `@media print` 自动切浅底深字版,避免暗底浅字在打印模式被白底覆盖后 1.4:1 看不清\n\n#### 发版前自查 grep + pdffonts\n\n```bash\n# 1. font-family 首选不能是禁忌字体\ngrep -nE \"font-family.*((-apple-system|system-ui|BlinkMacSystem|PingFang|ui-serif|ui-sans-serif|SF Pro|SF Mono|Iowan|Source Han|Noto.*CJK|Hiragino Sans GB|STHeiti)\" themes/*.css | grep -v \"/\\*\"\n#   命中且字体在前两位 = 违反 §7.5\n\n# 2. 跑完 md2pdf 后看 Type 3 字体计数\npdffonts /tmp/output.pdf | grep -c \"Type 3\"\n#   ≤ 5 ✓ (边缘 emoji / 系统符号);> 50 ❌ (主体走 Type 3 = 浅灰看不清)\npdffonts /tmp/output.pdf | grep -c \"CID TrueType\"\n#   ≥ 30 ✓ (主体字体正常嵌入)\n```\n\n### 8. 中文排版特例\n\n- **font-family 顺序**:英文族优先,中文族在后(浏览器先匹配英文 → 落回中文)。否则中文字体里的英文(伪粗、字宽不一)难看\n- **避头尾**:浏览器 CSS `text-spacing: auto` 兼容差,生产忽略;长段落手动空格断词\n- **首字下沉(drop cap)**:`::first-letter` 中文容易选中标点,要 `<span class=\"dropcap\">` 手动包,默认不开\n- **text-indent: 2em**:学术体首段缩进的中文做法,但中英混排首词若是英文会突兀,用 `:first-of-type, h*+p { text-indent: 0 }` 兜底\n\n---\n\n## 二、本 skill 的工程规范\n\n### 2.1 两层架构(v0.4.0 起)\n\n```\nthemes/\n├── _tokens.css           # 全局 design tokens(字体栈/字号/行高/留白/容器宽/语义色)\n├── DESIGN.md             # 本文件\n├── typora-newsprint.css  # Override slot:--font-body / --color-accent / --color-bg / --measure / --leading\n├── typora-night.css\n├── github.css\n├── academic.css\n├── huo15-brand.css\n├── anthropic-doc.css     # v0.4.0 新增\n├── editorial-magazine.css # v0.4.0 新增\n├── manuscript-book.css   # v0.4.0 新增\n├── tufte-handout.css     # v0.4.0 新增\n├── wechat.css            # 例外:hardcode(微信编辑器剥 var)\n└── xiaohongshu.css       # 例外:hardcode(juice 内联前已展平)\n```\n\n### 2.2 token 命名规范(写在 `_tokens.css`)\n\n```\n--font-{serif|sans|mono|display}      # 字体族\n--fs-{base|sm|lg|h1..h4}              # 字号\n--lh-{tight|normal|relax}             # 行高\n--space-{1..6}                        # 留白(8 的倍数)\n--measure-{narrow|normal|wide|full}   # 容器宽\n--color-{fg|muted|rule|bg|code-bg|accent}  # 语义色\n```\n\n**禁止**:`--brand` / `--accent` 二选一,统一用 `--color-accent`。老命名(typora-newsprint 的 `--accent`)v0.4.0 改造时统一迁移。\n\n### 2.3 主题文件骨架(每个主题都长这样)\n\n```css\n/* huo15-markdown-export — <Theme Name>\n * 流派:<Newsprint / Editorial / Academic / Manuscript / Tufte / Doc / Brand / Social / Dark>\n * 适合:<场景>\n * 关键差异化:<一句话说清这个主题与其他主题的视觉锚点>\n */\n\n@import url(\"./_tokens.css\");\n\n:root {\n  /* === 主题 override:只改差异 token === */\n  --font-body:    var(--font-serif);\n  --font-heading: var(--font-display);\n  --color-accent: #8b2a2a;\n  --color-bg:     #f3eee5;\n  --measure:      var(--measure-normal);\n  --leading:      var(--lh-relax);\n}\n\n/* 然后只写本主题独有的\"特征\"样式 */\n.markdown-body h1 { /* 双线 / 居中 / 红色等 */ }\n```\n\n### 2.4 主题选择决策树(SKILL.md 同步)\n\n| 场景关键词 | 主题 | 流派 |\n|---|---|---|\n| 技术博客 / 长文复盘 / 个人随笔 | `typora-newsprint` | Newsprint |\n| 夜间阅读 / 投影 / 暗色 | `typora-night` | Dark UI |\n| GitHub / 开源 / API 文档 | `github` | Tech-doc |\n| 学术论文 / IEEE 投稿初稿 | `academic` | Academic |\n| 微信公众号 推文 | `wechat` | WeChat editor |\n| 小红书 / 朋友圈长图 | `xiaohongshu` | Social |\n| 公司报告 / 客户提案 / 周报 | `huo15-brand` | Corporate |\n| **技术博客 / 产品文档 / 行业标杆审美** | `anthropic-doc` ⭐ | Stripe/Anthropic Doc |\n| **品牌故事 / 深度长文 / 商业杂志感** | `editorial-magazine` ⭐ | Editorial |\n| **小说 / 思考长文 / 无干扰阅读** | `manuscript-book` ⭐ | Manuscript |\n| **数据分析 / 研究报告 / 教学讲义** | `tufte-handout` ⭐ | Tufte |\n| changelog / 版本对比 | `huo15-brand` | Corporate |\n\n**用户没说就默认** `typora-newsprint`(报纸风为通用合理基线)。\n\n### 2.5 红线自查清单(发版前 grep)\n\n```bash\n# 1. 没有 Inter / Roboto 当默认字体\ngrep -E 'font-family.*\"Inter\"' themes/*.css | grep -v \"/\\*\"\n#    → 命中且不在注释中 = 违反 §1.7\n\n# 2. h2 / h3 没有左竖条\ngrep -E 'h[2-4].*border-left' themes/*.css\n#    → 命中要改\"上方双线 / 字号差 / 字色 / letter-spacing\"\n\n# 3. 没有渐变背景(除非主题流派必须)\ngrep -E 'linear-gradient' themes/*.css\n#    → 命中要审查:editorial-magazine 等可能合理,brand/wechat/xhs 不应有\n\n# 4. 没有 #000 纯黑底色\ngrep -E 'background.*#000(?![0-9a-f])' themes/*.css\n\n# 5. 字体栈中文 fallback 完整\n#    每个主题至少有 PingFang SC / Songti SC / Noto * SC 兜底\n```\n\n### 2.6 新增主题 checklist(写一个新主题的 7 步)\n\n1. 在 `_tokens.css` 中确认所需的 token 已存在(没有的先加进去)\n2. 复制最相近的主题文件 → `cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改文件头注释:流派 + 适合场景 + 关键差异化\n4. 改 `:root` 中的差异化 token(只改差异,不要复制 _tokens 的内容)\n5. 写本主题独有的特征样式(双线 / drop cap / 边注 / 等等)\n6. 在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上新名字\n7. 在 `SKILL.md` 第三节\"主题选择决策树\"加一行\n8. 跑 smoke test:`node scripts/md2html.js examples/sample.md --theme <my-theme>` 检视效果\n\n---\n\n## 三、版本与迁移记录\n\n- **v0.4.0**(2026-05-07,本次):\n  - 抽 `_tokens.css`,5 个旧主题改造为 token-based(newsprint / night / github / academic / brand)\n  - 修 3 处 AI Slop 红线(night Inter / brand 左竖条主色堆 / xhs 渐变光晕)\n  - 新增 4 个预设(anthropic-doc / editorial-magazine / manuscript-book / tufte-handout)\n  - 写本规范文件 `DESIGN.md`\n- **v0.3.x**:7 主题各自独立 CSS,无统一 token,有红线触雷\n\n---\n\n## 四、参考(权威源,优先级降序)\n\n- **CRAP 四原则**:Robin Williams《The Non-Designer's Design Book》\n- **8pt grid**:Material 3 spec / iOS HIG\n- **OKLCH**:Evil Martians《OKLCH in CSS: why we moved from RGB and HSL》\n- **WCAG 2.2**:https://www.w3.org/TR/WCAG22/\n- **中文排版**:W3C《中文排版需求(clreq)》https://www.w3.org/TR/clreq/\n- **Tufte 风格**:Edward Tufte《The Visual Display of Quantitative Information》\n- **Editorial 流派**:Khoi Vinh《Ordering Disorder: Grid Principles for Web Design》\n- **Anthropic doc**:https://docs.anthropic.com/(直接看视觉)\n- **反 AI Slop**:CLAUDE.md §9 / `~/knowledge/huo15/2026-04-27-frontend-design-marathon-v2-v46.md`\n\nFile v0.4.4:package.json\n\n{\n  \"name\": \"@huo15/huo15-markdown-export\",\n  \"version\": \"0.4.4\",\n  \"description\": \"Typora 风 markdown 视觉渲染管线(PDF / DOCX / 长图 / 微信公众号 / live preview / share-ready JSON 对接 enhance / OG 卡片 / 二维码 / KB 归档)— 火一五\",\n  \"private\": true,\n  \"main\": \"scripts/lib/render.js\",\n  \"bin\": {\n    \"huo15-md2pdf\": \"scripts/md2pdf-puppet.js\",\n    \"huo15-md2html\": \"scripts/md2html.js\",\n    \"huo15-md2image\": \"scripts/md2image.js\",\n    \"huo15-md2wechat\": \"scripts/md2wechat.js\",\n    \"huo15-md-preview\": \"scripts/md-preview.js\",\n    \"huo15-md-share\": \"scripts/md-share.sh\",\n    \"huo15-md-publish\": \"scripts/md-publish.sh\"\n  },\n  \"dependencies\": {\n    \"markdown-it\": \"^14.1.0\",\n    \"markdown-it-anchor\": \"^9.2.0\",\n    \"markdown-it-attrs\": \"^4.3.1\",\n    \"markdown-it-emoji\": \"^3.0.0\",\n    \"markdown-it-footnote\": \"^4.0.0\",\n    \"markdown-it-task-lists\": \"^2.1.1\",\n    \"@mdit/plugin-katex\": \"^0.18.0\",\n    \"@mdit/plugin-mark\": \"^0.18.0\",\n    \"@mdit/plugin-sub\": \"^0.18.0\",\n    \"@mdit/plugin-sup\": \"^0.18.0\",\n    \"highlight.js\": \"^11.10.0\",\n    \"katex\": \"^0.16.11\",\n    \"puppeteer\": \"^23.0.0\",\n    \"juice\": \"^11.0.0\",\n    \"qrcode\": \"^1.5.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v0.4.3: 35 files, 85494 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (9146b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (10549b), scripts/md-share.sh (9271b), scripts/md2docx.sh (1484b), scripts/md2html.js (2131b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6588b), scripts/md2pdf.sh (2183b), scripts/md2wechat.js (1591b), SKILL.md (30405b), templates/pdf-print.css (1501b), templates/README.md (1788b), themes/_tokens.css (8578b), themes/academic.css (2874b), themes/anthropic-doc.css (4098b), themes/apple-tech.css (8331b), themes/DESIGN.md (13605b), themes/editorial-magazine.css (5989b), themes/github.css (1875b), themes/huo15-brand.css (3613b), themes/manuscript-book.css (5473b), themes/tufte-handout.css (6287b), themes/typora-newsprint.css (1728b), themes/typora-night.css (3748b), themes/wechat.css (3673b), themes/xiaohongshu.css (3795b)\n\nFile v0.4.3:SKILL.md\n\n---\nname: huo15-markdown-export\ndisplayName: 火一五排版发布技能\ndescription: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **apple-tech(苹果科技风,大字 hero + 紧字距 + 黑白蓝 + 大留白,默认主题)**,其他 11 套:typora-newsprint 报纸 / typora-night 暗色 / github / academic / 微信 / 小红书 / huo15-brand 品牌 / anthropic-doc Anthropic 文档 / editorial-magazine 杂志 / manuscript-book 书稿 / tufte-handout Tufte 边注。Node + markdown-it + Puppeteer + qrcode。与 office-doc 互补(它走公文,本 skill 走 md 视觉美学)。v0.4.2:加 apple-tech 默认 + 修 YAML frontmatter 错乱渲染 + 强化触发词。v0.4.1:反 Type 3 字体修复(PDF 浅灰看不清);v0.4.0:抽 _tokens.css + DESIGN.md 团队规范(8 大设计范式 + 反 AI Slop / Type 3 红线)。capability detection 集成 enhance:md-share/md-publish 输出 JSON,AI chain 调 enhance_share_file 拿公网 URL 发企微/钉钉/微信;无 enhance 独立可跑。触发词:火一五排版发布、火一五排版发布技能、火一五排版、火一五出版、火一五发布、火一五markdown、火一五PDF、火一五导出、排版发布、导出PDF、导出Word、md转PDF、md转Word、md2pdf、md2docx、Typora、长图、小红书、朋友圈长图、微信公众号、博客导出、复盘、changelog、版本对比、品牌报告、发到企微、发给客户、分享链接、公网链接、卡片预览、二维码、苹果科技风、Apple 风、科技风、技术博客、产品文档、品牌故事、深度长文、小说、长篇随笔、研究报告、数据分析、教学讲义、Anthropic 文档风、杂志体、书稿体、Tufte 边注。\nversion: 0.4.3\naliases:\n  - 火一五排版发布技能\n  - 火一五排版发布\n  - 火一五排版\n  - 火一五排版技能\n  - 火一五出版技能\n  - 火一五出版\n  - 火一五发布技能\n  - 火一五发布\n  - 火一五Markdown\n  - 火一五Markdown技能\n  - 火一五Markdown排版发布\n  - 火一五PDF导出\n  - 火一五PDF导出技能\n  - 火一五PDF\n  - 火一五导出\n  - 火一五Typora替代\n  - 火一五多端发布技能\n  - 火一五美化排版\n  - 火一五分享文档\n  - 火一五长图技能\n  - 火一五二维码PDF\n  - 火一五苹果科技风\n  - 火一五Apple风\n  - 苹果科技风排版\n  - markdown 渲染\n  - markdown 导出\n  - md2pdf\n  - md2docx\n  - md2image\n  - md2wechat\n  - md-publish\ndependencies:\n  npm-packages:\n    - markdown-it\n    - puppeteer\n    - katex\n    - juice\n    - highlight.js\n  optional-binaries:\n    - pandoc        # 仅 md2docx 必需\n    - weasyprint    # 仅 --engine pandoc 走 weasyprint 路线时\n---\n\n# 火一五 Markdown 视觉渲染管线 v0.1.0\n\n> Typora 不需要复刻——它的能力本来就是开源拼装的。这个 skill 把同一套拼装做成 AI 可调用的版本。\n\n**愿景:** 加速企业向全场景人工智能机器人转变\n**理念:** 打破信息孤岛,用一套系统驱动企业增长\n\n---\n\n## 〇、与 `huo15-openclaw-office-doc` 的边界(必读)\n\n| 维度 | huo15-openclaw-office-doc | huo15-markdown-export(本 skill) |\n|---|---|---|\n| 输入 | 自然语言指令(写合同/写 PRD) | 已有的 markdown 文件 |\n| 引擎 | python-docx + reportlab(结构化直出) | markdown-it + Puppeteer + Pandoc |\n| 适用 | 合同 / PRD / 会议纪要 / 故障报告等**结构化业务公文** | 技术博客 / 复盘 / 营销文案 / 客户报告等**视觉化 markdown** |\n| 主题 | 一套企业公文规范 | 7 套(报纸风/暗色/学术/公众号/小红书/品牌等) |\n| 多端 | docx / PDF | docx / PDF / HTML / 长图 / 公众号 inline / live preview |\n\n**选择规则**:用户给\"目的+主题\"让你**写**新文档 → office-doc;用户给一份**已有的 .md** 让你\"导出/渲染/换主题/做长图\" → 本 skill。\n\n---\n\n## 一、能干什么(7 个工具一图)\n\n```\ninput.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  juice 内联,粘到公众号编辑器\n           │\n           ├──► md-preview.js    ──► http://localhost  改文件自动 reload + 主题热切换\n           │\n           └──► md-diff.sh <from> <to>  ──► changelog.pdf   git ref 之间的变更报告\n```\n\n---\n\n## 二、最小可用流程\n\n```bash\n# 1. 第一次用先装依赖\nbash scripts/install-deps.sh\n\n# 2. 用样例文件试一发\nnode scripts/md2pdf-puppet.js examples/sample.md             # → examples/sample.pdf\nnode scripts/md2html.js       examples/sample.md             # → examples/sample.html\nnode scripts/md2image.js      examples/sample.md             # → examples/sample.png(小红书)\nnode scripts/md2wechat.js     examples/sample.md             # → examples/sample.wechat.html\n\n# 3. 实时预览\nnode scripts/md-preview.js    examples/sample.md             # 浏览器开 http://127.0.0.1:7777\n```\n\n---\n\n## 三、主题选择决策树(给 AI 用)\n\n> v0.4.0 起 11 套主题分两大流派阵营:**信息密集**(给信息读者)/ **视觉沉浸**(给阅读者)。\n> 设计规范完整版见 [`themes/DESIGN.md`](themes/DESIGN.md)。\n\n### 默认 / 通用首选\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"苹果风 / 科技风 / 产品发布稿 / 默认就行\" | **`apple-tech`** ⭐ v0.4.2 默认 | `md2pdf` 或 `md2html` |\n\n### 信息密集类(短段落 + 列表 + 代码)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"技术博客 / 长文随笔 / 个人复盘 / 报纸感\" | `typora-newsprint` | `md2pdf` 或 `md2html` |\n| \"技术博客 / **产品文档 / Anthropic 风 / Stripe 风** / 行业标杆审美\" | **`anthropic-doc`** ⭐ v0.4.0 | `md2html` 或 `md2pdf` |\n| \"GitHub / 开源 / API 文档\" | `github` | `md2pdf` |\n| \"夜间阅读 / 投影 / 暗色\" | `typora-night` | `md2html` |\n| \"学术论文 / IEEE / 投稿初稿\" | `academic` | `md2pdf` |\n| \"公司报告 / 客户提案 / 内部周报 / 带页眉页脚\" | `huo15-brand` | `md2pdf` |\n| \"changelog / release notes / 版本对比\" | `huo15-brand` | `md-diff` |\n\n### 视觉沉浸类(长段落 + 节奏 + 留白)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"**品牌故事 / 商业杂志 / 深度长文 / 访谈**\" | **`editorial-magazine`** ⭐ v0.4.0 | `md2pdf` 或 `md2html` |\n| \"**小说 / 长篇随笔 / 思考长文 / 沉浸阅读**\" | **`manuscript-book`** ⭐ v0.4.0 | `md2pdf` |\n| \"**研究报告 / 数据分析 / 教学讲义 / 论证型长文**\" | **`tufte-handout`** ⭐ v0.4.0 | `md2html`(右挂边注需 ≥1100px 宽屏) |\n\n### 多端发布类(目标编辑器特殊)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"微信公众号 / 推文\" | `wechat` | `md2wechat`(juice 内联化) |\n| \"小红书 / 朋友圈 / 长图文\" | `xiaohongshu` | `md2image`(1080px PNG) |\n\n**用户没说就默认** `apple-tech`(苹果科技风,通用 + 极简 + 黑白蓝 + 大留白,适合 90% 场景)。\n**做技术文档无脑选** `anthropic-doc`(2026 年行业主流审美)。\n\n---\n\n## 四、关键参数速查\n\n### `md2pdf-puppet.js`\n```bash\nnode scripts/md2pdf-puppet.js <input.md> [output.pdf] \\\n  --theme typora-newsprint     # 11 选 1(见 §三 决策树)\n  --paper A4                   # A4 / Letter / A3 / A5\n  --margin 18                  # 四边等距 mm(默认 18)\n  --header \"我的文档\"          # 自定义页眉(huo15-brand 主题已内置)\n  --footer \"{pageNumber} / {totalPages}\"\n  --print-urls                 # 链接后追加 (URL) 文本\n  --no-mermaid                 # 跳过 mermaid 等待加速\n```\n\n### `md2docx.sh`(需先装 pandoc)\n```bash\nbash scripts/md2docx.sh <input.md> [output.docx] \\\n  --no-toc                              # 不要目录\n  --reference templates/reference.docx  # 自定义模板\n```\n\n### `md2image.js`\n```bash\nnode scripts/md2image.js <input.md> [output.png] \\\n  --theme xiaohongshu          # 默认 xiaohongshu\n  --width 1080                 # 画幅宽度\n  --scale 2                    # 倍清(2 = retina)\n```\n\n### `md-diff.sh`\n```bash\nbash scripts/md-diff.sh <from-ref> <to-ref> [output.pdf] \\\n  --theme huo15-brand          # 默认 huo15-brand\n  --repo /path/to/git/repo     # 默认当前目录\n```\n\n---\n\n## 五、AI 调用模式(集成到对话流)\n\n### 模式 A:一步导出\n> 用户:\"把这份分析报告导成 PDF 给我\"\n> AI:Bash → `bash scripts/md2pdf.sh /tmp/report.md /tmp/report.pdf --theme huo15-brand`\n\n### 模式 B:导出 + 转发(联动 huo15-wecom)\n> 用户:\"复盘报告导成 PDF 发到运营群\"\n> 1. AI 写 `report.md` 到 `/tmp`\n> 2. AI 调本 skill 导 PDF → `/tmp/report.pdf`\n> 3. AI 调 `huo15-wecom` 发文件到目标群\n\n### 模式 C:多端并行(一份 md 多种产出)\n> 用户:\"这篇文章我要发公众号 + 小红书 + 个人博客\"\n> AI 并行:\n> - `md2wechat.js article.md` → 公众号粘贴版\n> - `md2image.js article.md --theme xiaohongshu` → 小红书长图\n> - `md2html.js article.md --theme typora-newsprint` → 博客 HTML\n\n### 模式 D:AI 改主题\n> 用户:\"主题再暖一点,标题大一点\"\n> AI 用 Edit 工具直接改 `themes/typora-newsprint.css` 的 `--accent` 与 `h1 font-size`,**不需要写新脚本**——这是本 skill 的元能力。\n\n### 模式 E:版本对比 PDF\n> 用户:\"v1.2 到 v1.3 都改了什么,出个 PDF 给客户\"\n> AI:`bash scripts/md-diff.sh v1.2.0 v1.3.0 release-notes.pdf --theme huo15-brand`\n\n### 模式 F:企微/钉钉/微信对话渲染送达(harness 思维,**最常用**)\n> 用户(在企微对话框):\"把这份复盘渲染成 PDF 发给我\"\n> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"`(默认 `--prefer file`)\n> 2. AI 拿到 stdout 的 JSON,看到 `files[0].path = /tmp/.../report-20260505.pdf` + 3 个 `next_actions`\n> 3. **priority=1 send_file_to_channel**:AI 看当前会话有哪个 `*_send_file` / `*_upload_file` 工具(`wecom_send_file` / `wechat_send_file` / `dingtalk_send_file` 等),**直接发文件到对话框**——用户在企微/钉钉/微信里看到的是带预览的文件消息,点开下载\n> 4. **priority=2 share_via_public_url(fallback)**:send_file 类工具都不可见 / 文件 > 25MB / 用户明确说\"给我链接\" → 才调 `enhance_share_file` 拿公网 URL。**收到 URL 后检查 host**:含 `localhost:18789` 就不要发(用户看 404 — 见 §八踩坑 §14),降级 priority=3\n> 5. **priority=3 local_path(降级)**:把 `file.path` 告诉用户(终端 / SSH 场景)\n> **用户明确要链接**:加 `--prefer link` 反转顺序,先拿 URL 再降级到发文件\n\n### 模式 F 变体:用户明确要分享链接\n> 用户:\"给我个公网链接发给客户,链接形式\"\n> AI:`bash scripts/md-share.sh report.md --mode pdf --label \"...\" --prefer link`\n> → JSON.next_actions 的 priority=1 变成 `share_via_public_url`,AI 调 `enhance_share_file` 拿 URL 发出\n\n### 模式 G:发布 + 多端 + 自动归档(v0.3.0,**复盘场景首选**)\n> 用户:\"把 Q1 复盘**发布**出去,我可能要发企微 + 朋友圈 + 邮件\"\n> AI:`bash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘\"`(默认 mode=all)\n> → 一次渲染 4 端产物 + 写归档 `~/knowledge/huo15/<日期>-<slug>.md` + JSON.post_share_actions\n> → 4 个 file 各调一次 `enhance_share_file` 拿 URL → AI 用 Edit 把 URL 回写到 KB 归档 frontmatter `share_urls:`\n> → 组装\"多版本菜单\"消息回当前会话(PDF / 长图 / HTML / 公众号 inline)— **用户自己**决定转发哪个,不替用户广播\n> 加 `--with-qr` 触发\"二阶段二维码\":AI 用 PDF URL 二刷 `md2pdf-puppet --qr-url <url>` 出打印版\n\n### 模式 H:卡片预览(v0.3.0)\n> 用户:\"发个链接给同事,要在企微对话框里直接看到标题+摘要预览\"\n> AI:`md2html.js` 生成 HTML(默认从 markdown 抽 H1 + 首段作 OG title/description)→ `enhance_share_file` → 发企微\n> 同事看到带卡片预览的链接(微信/企微/Slack/Twitter 都支持 OG)\n\n### 模式 I:线下纸质 ↔ 线上文档(v0.3.0)\n> 用户:\"客户提案打印 50 份发线下,客户能扫码看在线版\"\n> 两阶段:① `md-publish.sh proposal.md --mode pdf --with-qr` 拿 PDF URL ② `md2pdf-puppet --qr-url <PDF URL> --qr-label \"扫码看完整在线版\"` 二维码进每页页脚\n> 用户打印 → 客户扫码 → 跳 enhance 公网链接看高保真 PDF\n\n---\n\n## 六、自定义主题(给 AI 的)\n\n用户说\"我要 X 风格\" → AI 直接改 CSS,**不要重写脚本**:\n\n1. **先读** [`themes/DESIGN.md`](themes/DESIGN.md)(8 大设计范式 + 红线清单 + 命名规范)\n2. 复制最相近的主题到新文件:`cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改 `:root` 中的 **token override**(差异化变量,如 `--font-body` / `--color-accent` / `--measure` / `--leading`)— **不要复制 _tokens.css 的内容**,render.js 自动 prepend\n4. 写本主题独有的\"特征\"(双线 / drop cap / 边注 / 居中标题等)\n5. 在 [`scripts/lib/render.js`](scripts/lib/render.js) 的 `AVAILABLE_THEMES` 数组加新名字\n6. 在本 SKILL.md 第三节决策树加一行\n7. 立刻可用:`--theme <my-theme>`\n\n**主题文件不允许**:\n- 塞 `<script>` / 远程 `@import` 字体(打印会卡)/ JS\n- 用 Inter / Roboto 默认字体(反 AI Slop 红线 — 见 DESIGN.md §1.7)\n- h2/h3 加左竖条装饰(同上,2023 ChatGPT 卡片风泛滥)\n- 渐变背景 / 大 box-shadow 红紫光晕(同上)\n\n---\n\n## 七、依赖说明\n\n| 依赖 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | https://nodejs.org/ 或 `brew install node` |\n| `npm install`(本目录) | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | `md2docx` 必需 | `brew install pandoc` / `apt install pandoc` |\n| WeasyPrint | `md2pdf --engine pandoc` 路线可选 | `pip install weasyprint` |\n| **huo15-openclaw-enhance** | **可选** — 装了启用\"企微对话拿公网 URL\"模式 F | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n**默认路线(puppeteer)只需 npm install,不依赖 pandoc;企微集成所需的 enhance 也是可选,无 enhance 仍能用本机渲染**。\n\n---\n\n## 八、踩坑提示(给 AI 的预防针)\n\n1. **微信公众号粘贴丢样式**:必须用 `md2wechat.js`(已 juice 内联),**不能**直接用 `md2html.js` 的输出粘\n2. **mermaid 渲染需要联网**:`md2pdf-puppet.js` 默认从 jsdelivr CDN 加载 mermaid 运行时,离线环境加 `--no-mermaid`\n3. **小红书长图过长会被压缩**:超过 5000px 时拆成两张,先用 markdown 二级标题分段后分别导\n4. **学术 PDF 中文断行**:`academic` 主题用衬线英文优先,中文长段落建议手动加空格断词,或改用 `huo15-brand` 主题\n5. **品牌页眉页脚只在 huo15-brand 主题生效**:其他主题想要页眉用 `--header` 参数手动加\n6. **reference.docx 不存在不报错**:Pandoc 自动用内置默认。想要品牌 Word → 见 `templates/README.md`\n7. **严禁手写 enhance-share URL**:配合 enhance 时,必须从 `enhance_share_file` 工具的 `structuredContent.url` 取真实链接。**不能**手写、拼接、猜测、回忆类似 `http://localhost:18789/<file>`、`/plugins/enhance-share/<filename>`(缺 token)等任何形式——它们都不是真实链接,用户点了只会 404。这条与 enhance v5.7.24+ 的规则一致\n\n14. **enhance URL 含 localhost 是 404,不要发出去**(v0.4.3 新增):enhance 默认 `bot_base_url=http://localhost:18789`;如果用户的 OpenClaw 服务没配公网 `bot_base_url`,`enhance_share_file` 返回的 URL 就是 localhost URL(`http://localhost:18789/plugins/enhance-share/<token>-<filename>`),企微/钉钉用户点开就 404(他们的机器访问不到你机器的 localhost)。**AI 拿到 URL 后必须检查 host**:如果是 localhost / 127.0.0.1 / 内网 IP → 不要发链接,降级 priority=3(发文件 / 告本地 path),并提示用户\"enhance bot_base_url 未配公网,本次走文件路径\"。**v0.4.3 起 skill 默认 `--prefer file`** 直接绕过这个坑——发文件不依赖公网 URL。\n8. **md-preview.js 不要直接暴露给企微用户**:它绑 127.0.0.1,内网穿透看不见。企微场景必用 `md-share.sh` + enhance_share_file 链路\n9. **md-share.sh / md-publish.sh 不调 enhance**:本 skill 输出 JSON 的 next_actions 是**指示**,不是直接调用——独立装本 skill(没装 enhance)依然能跑(降级 priority=2 输出本地路径)\n10. **md-publish 不替用户广播**:即使用户说\"发到所有群\",也只输出 4 个 URL 让**用户自己**转发。严禁 AI 主动调 wecom 类工具广播——这是 §6.5 + memory `lesson_wecom_at_all_broadcast.md` v2.8.1 @all 事故的红线\n11. **OG 卡片需要公网 URL 才显示完整**:HTML 自包含可粘到本地预览,但**只有把 HTML 通过 enhance_share_file 暴露到公网**,微信/企微/Slack 抓 OG meta 时才会渲染卡片(本机 file:// 不会触发卡片抓取)\n12. **二维码两阶段不能合一**:**md2pdf-puppet --qr-url 必须传一个已存在的公网 URL**——不能在第一阶段渲染 PDF 时就嵌\"未来这个 PDF 的 URL\"(鸡生蛋问题)。正确流程:第一阶段 publish 拿 PDF URL → 第二阶段用该 URL 重渲染带 QR 的 PDF\n13. **KB 归档 frontmatter 的 share_urls 由 AI 回写**:md-publish 写归档时 share_urls 留空数组,**AI 拿到 enhance URL 后用 Edit 工具回写**——脚本不调 enhance,所以脚本自己写不出 URL(capability detection 设计的代价)\n\n---\n\n## 九、企微 / 钉钉 / 微信场景:capability detection 集成 enhance\n\n### 设计原则(与 §11.4 红线 + memory `feedback_plugins_must_be_independently_installable.md` 一致)\n\n- ✅ 本 skill 不 import / 不依赖 enhance\n- ✅ md-share.sh 仅渲染 + 输出标准 JSON\n- ✅ 由调用 skill 的 AI 在运行时检测 enhance 是否在场:**enhance_share_file 工具可见 → 调它拿 URL;不可见 → 给本地路径**\n- ❌ 不写跨插件 import,不写\"if enhance 装了\"的硬判断,不在脚本里 spawn 任何 plugin\n\n### 工作流图\n\n```\n企微用户:\"把这份分析报告导成 PDF 发我\"\n        │\n        ▼\n   OpenClaw inbound\n        │\n        ▼\n   AI 看到 SKILL.md §九 模式 F\n        │\n        ▼\n   bash scripts/md-share.sh report.md --mode pdf --label \"...\"\n        │\n        │ stdout: {\"files\":[{\"path\":\"/tmp/.../report-TS.pdf\",...}], \"next_actions\":[...]}\n        ▼\n   AI 按 next_actions priority=1 尝试:\n   enhance_share_file({filePath, label, expireHours: 24})\n        │\n        ├─ 工具可见 ─→ 拿 structuredContent.url ─→ outbound 发链接到企微 ─→ ✓\n        │\n        └─ 工具不可见 / 调用失败 ─→ priority=2 fallback ─→\n                                 outbound 把 file.path 告诉用户(降级)\n```\n\n### `md-share.sh` 用法速查\n\n```bash\n# 单一格式\nbash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"\nbash scripts/md-share.sh post.md   --mode image --theme xiaohongshu  # 小红书长图\nbash scripts/md-share.sh news.md   --mode wechat                      # 公众号 inline\n\n# 一份 md 多端并行(企微一次给齐 PDF + 长图 + 网页 三个链接)\nbash scripts/md-share.sh report.md --mode all --label \"战略分析报告\"\n\n# 长效链接(客户 30 天内可访问)\nbash scripts/md-share.sh proposal.md --mode pdf --expire-hours 720 --label \"客户提案 v1\"\n```\n\n### `md-publish.sh` 用法速查(v0.3.0,**比 md-share 多了 KB 归档 + 多端默认**)\n\n```bash\n# 默认:mode=all,自动归档到 ~/knowledge/huo15/<日期>-<slug>.md\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n\n# 客户提案(打印场景):带二维码,二阶段 AI 自动二刷 PDF\nbash scripts/md-publish.sh proposal.md --slug client-proposal-v1 \\\n  --label \"客户提案 v1\" --with-qr --expire-hours 720\n\n# 不归档(纯发布,不写知识库)\nbash scripts/md-publish.sh quick-note.md --no-archive\n\n# 自定义归档目录\nbash scripts/md-publish.sh internal.md --kb-dir ~/work/wiki/2026-q2\n\n# 仅 PDF + 归档\nbash scripts/md-publish.sh report.md --mode pdf --slug q1-summary\n```\n\n**md-publish vs md-share 选择**:\n- 一次性\"发我看看\" → md-share(轻量)\n- \"发布出去 + 留档案\" → md-publish(归档 + 多端默认 + 二维码可选)\n- 复盘 / 客户提案 / 周月报 / 公司公告 → md-publish\n\n### v0.3.0 新增能力(简表)\n\n- **OG 卡片**:`md2html` 默认从 H1 + 首段抽 og:title/description;显式覆盖用 `--og-title/--og-description/--og-image/--og-url`。HTML 粘到企微/微信/Slack 自动渲染卡片\n- **PDF 二维码**:两阶段 — ①拿 PDF URL ②`md2pdf-puppet --qr-url <URL> --qr-label \"扫码看在线版\"`,二维码进每页右下角页脚(huo15-brand 主题最佳)\n\n输出 JSON(stdout)始终遵循 schema:\n\n```json\n{\n  \"status\": \"render_complete\",\n  \"files\": [{ \"path\": \"/tmp/.../xxx.pdf\", \"kind\": \"pdf\", \"label\": \"...\", \"size_kb\": 234, \"mime\": \"...\", \"theme\": \"huo15-brand\" }],\n  \"next_actions\": [\n    { \"priority\": 1, \"tool\": \"enhance_share_file\", \"args_per_file\": {...}, \"result_field\": \"structuredContent.url\", \"warning\": \"严禁手写 URL\" },\n    { \"priority\": 2, \"tool\": null, \"fallback\": \"把 path 告诉用户\" }\n  ],\n  \"ai_instruction\": \"对每个 file 优先 priority=1,失败降级 priority=2\"\n}\n```\n\n### AI 触发判断(给读 SKILL.md 的 AI)\n\n用户出现以下意图就走模式 F:\n- \"**发**给我 / 发给客户 / 发到群里\" — outbound 意图\n- \"**链接**给我 / 给我个链接 / 公网链接 / 分享链接\" — URL 需求\n- \"**给我看看 / 看效果 / 预览**\" + 渠道在 IM(企微/钉钉/微信)— 视觉送达\n- 当前会话来自企微/钉钉/微信 inbound — 渠道天然适配 enhance\n\n如果用户**只是**说\"导出 PDF\" 而**没有发送/链接**意图,走模式 A(纯本机文件输出);用户后续说\"发我\" 再切到模式 F。\n\n---\n\n## 十、文件清单\n\n```\nhuo15-markdown-export/\n├── SKILL.md / README.md / package.json / _meta.json / LICENSE\n├── scripts/\n│   ├── install-deps.sh / install-to-workspaces.sh\n│   ├── md2pdf.sh + md2pdf-puppet.js   # PDF\n│   ├── md2docx.sh                      # Word(Pandoc)\n│   ├── md2html.js                      # HTML 自包含 + OG 卡片\n│   ├── md2image.js                     # 长图 PNG\n│   ├── md2wechat.js                    # 微信公众号 inline\n│   ├── md-preview.js                   # 127.0.0.1 live preview\n│   ├── md-share.sh / md-publish.sh    # 对接 enhance(JSON)\n│   ├── md-diff.sh                      # git → changelog PDF\n│   └── lib/render.js                   # 共享渲染核心\n├── themes/\n│   ├── DESIGN.md   ⭐ v0.4.0          # 设计规范(必读)\n│   ├── _tokens.css ⭐ v0.4.0          # design tokens\n│   ├── apple-tech.css ⭐ v0.4.2 默认  # 苹果科技风\n│   ├── typora-newsprint / -night / github / academic / huo15-brand\n│   ├── anthropic-doc / editorial-magazine / manuscript-book / tufte-handout  ⭐ v0.4.0\n│   └── wechat / xiaohongshu           # hardcode(目标编辑器剥 var)\n├── templates/{pdf-print.css, README.md}\n└── examples/{sample.md, chart-demo.md}\n```\n\n---\n\n## 十一、版本\n\n- **v0.4.3**(2026-05-07):**默认发文件而不是发链接(harness 思维)+ 修 localhost URL 404**\n  - 用户报:用 `enhance_share_file` 拿的 URL 是 `http://localhost:18789/plugins/enhance-share/...`(enhance 默认 bot_base_url 未改),企微用户点开 404\n  - **harness 思维改造**(SKILL 脚本硬编码 priority 顺序,AI 只 dispatch 在场工具):\n    - `md-share.sh` / `md-publish.sh` 默认 `--prefer file`,JSON `next_actions` 改 3 优先级:\n      - **priority=1 send_file_to_channel** — 直接发文件到对话框(企微/钉钉/微信原生文件消息),不依赖公网 URL,不暴露 token\n      - **priority=2 share_via_public_url** — 拿公网 URL 发链接(用户明确要 / 文件 > 25MB / send_file 不可用时),AI **必须检查 URL host 是否 localhost**,是则降级\n      - **priority=3 local_path_only** — 告诉用户本地路径(终端/SSH 场景)\n    - 加 `--prefer link` 反转优先级(用户明确要链接时用)\n    - `tools_pattern` 列举:`wecom_send_file` / `wechat_send_file` / `dingtalk_send_file` / `*_send_file` / `*_upload_file`\n  - SKILL.md §九 重写\"模式 F\",新增\"模式 F 变体(明确要链接)\";§八踩坑加第 14 条 localhost URL warning\n- **v0.4.2**(2026-05-07):**新默认主题 apple-tech(苹果科技风)+ 修 YAML frontmatter 错乱 + 加强触发词**\n  - 新增 **`apple-tech`** 主题作为默认 — Apple 官网视觉:大字 hero(h1=3rem 紧字距 -0.022em)+ 大留白(80px+ padding)+ 黑白为主(#1d1d1f 字 / #ffffff 底)+ 极少色(Apple Blue #0066cc 仅在链接,60-30-10)+ 圆角(8-12px panel)+ 零装饰(无下划线 / 无边框 / 无分隔线)\n  - **字体双轨**:屏幕用 -apple-system / SF Pro / PingFang(Mac 原生视觉),`@media print` 切到 Helvetica Neue + Songti SC(反 Type 3 安全字体,PDF 嵌入 CID TrueType 正常)\n  - **修 YAML frontmatter 渲染 bug**(用户截图实测):`render.js` 在 markdown-it parse 前调 `stripFrontMatter()` 剥掉 `--- title: x\\nauthor: y ---`,原来被当成 `<hr>` + 段落渲染显示为大字标题段,现在剥干净 + meta.title 注入 OG title\n  - **改默认主题**:`render.js` 内 `DEFAULT_THEME = 'apple-tech'`(原 `typora-newsprint`),`md2html.js` / `md2pdf-puppet.js` / `md2pdf.sh` / `md-share.sh` 默认全部同步\n  - **加强触发词**:`description` 开头加\"火一五排版发布技能\"重复 3 次提升嵌入向量命中,`aliases` 列表前 8 位全是\"火一五XXX\"高频锚词,补\"苹果科技风排版\" / \"火一五苹果风\"\n  - 修 `anchor permalink` 染色 bug:`markdown-it-anchor` 给 h1-h6 内嵌的 `<a>` 继承 `--color-accent` 致 h1/h2 整段变 Apple Blue,显式 `h1-h6 a { color: inherit }` 让标题保持 fg 色\n- **v0.4.1**(2026-05-07):**反 Type 3 字体修复 — PDF 渲染浅灰看不清的真根因**\n  - 用户报\"科技风、其他风格 PDF 文字很浅看不清\"。深度调研发现:macOS Headless Chromium 把字体嵌入 PDF 时,Apple 受保护字体(`-apple-system` / `system-ui` / `PingFang SC` / `SF Pro` / `Iowan Old Style`)+ OpenType CFF 字体(`Source Han Sans/Serif SC` / `Noto CJK` / `Hiragino Sans GB`)走 **Type 3 路径渲染**,WPS / Foxit / 旧 Acrobat 渲染成笔画细 + 灰阶模糊\n  - 调研对照 Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)— **零用** Apple 系统字体,英文用 PT Serif / Open Sans / Merriweather / Helvetica Neue,中文 fallback 只用 STSong / Songti SC。我们对齐\n  - **修法 1**:`_tokens.css` 字体栈剔除所有禁忌字体,英文用 `PT Serif/Merriweather/Open Sans/Helvetica Neue`,**中文 fallback 不论英文衬线/无衬线统一用 `Songti SC`**(macOS 预装真 TTC,嵌成 CID TrueType 正常)\n  - **修法 2**:typora-night 加 `@media print` 自动反色为浅底深字 — 原本暗底浅字打印模式 1.4:1(WCAG 远不达 4.5:1)看不清,反色后 17.4:1\n  - **修法 3**:`templates/pdf-print.css` 删 `body { background: #ffffff !important }` 强制白底 — 让主题自控背景(newsprint 米色 / manuscript 旧书纸 / editorial 暖白等保留)\n  - **修法 4**:`themes/DESIGN.md §7.5` 新增\"反 Type 3 字体硬红线\"段,落禁忌字体清单 + 推荐字体 + 发版前 `pdffonts | grep \"Type 3\"` 自查\n  - 验收:9 主题 PDF 重渲染,Type 3 字体从 178/177/177/9/194/35/14/10/9 → 5/5/5/9/5/5/9/6/5(主体字体全部 CID TrueType,5-9 个边缘 emoji / 标点 fallback 不影响视觉);9 主题打印模式 WCAG 全部 ≥ 14:1\n- **v0.4.0**(2026-05-07):**主题系统重构 + 4 个新预设**\n  - 抽 `themes/_tokens.css`(全局 design tokens:字体栈 / 字号阶梯 1.25 Major Third / 行高档位 / 留白 8pt grid / 容器宽 / 语义色)\n  - `render.js` 自动为 9 个支持 token 的主题 prepend `_tokens.css`,wechat / xiaohongshu 因目标编辑器剥 var 保留 hardcode\n  - 新增 [`themes/DESIGN.md`](themes/DESIGN.md) — 8 大设计范式 + 反 AI Slop 红线 + 主题选择决策树 + 新主题 7 步 checklist + 发版前红线 grep 自查\n  - 重构 5 旧主题(newsprint / night / github / academic / brand)用 token,代码量 ~40% 收缩\n  - **修 3 处 AI Slop 红线**:typora-night 字体 Inter → system-ui + 暗底 #1f2329 → #121212;huo15-brand 去 h2 左竖条 + 改 60-30-10(strong / h3 不再染主色,主色降到 ≤10%);xiaohongshu 去渐变背景 + 去 strong 渐变高亮 + 去图片红光晕\n  - **新增 4 个预设**:\n    - `anthropic-doc` — Anthropic / Stripe 技术文档风,衬线正文 + 灰底代码 + 极少装饰(2026 年技术文档主流审美)\n    - `editorial-magazine` — 商业杂志体,Playfair Display 大字 + drop cap + 满版图 + 大留白(品牌故事 / 深度长文)\n    - `manuscript-book` — 书稿 / 小说体,单一衬线 + 1.95 行高 + 章标居中 + 0 装饰 + 段首缩进(无干扰沉浸阅读)\n    - `tufte-handout` — Tufte 边注体,窄主文 + 右挂边注(≥1100px)+ 三线表 + ET Book 衬线感(数据分析 / 研究报告)\n  - 主题决策树拆\"信息密集 / 视觉沉浸 / 多端发布\"三阵营(更易选)\n- **v0.3.x**(2026-05-06):`md-publish.sh` 多端发布 + KB 归档;HTML OG 卡片;PDF `--qr-url` 二维码;`install-to-workspaces.sh` 多 workspace 安装\n- **v0.2.0**(2026-05-05):`md-share.sh` + capability detection 集成 enhance\n- **v0.1.0**(2026-05-05):首发,7 主题 + 7 脚本 + KaTeX + mermaid + highlight.js\n\n> 详细 changelog 见 `git log` / cnb.cool 仓库 commit history\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v0.4.3:README.md\n\n# 火一五 Markdown 视觉渲染管线\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>打破信息孤岛,用一套系统驱动企业增长</h3>\n<h3>加速企业用户向全场景人工智能机器人转变</h3>\n\n\n</div>\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n## 这是什么\n\n**`huo15-markdown-export`** 是火一五 OpenClaw 生态的 markdown 视觉渲染管线。任何 `.md` 文件,一行命令就能导出 PDF / Word / 单文件 HTML / 小红书长图 / 微信公众号 inline / live preview / git changelog PDF——7 种产出,7 套主题,零 AI 也能跑,接进 Claude 后 AI 直接调用。\n\n把 Typora 的\"渲染美学 + 多格式导出\"剥离出来,做成 AI 可编排的工具——**编辑器交给 VSCode / Obsidian / Cursor,渲染交给本 skill**。\n\n---\n\n## 与 huo15-openclaw-office-doc 的关系\n\n| 场景 | 用哪个 |\n|---|---|\n| 让 AI **写**一份合同/PRD/会议纪要 | `huo15-openclaw-office-doc`(结构化公文,reportlab 直出) |\n| 我有一份 .md,想**导出**成 PDF/Word/长图 | `huo15-markdown-export`(本 skill) |\n\n**两者互补,不重叠**。\n\n---\n\n## 快速开始\n\n```bash\n# 1. 进 skill 目录\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-markdown-export\n\n# 2. 装依赖(node + 可选 pandoc)\nbash scripts/install-deps.sh\n\n# 3. 试一发\nnode scripts/md2pdf-puppet.js examples/sample.md\nnode scripts/md2image.js      examples/sample.md --theme xiaohongshu\nnode scripts/md-preview.js    examples/sample.md\n# 浏览器打开 http://127.0.0.1:7777\n```\n\n---\n\n## 9 个工具\n\n| 脚本 | 输入 → 输出 | 用途 |\n|---|---|---|\n| `md2pdf-puppet.js` | md → PDF | Chromium 打印(Typora 同款),7 主题;**v0.3.0 加 `--qr-url` 嵌二维码** |\n| `md2docx.sh` | md → docx | Pandoc + 火一五 reference.docx 模板 |\n| `md2html.js` | md → 单文件 html | **v0.3.0 自动加 OG 卡片**(企微/微信粘贴显示标题摘要) |\n| `md2image.js` | md → png | 1080px 小红书长图,也可 huo15-brand 沉稳风 |\n| `md2wechat.js` | md → inline html | juice 内联,粘到微信公众号 |\n| `md-preview.js` | md → http server | 本机 127.0.0.1(企微看不见,本机调试用) |\n| `md-diff.sh` | git ref × 2 → PDF | 版本对比 / changelog |\n| **`md-share.sh`** ⭐ v0.2.0 | md → 多产物 + JSON | **企微对话渲染送达**,对接 enhance 拿公网 URL |\n| **`md-publish.sh`** ⭐⭐ v0.3.0 | md → 多端 + JSON + KB 归档 | **发布场景首选**:多端 + 归档 `~/knowledge/huo15/` + 二阶段 QR PDF;人在回路转发 |\n\n---\n\n## 7 套主题\n\n| 主题 | 适用 |\n|---|---|\n| `typora-newsprint` | 报纸风衬线,个人博客 / 长文随笔 |\n| `typora-night` | 暗色护眼,夜间 / 投影 |\n| `github` | GitHub README 风,开源文档 |\n| `academic` | 学术论文,IEEE/ACM 风格初稿 |\n| `wechat` | 微信公众号(已剥离 grid/flex/var) |\n| `xiaohongshu` | 小红书长图,1080px 暖色大字号 |\n| `huo15-brand` | 火一五品牌,客户报告 / 内部周报(自带页眉页脚) |\n\n切主题:`--theme <name>`。AI 想做新主题:复制最相近的 CSS 改即可。\n\n---\n\n## 集成到 OpenClaw / Claude\n\n**自然语言示例**(AI 自动调用):\n\n> \"把这份分析报告**发给客户**\" → AI 调 `md-share.sh --mode pdf` → chain 调 `enhance_share_file` 拿公网 URL → 发企微对话\n> \"这份 Q1 复盘**发布**出去 + 留档\" → AI 调 `md-publish.sh --slug q1-summary` → 多端发布 + 归档 KB + 4 个 URL 让用户挑转发\n> \"客户提案打印 50 份,要让客户能扫码看在线版\" → AI 调 `md-publish.sh --with-qr` → 二阶段拿到 URL → 二刷 PDF 嵌二维码\n> \"这篇文章发链接给同事,要在企微显示标题摘要预览\" → AI 调 `md2html.js`(v0.3.0 自动 OG)→ enhance share → 发链接,自动卡片\n> \"v1.2 到 v1.3 改了什么,出个 PDF\" → AI 调 `md-diff.sh`\n> \"主题再暖一点\" → AI 用 Edit 工具改 themes/*.css(不写新脚本)\n\n---\n\n## 企微 / 钉钉 / 微信对话渲染送达(v0.2.0 新增)\n\n**问题**:OpenClaw 部署在内网穿透后(`https://<bot_base_url>` → `localhost:18789`),企微用户无法访问 `127.0.0.1` 起的预览 server。\n\n**方案**:`md-share.sh` + `huo15-openclaw-enhance`(可选)的 `enhance_share_file` 工具 = 渲染产物自动暴露成 `https://<bot_base_url>/plugins/enhance-share/<token>-<file>` 公网 URL。\n\n```\n企微用户:\"把复盘渲染成长图发我\"\n     ↓\nAI:bash md-share.sh report.md --mode image --label \"Q1 复盘\"\n     ↓\n拿到 stdout JSON.files[0].path\n     ↓\nAI:enhance_share_file({filePath, label, expireHours: 24})    ← enhance 工具\n     ↓\nurl = https://keepermac.huo15.com/plugins/enhance-share/abc-Q1.png\n     ↓\nAI 把 url 发回企微对话,用户点链接看图\n```\n\n**capability detection 设计**:本 skill **不强依赖 enhance**——\n\n- 装了 enhance:走上面的优雅链路(priority=1)\n- 没装 enhance:`md-share.sh` 输出的 JSON 仍然给本地路径(priority=2 fallback),AI 把路径告诉用户(降级,不报错)\n- 跨 OpenClaw 部署自适应:`bot_base_url` 不同的实例,enhance 自动从 host header 检测,无需配 env\n\n详细 chain 调用模式见 [SKILL.md §九](SKILL.md)。\n\n---\n\n## 发布 + 归档(v0.3.0 新增)\n\n`md-publish.sh` 把\"发出去给人看\"和\"给自己留档\"做成同一个动作:\n\n```bash\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n```\n\n一次完成:\n1. **多端渲染** — PDF + 长图 + HTML(带 OG 卡片)+ 公众号 inline,共 4 个产物\n2. **KB 归档** — 自动写 `~/knowledge/huo15/2026-05-06-q1-summary.md`,带 frontmatter(title / slug / published_at / source / summary / render_outputs / share_urls 占位 / tags)\n3. **share-ready JSON** — AI 拿到后逐个调 `enhance_share_file` 拿 4 个 URL\n4. **回写 KB** — AI 用 Edit 工具把 4 个 URL 写回 KB frontmatter `share_urls:` 列表(未来翻档案能直接拿到当时的公网链接)\n5. **多版本菜单** — AI 把 4 个 URL 组装成消息发回当前会话,**用户自己**决定转发哪个版本到哪个群(人在回路,严守 §6.5 \"禁广播\")\n\n`--with-qr` 启用二阶段:AI 拿到 PDF URL 后,自动用 `md2pdf-puppet --qr-url <url>` 二刷一份带二维码页脚的打印版 PDF。**线下客户提案 / 海报 / 名片背面 / 印刷品**专用——扫码直达在线版。\n\n---\n\n## OG 卡片(v0.3.0 新增)\n\n`md2html.js` 默认从 markdown 抽 H1 + 首段作为 `og:title` / `og:description`。HTML 通过 enhance 暴露成公网 URL 后,粘到企微/微信/Slack 对话框**自动显示标题+摘要的卡片预览**(不是冷链接)。\n\n```bash\n# 自动模式(零配置)\nnode scripts/md2html.js article.md\n\n# 显式覆盖 + 加封面图\nnode scripts/md2html.js article.md article.html \\\n  --og-title \"AI 时代的 Markdown 工具链\" \\\n  --og-description \"把 Typora 拆成 OpenClaw skill 的设计思考\" \\\n  --og-image https://tools.huo15.com/uploads/cover.png\n```\n\n---\n\n## 依赖\n\n| 工具 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | `brew install node` |\n| npm install | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | 仅 `md2docx` | `brew install pandoc` |\n| **huo15-openclaw-enhance** | 仅企微对话送达模式(可选) | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n默认 puppeteer 路线只需 Node,不依赖 pandoc;企微集成所需的 enhance 也是可选——**装不装本 skill 都能跑**。\n\n---\n\n## 详细文档\n\n- 完整能力 + AI 调用模式 → [SKILL.md](SKILL.md)\n- 主题选择决策树 + reference.docx 自定义 → [templates/README.md](templates/README.md)\n- 跑一遍 → [examples/sample.md](examples/sample.md)\n\n---\n\n## 协议\n\nMIT — 见 [LICENSE](LICENSE)。\n\n---\n\n<div align=\"center\">\n\n**公司名称:** 青岛火一五信息科技有限公司\n\n**联系邮箱:** postmaster@huo15.com | **QQ群:** 1093992108\n\n---\n\n**关注逸寻智库公众号,获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\n---\n\nFile v0.4.3:templates/README.md\n\n# 主题选择决策树\n\n| 场景 | 选哪个主题 | 输出格式 | 推荐脚本 |\n|---|---|---|---|\n| 个人技术博客 / 长文随笔 | `typora-newsprint` | HTML / PDF | `md2pdf` / `md2html` |\n| 夜间阅读 / 投影演示 | `typora-night` | HTML | `md2html` |\n| 开源项目文档 / GitHub README | `github` | HTML / PDF | `md2pdf` |\n| 学术论文初稿 | `academic` | PDF | `md2pdf` |\n| 微信公众号发布 | `wechat` | HTML(内联 CSS) | `md2wechat` |\n| 小红书长图文 | `xiaohongshu` | PNG 长图 | `md2image` |\n| 公司对外报告 / 客户提案 | `huo15-brand` | PDF(带页眉页脚) | `md2pdf` |\n| 内部 changelog / 版本对比 | `huo15-brand` | PDF | `md-diff` |\n\n## 想做新主题?\n\n把这个目录里任何一个 CSS 复制为 `themes/<my-theme>.css`,改完在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上名字即可。\n\n主题文件**只允许**写视觉样式——不要在主题里塞 JS,不要 import 远程字体(打印会卡)。\n\n## reference.docx(Word 模板)\n\n`md2docx` 走 Pandoc,默认用本目录的 `reference.docx` 作为字体/页眉模板。\n\n**没有 reference.docx 也能跑**——Pandoc 用内置默认模板。但如果你想要\"火一五品牌的 Word 输出\":\n\n```bash\n# 1. 先用 Pandoc 生成默认 reference.docx\npandoc -o reference.docx --print-default-data-file reference.docx\n\n# 2. 用 Word 打开,改字体(中文 → 等线 / 英文 → Calibri)、改样式、加页眉 logo\n\n# 3. 替换本目录的 reference.docx\nmv ~/Downloads/my-reference.docx /Users/jobzhao/workspace/projects/openclaw/huo15-skills/huo15-markdown-export/templates/reference.docx\n```\n\n## pdf-print.css\n\n控制 PDF 打印时的额外规则:页眉页脚、避免标题孤行、表格不跨页。**改它会影响所有 PDF 输出**——慎改。\n\nFile v0.4.3:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-markdown-export\",\n  \"version\": \"0.4.3\",\n  \"publishedAt\": 1778559920702\n}\n\nFile v0.4.3:examples/chart-demo.md\n\n# Mermaid 图表示例\n\n测试 mermaid 各种图表在 PDF / HTML / PNG 长图中的渲染。\n\n## 流程图\n\n```mermaid\nflowchart TD\n  Start([开始]) --> Input[/输入 markdown/]\n  Input --> Render{渲染}\n  Render -->|markdown-it| HTML[HTML]\n  HTML -->|puppeteer| PDF[PDF]\n  HTML -->|juice 内联| WeChat[微信公众号]\n  HTML -->|screenshot| PNG[长图 PNG]\n  PDF --> End([输出])\n  WeChat --> End\n  PNG --> End\n```\n\n## 时序图\n\n```mermaid\nsequenceDiagram\n  participant U as 用户\n  participant AI as Claude\n  participant S as huo15-markdown-export\n  participant W as huo15-wecom\n\n  U->>AI: 把这份分析报告发给客户\n  AI->>S: bash md2pdf.sh report.md\n  S->>S: markdown-it → HTML → Chromium → PDF\n  S-->>AI: report.pdf\n  AI->>W: send_file(report.pdf, target=客户群)\n  W-->>U: ✓ 已送达\n```\n\n## 甘特图\n\n```mermaid\ngantt\n  title huo15-markdown-export 迭代节奏\n  dateFormat YYYY-MM-DD\n  section v0.1\n  底座 + 主题 :a1, 2026-05-05, 1d\n  脚本 :a2, after a1, 1d\n  section v0.2\n  Pandoc 后端完善 :2026-05-08, 2d\n  reference.docx 模板 :2026-05-10, 1d\n```\n\n## 类图(架构概览)\n\n```mermaid\nclassDiagram\n  class Render {\n    +buildMd()\n    +buildHtml()\n    +readTheme()\n  }\n  class Md2Pdf\n  class Md2Html\n  class Md2Image\n  class Md2Wechat\n  class MdPreview\n\n  Md2Pdf --> Render\n  Md2Html --> Render\n  Md2Image --> Render\n  Md2Wechat --> Render\n  MdPreview --> Render\n```\n\nFile v0.4.3:examples/sample.md\n\n---\ntitle: huo15-markdown-export 渲染样例\nauthor: 火一五\n---\n\n# huo15-markdown-export 渲染样例\n\n> 用这份文档测试所有主题、KaTeX、代码高亮、表格、Mermaid。\n\n## 1. 段落与强调\n\n这是一个普通段落,包含**加粗**、*斜体*、~~删除线~~、==高亮==、`行内代码`、[外链](https://huo15.com)。\n\n中英文混排:Markdown 是一种**轻量级标记语言**,2004 年由 John Gruber 与 Aaron Swartz 共同设计。\n\nH~2~O 与 X^2^ + Y^2^ = Z^2^。\n\n## 2. 列表\n\n无序列表:\n\n- 苹果\n- 橙子\n  - 红橙\n  - 脐橙\n- 香蕉\n\n任务列表:\n\n- [x] 写底座\n- [x] 写主题\n- [ ] 跑通所有脚本\n\n## 3. 表格\n\n| 主题 | 适用场景 | 输出 |\n|---|---|---|\n| `typora-newsprint` | 个人博客 | HTML/PDF |\n| `github` | 开源文档 | HTML/PDF |\n| `wechat` | 微信公众号 | inline HTML |\n| `xiaohongshu` | 小红书长图 | PNG |\n| `huo15-brand` | 公司报告 | PDF(带页眉页脚) |\n\n## 4. 代码块\n\n```javascript\nfunction hello(name) {\n  return `Hello, ${name}!`;\n}\n\nconsole.log(hello('huo15'));\n```\n\n```python\ndef fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        yield a\n        a, b = b, a + b\n\nprint(list(fib(10)))\n```\n\n## 5. 引用\n\n> 「好文案不是写出来的,是留出来的。」 —— Allen 流\n\n> 多层引用:\n> > 嵌套层 1\n> > > 嵌套层 2\n\n## 6. 数学公式\n\n行内:质能方程 $E = mc^2$。\n\n块级:\n\n$$\n\\int_{-\\infty}^{\\infty} e^{-x^2} \\, dx = \\sqrt{\\pi}\n$$\n\n$$\n\\frac{\\partial L}{\\partial \\theta} = \\mathbb{E}\\left[\\nabla_\\theta \\log \\pi_\\theta(a|s) \\cdot Q^\\pi(s, a)\\right]\n$$\n\n## 7. Mermaid 流程图\n\n```mermaid\nflowchart LR\n  A[markdown 源文件] --> B{选择目标}\n  B -->|PDF| C[md2pdf-puppet.js]\n  B -->|HTML| D[md2html.js]\n  B -->|长图| E[md2image.js]\n  B -->|公众号| F[md2wechat.js]\n  C --> G[Chromium 打印]\n  E --> G\n  G --> H[输出文件]\n  D --> H\n  F --> H\n```\n\n## 8. 脚注\n\n这是一个有脚注的句子[^1]。后面再来一个[^typora]。\n\n[^1]: 脚注内容支持 markdown,**包括加粗**和 [链接](https://example.com)。\n[^typora]: Typora 是 2015 年由 Abner Lee 开发的所见即所得 markdown 编辑器。\n\n---\n\n更多用法:`templates/README.md` 主题决策树。\n\nFile v0.4.3:themes/DESIGN.md\n\n# 火一五排版设计规范(themes/DESIGN.md)\n\n> 本文件是 `huo15-markdown-export` 所有主题(themes/*.css)的工作宪法。\n> 任何新增 / 修改主题前先读此文件,任何不一致的地方以本文件为准。\n>\n> v0.4.0 起整套主题改为\"`_tokens.css` 提供 design tokens + 各主题只 override 差异化变量\"的两层架构。\n> 维护:发现新坑或新派别先更新本文件,再改 CSS。\n\n---\n\n## 一、八大设计范式\n\n### 1. 排版(Typography)\n\n| 维度 | 原则 | 中文执行 |\n|---|---|---|\n| **字体分类** | 衬线长文阅读 / 无衬线短文 UI / 等宽代码 | 衬线=Source Han Serif / Songti SC;无衬线=PingFang SC / Source Han Sans;等宽=JetBrains Mono / SF Mono |\n| **字号阶梯** | 数学比例:Minor Third 1.2 / Major Third 1.25 / Perfect Fourth 1.333 | 中文统一用 **1.25 (Major Third)**,温和不喧宾夺主 |\n| **行高(Leading)** | 英文 1.5-1.65 / 中文 **1.7-1.9** | 中文长文 ≥ 1.75 是底线;1.85 适合阅读密度低的随笔 |\n| **行宽(Measure)** | 英文 65ch / 中文 28-40 字 | 720px-820px 最舒服 |\n| **字重对比** | 只用 400 + 700,中间值在打印机糊成一片 | PingFang 600 在 Mac 漂亮但 Win 渲染差,生产用 700 |\n\n### 2. 8pt 网格(Grid)\n\n所有 `margin / padding / font-size / gap` 都是 **8 的倍数**:`8 / 16 / 24 / 32 / 40 / 48 / 64 / 96`。\n\n违反会让\"切主题文档跳动\",视觉系统崩溃。\n\n### 3. 色彩 — 60-30-10 + WCAG AA + OKLCH\n\n- **60-30-10 法则**:背景 60% + 次要色 30% + 强调色 ≤ 10%。**主色不得堆**:strong + h2 边 + h3 + table th 都染主色 = 主色 ≥ 30% = 全文炸\n- **OKLCH > HSL**:HSL 不同色相亮度感知不均;OKLCH 感知均匀。新写主题用 `oklch(...)`,老主题保留 hex 但下次重构时迁移\n- **WCAG 2.2 AA**:正文 4.5:1 / 标题 3:1 / 大字 18px+ 3:1\n- **暗底不要 #000**:屏幕过曝。用 `#0d0d0d` ~ `#1a1a1a`,纯黑只用于打印\n\n### 4. CRAP 四原则(Robin Williams 经典)\n\n- **C**ontrast — 弱对比 = 看不出层级 = 设计失败\n- **R**epetition — 同类元素一致(所有 h2 一个样,所有 quote 一个样)\n- **A**lignment — 严格对齐,不要\"差不多就行\"\n- **P**roximity — 相关元素挨近(h3 距上面 h2 大 / 距下面正文小)\n\n### 5. 印刷美学传承(每种 = 一种主题流派)\n\n| 流派 | 灵魂 | 标志 | 当前主题 |\n|---|---|---|---|\n| **Newsprint(报纸)** | 高密度信息 | 双线分隔 / 衬线小字 / 多列 | typora-newsprint |\n| **Editorial(杂志)** | 慢阅读美学 | 大留白 / drop cap / 引号挂边 / 满版图 | editorial-magazine(v0.4.0) |\n| **Academic(学术)** | 严谨克制 | Times / 双栏 / 编号公式 / 脚注 | academic |\n| **Manuscript(书稿)** | 朴素无干扰 | 单一衬线 / 1.85 行高 / 章标居中 / 零装饰 | manuscript-book(v0.4.0) |\n| **Tufte(边注)** | 数据为本 | 主文 + 右挂边注 / 极少修饰 / 数据嵌入 | tufte-handout(v0.4.0) |\n\n### 6. 数字原生美学\n\n- **Anthropic / Stripe doc**:朴素衬线 + 灰底代码 + 单色 accent + **极少**装饰 — 当前技术文档行业标杆 → `anthropic-doc`(v0.4.0)\n- **GitHub README**:无衬线 + 系统字体 + 蓝 accent → `github`\n- **Notion / Linear**:无衬线紧凑 + 灰阶 + 圆角中性 — SaaS 内部知识库\n- **iOS HIG / Material 3**:不在本 skill 范围(那是 UI 不是文档)\n\n### 7. 反 AI Slop 硬红线(违反则一眼\"AI 生成感\")\n\n| 禁忌 | 原因 | 检查 |\n|---|---|---|\n| 紫色渐变 / 多色彩虹 bg | Midjourney / Stable Diffusion 标志性产物 | grep `linear-gradient` 任何主题 → 必须解释或删 |\n| Emoji 当 icon | 廉价感,改用 lucide / heroicons 实线 SVG | 主题 CSS 不内嵌 emoji |\n| **圆角卡 + 左竖条** | 2023 年 ChatGPT 卡片风,2026 已俗 | grep `border-left.*solid` h2/h3 上 → 改\"上方双线\"或\"字号+letter-spacing\"区分 |\n| **Inter / Roboto 默认** | \"AI 生成网页\"标配,已被识别 | font-family 第一个不能是 Inter / Roboto;参考 §7.5 字体栈选 |\n| CSS 画伪产品图 | AI 标志 | 不准 |\n| 大 box-shadow 红/紫光晕 | AI 标志 | 阴影只用极淡灰 `0 1px 2px rgba(0,0,0,0.05)` |\n\n### 7.5 反 Type 3 字体硬红线(PDF 渲染浅灰看不清的真根因)\n\n> v0.4.1 新增。用户报\"科技风、其他风格 PDF 文字很浅看不清\",根因是 macOS Headless\n> Chromium 把某些字体嵌入 PDF 时走 **Type 3**(路径渲染)而不是 **CID TrueType**,\n> WPS / Foxit / 旧 Acrobat 渲染 Type 3 成笔画细 + 灰阶模糊。\n\n#### 禁忌字体清单(不要在 font-family 里**优先**出现)\n\n| 字体 | 类别 | 原因 |\n|---|---|---|\n| `-apple-system` / `system-ui` / `BlinkMacSystemFont` | CSS 通用族 | macOS 解析为 SF Pro,受保护字体走 Type 3 |\n| `SF Pro` / `SF Mono` | Apple 系统字体 | 受保护无法直接嵌入,走 path |\n| `PingFang SC` | Apple 系统字体 | 受保护(Catalina+ 移到 system),Skia 嵌成 Type 3 |\n| `ui-serif` / `ui-sans-serif` / `ui-monospace` | CSS 通用族 | macOS 走 Apple 受保护字体 |\n| `Iowan Old Style` | Apple Books 字体 | 受保护,走 Type 3 |\n| **`Source Han Sans/Serif SC`** | 开源 OTF | Adobe Source Han 是 OTF/CFF,Skia 嵌成 Type 3 |\n| **`Noto Sans/Serif CJK SC`** | 开源 OTF | Google Noto CJK 同上,OTF/CFF 走 Type 3 |\n| **`Hiragino Sans GB`** | macOS 预装 | OpenType CFF outlines,Skia 嵌成 Type 3 |\n| `STHeiti` / `Heiti SC` | macOS 预装 | OpenType CFF,可能走 Type 3 |\n\n#### 应该用的字体(真 TrueType,可正常嵌入 CID TrueType)\n\n| 类别 | 优先字体 |\n|---|---|\n| 英文衬线 | `PT Serif` / `Merriweather` / `Charter` / `Georgia` / `Times New Roman` / `Liberation Serif` |\n| 英文无衬线 | `Open Sans` / `Helvetica Neue` / `Helvetica` / `Arial` / `Lucida Grande` |\n| 英文等宽 | `Menlo` / `Monaco` / `Consolas` / `Courier New` / `Liberation Mono` |\n| **中文 fallback(不论英文衬线/无衬线)** | **`Songti SC`**(STSongti-SC,macOS 预装真 TTC)/ `STSong` / `SimSun`(Win) |\n| 中文 Win 兜底 | `Microsoft YaHei` |\n| Emoji | `Segoe UI Emoji` / `Apple Color Emoji` / `Noto Color Emoji` |\n\n#### 关键洞察\n\n1. **不论英文是衬线还是无衬线,中文 fallback 都用 `Songti SC`** — 这是 macOS Headless Chromium 下唯一嵌成 CID TrueType 的预装中文字体。Typora 官方 github 主题(英文 Open Sans + 中文 STSong)就是这个策略\n2. **PDF 视觉上中文衬线 vs 无衬线差异极小** — 优先**清晰**而不是纯衬线匹配\n3. **Apple 系统字体在 PDF 上不可控** — Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)**全部零用** -apple-system / system-ui / PingFang SC,我们对齐\n4. **暗主题不要直接走 PDF** — typora-night 加 `@media print` 自动切浅底深字版,避免暗底浅字在打印模式被白底覆盖后 1.4:1 看不清\n\n#### 发版前自查 grep + pdffonts\n\n```bash\n# 1. font-family 首选不能是禁忌字体\ngrep -nE \"font-family.*((-apple-system|system-ui|BlinkMacSystem|PingFang|ui-serif|ui-sans-serif|SF Pro|SF Mono|Iowan|Source Han|Noto.*CJK|Hiragino Sans GB|STHeiti)\" themes/*.css | grep -v \"/\\*\"\n#   命中且字体在前两位 = 违反 §7.5\n\n# 2. 跑完 md2pdf 后看 Type 3 字体计数\npdffonts /tmp/output.pdf | grep -c \"Type 3\"\n#   ≤ 5 ✓ (边缘 emoji / 系统符号);> 50 ❌ (主体走 Type 3 = 浅灰看不清)\npdffonts /tmp/output.pdf | grep -c \"CID TrueType\"\n#   ≥ 30 ✓ (主体字体正常嵌入)\n```\n\n### 8. 中文排版特例\n\n- **font-family 顺序**:英文族优先,中文族在后(浏览器先匹配英文 → 落回中文)。否则中文字体里的英文(伪粗、字宽不一)难看\n- **避头尾**:浏览器 CSS `text-spacing: auto` 兼容差,生产忽略;长段落手动空格断词\n- **首字下沉(drop cap)**:`::first-letter` 中文容易选中标点,要 `<span class=\"dropcap\">` 手动包,默认不开\n- **text-indent: 2em**:学术体首段缩进的中文做法,但中英混排首词若是英文会突兀,用 `:first-of-type, h*+p { text-indent: 0 }` 兜底\n\n---\n\n## 二、本 skill 的工程规范\n\n### 2.1 两层架构(v0.4.0 起)\n\n```\nthemes/\n├── _tokens.css           # 全局 design tokens(字体栈/字号/行高/留白/容器宽/语义色)\n├── DESIGN.md             # 本文件\n├── typora-newsprint.css  # Override slot:--font-body / --color-accent / --color-bg / --measure / --leading\n├── typora-night.css\n├── github.css\n├── academic.css\n├── huo15-brand.css\n├── anthropic-doc.css     # v0.4.0 新增\n├── editorial-magazine.css # v0.4.0 新增\n├── manuscript-book.css   # v0.4.0 新增\n├── tufte-handout.css     # v0.4.0 新增\n├── wechat.css            # 例外:hardcode(微信编辑器剥 var)\n└── xiaohongshu.css       # 例外:hardcode(juice 内联前已展平)\n```\n\n### 2.2 token 命名规范(写在 `_tokens.css`)\n\n```\n--font-{serif|sans|mono|display}      # 字体族\n--fs-{base|sm|lg|h1..h4}              # 字号\n--lh-{tight|normal|relax}             # 行高\n--space-{1..6}                        # 留白(8 的倍数)\n--measure-{narrow|normal|wide|full}   # 容器宽\n--color-{fg|muted|rule|bg|code-bg|accent}  # 语义色\n```\n\n**禁止**:`--brand` / `--accent` 二选一,统一用 `--color-accent`。老命名(typora-newsprint 的 `--accent`)v0.4.0 改造时统一迁移。\n\n### 2.3 主题文件骨架(每个主题都长这样)\n\n```css\n/* huo15-markdown-export — <Theme Name>\n * 流派:<Newsprint / Editorial / Academic / Manuscript / Tufte / Doc / Brand / Social / Dark>\n * 适合:<场景>\n * 关键差异化:<一句话说清这个主题与其他主题的视觉锚点>\n */\n\n@import url(\"./_tokens.css\");\n\n:root {\n  /* === 主题 override:只改差异 token === */\n  --font-body:    var(--font-serif);\n  --font-heading: var(--font-display);\n  --color-accent: #8b2a2a;\n  --color-bg:     #f3eee5;\n  --measure:      var(--measure-normal);\n  --leading:      var(--lh-relax);\n}\n\n/* 然后只写本主题独有的\"特征\"样式 */\n.markdown-body h1 { /* 双线 / 居中 / 红色等 */ }\n```\n\n### 2.4 主题选择决策树(SKILL.md 同步)\n\n| 场景关键词 | 主题 | 流派 |\n|---|---|---|\n| 技术博客 / 长文复盘 / 个人随笔 | `typora-newsprint` | Newsprint |\n| 夜间阅读 / 投影 / 暗色 | `typora-night` | Dark UI |\n| GitHub / 开源 / API 文档 | `github` | Tech-doc |\n| 学术论文 / IEEE 投稿初稿 | `academic` | Academic |\n| 微信公众号 推文 | `wechat` | WeChat editor |\n| 小红书 / 朋友圈长图 | `xiaohongshu` | Social |\n| 公司报告 / 客户提案 / 周报 | `huo15-brand` | Corporate |\n| **技术博客 / 产品文档 / 行业标杆审美** | `anthropic-doc` ⭐ | Stripe/Anthropic Doc |\n| **品牌故事 / 深度长文 / 商业杂志感** | `editorial-magazine` ⭐ | Editorial |\n| **小说 / 思考长文 / 无干扰阅读** | `manuscript-book` ⭐ | Manuscript |\n| **数据分析 / 研究报告 / 教学讲义** | `tufte-handout` ⭐ | Tufte |\n| changelog / 版本对比 | `huo15-brand` | Corporate |\n\n**用户没说就默认** `typora-newsprint`(报纸风为通用合理基线)。\n\n### 2.5 红线自查清单(发版前 grep)\n\n```bash\n# 1. 没有 Inter / Roboto 当默认字体\ngrep -E 'font-family.*\"Inter\"' themes/*.css | grep -v \"/\\*\"\n#    → 命中且不在注释中 = 违反 §1.7\n\n# 2. h2 / h3 没有左竖条\ngrep -E 'h[2-4].*border-left' themes/*.css\n#    → 命中要改\"上方双线 / 字号差 / 字色 / letter-spacing\"\n\n# 3. 没有渐变背景(除非主题流派必须)\ngrep -E 'linear-gradient' themes/*.css\n#    → 命中要审查:editorial-magazine 等可能合理,brand/wechat/xhs 不应有\n\n# 4. 没有 #000 纯黑底色\ngrep -E 'background.*#000(?![0-9a-f])' themes/*.css\n\n# 5. 字体栈中文 fallback 完整\n#    每个主题至少有 PingFang SC / Songti SC / Noto * SC 兜底\n```\n\n### 2.6 新增主题 checklist(写一个新主题的 7 步)\n\n1. 在 `_tokens.css` 中确认所需的 token 已存在(没有的先加进去)\n2. 复制最相近的主题文件 → `cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改文件头注释:流派 + 适合场景 + 关键差异化\n4. 改 `:root` 中的差异化 token(只改差异,不要复制 _tokens 的内容)\n5. 写本主题独有的特征样式(双线 / drop cap / 边注 / 等等)\n6. 在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上新名字\n7. 在 `SKILL.md` 第三节\"主题选择决策树\"加一行\n8. 跑 smoke test:`node scripts/md2html.js examples/sample.md --theme <my-theme>` 检视效果\n\n---\n\n## 三、版本与迁移记录\n\n- **v0.4.0**(2026-05-07,本次):\n  - 抽 `_tokens.css`,5 个旧主题改造为 token-based(newsprint / night / github / academic / brand)\n  - 修 3 处 AI Slop 红线(night Inter / brand 左竖条主色堆 / xhs 渐变光晕)\n  - 新增 4 个预设(anthropic-doc / editorial-magazine / manuscript-book / tufte-handout)\n  - 写本规范文件 `DESIGN.md`\n- **v0.3.x**:7 主题各自独立 CSS,无统一 token,有红线触雷\n\n---\n\n## 四、参考(权威源,优先级降序)\n\n- **CRAP 四原则**:Robin Williams《The Non-Designer's Design Book》\n- **8pt grid**:Material 3 spec / iOS HIG\n- **OKLCH**:Evil Martians《OKLCH in CSS: why we moved from RGB and HSL》\n- **WCAG 2.2**:https://www.w3.org/TR/WCAG22/\n- **中文排版**:W3C《中文排版需求(clreq)》https://www.w3.org/TR/clreq/\n- **Tufte 风格**:Edward Tufte《The Visual Display of Quantitative Information》\n- **Editorial 流派**:Khoi Vinh《Ordering Disorder: Grid Principles for Web Design》\n- **Anthropic doc**:https://docs.anthropic.com/(直接看视觉)\n- **反 AI Slop**:CLAUDE.md §9 / `~/knowledge/huo15/2026-04-27-frontend-design-marathon-v2-v46.md`\n\nFile v0.4.3:package.json\n\n{\n  \"name\": \"@huo15/huo15-markdown-export\",\n  \"version\": \"0.4.3\",\n  \"description\": \"Typora 风 markdown 视觉渲染管线(PDF / DOCX / 长图 / 微信公众号 / live preview / share-ready JSON 对接 enhance / OG 卡片 / 二维码 / KB 归档)— 火一五\",\n  \"private\": true,\n  \"main\": \"scripts/lib/render.js\",\n  \"bin\": {\n    \"huo15-md2pdf\": \"scripts/md2pdf-puppet.js\",\n    \"huo15-md2html\": \"scripts/md2html.js\",\n    \"huo15-md2image\": \"scripts/md2image.js\",\n    \"huo15-md2wechat\": \"scripts/md2wechat.js\",\n    \"huo15-md-preview\": \"scripts/md-preview.js\",\n    \"huo15-md-share\": \"scripts/md-share.sh\",\n    \"huo15-md-publish\": \"scripts/md-publish.sh\"\n  },\n  \"dependencies\": {\n    \"markdown-it\": \"^14.1.0\",\n    \"markdown-it-anchor\": \"^9.2.0\",\n    \"markdown-it-attrs\": \"^4.3.1\",\n    \"markdown-it-emoji\": \"^3.0.0\",\n    \"markdown-it-footnote\": \"^4.0.0\",\n    \"markdown-it-task-lists\": \"^2.1.1\",\n    \"@mdit/plugin-katex\": \"^0.18.0\",\n    \"@mdit/plugin-mark\": \"^0.18.0\",\n    \"@mdit/plugin-sub\": \"^0.18.0\",\n    \"@mdit/plugin-sup\": \"^0.18.0\",\n    \"highlight.js\": \"^11.10.0\",\n    \"katex\": \"^0.16.11\",\n    \"puppeteer\": \"^23.0.0\",\n    \"juice\": \"^11.0.0\",\n    \"qrcode\": \"^1.5.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v0.4.2: 35 files, 82649 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (9146b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (8137b), scripts/md-share.sh (7051b), scripts/md2docx.sh (1484b), scripts/md2html.js (2131b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6588b), scripts/md2pdf.sh (2183b), scripts/md2wechat.js (1591b), SKILL.md (27777b), templates/pdf-print.css (1501b), templates/README.md (1788b), themes/_tokens.css (8578b), themes/academic.css (2874b), themes/anthropic-doc.css (4098b), themes/apple-tech.css (8331b), themes/DESIGN.md (13605b), themes/editorial-magazine.css (5989b), themes/github.css (1875b), themes/huo15-brand.css (3613b), themes/manuscript-book.css (5473b), themes/tufte-handout.css (6287b), themes/typora-newsprint.css (1728b), themes/typora-night.css (3748b), themes/wechat.css (3673b), themes/xiaohongshu.css (3795b)\n\nFile v0.4.2:SKILL.md\n\n---\nname: huo15-markdown-export\ndisplayName: 火一五排版发布技能\ndescription: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **apple-tech(苹果科技风,大字 hero + 紧字距 + 黑白蓝 + 大留白,默认主题)**,其他 11 套:typora-newsprint 报纸 / typora-night 暗色 / github / academic / 微信 / 小红书 / huo15-brand 品牌 / anthropic-doc Anthropic 文档 / editorial-magazine 杂志 / manuscript-book 书稿 / tufte-handout Tufte 边注。Node + markdown-it + Puppeteer + qrcode。与 office-doc 互补(它走公文,本 skill 走 md 视觉美学)。v0.4.2:加 apple-tech 默认 + 修 YAML frontmatter 错乱渲染 + 强化触发词。v0.4.1:反 Type 3 字体修复(PDF 浅灰看不清);v0.4.0:抽 _tokens.css + DESIGN.md 团队规范(8 大设计范式 + 反 AI Slop / Type 3 红线)。capability detection 集成 enhance:md-share/md-publish 输出 JSON,AI chain 调 enhance_share_file 拿公网 URL 发企微/钉钉/微信;无 enhance 独立可跑。触发词:火一五排版发布、火一五排版发布技能、火一五排版、火一五出版、火一五发布、火一五markdown、火一五PDF、火一五导出、排版发布、导出PDF、导出Word、md转PDF、md转Word、md2pdf、md2docx、Typora、长图、小红书、朋友圈长图、微信公众号、博客导出、复盘、changelog、版本对比、品牌报告、发到企微、发给客户、分享链接、公网链接、卡片预览、二维码、苹果科技风、Apple 风、科技风、技术博客、产品文档、品牌故事、深度长文、小说、长篇随笔、研究报告、数据分析、教学讲义、Anthropic 文档风、杂志体、书稿体、Tufte 边注。\nversion: 0.4.2\naliases:\n  - 火一五排版发布技能\n  - 火一五排版发布\n  - 火一五排版\n  - 火一五排版技能\n  - 火一五出版技能\n  - 火一五出版\n  - 火一五发布技能\n  - 火一五发布\n  - 火一五Markdown\n  - 火一五Markdown技能\n  - 火一五Markdown排版发布\n  - 火一五PDF导出\n  - 火一五PDF导出技能\n  - 火一五PDF\n  - 火一五导出\n  - 火一五Typora替代\n  - 火一五多端发布技能\n  - 火一五美化排版\n  - 火一五分享文档\n  - 火一五长图技能\n  - 火一五二维码PDF\n  - 火一五苹果科技风\n  - 火一五Apple风\n  - 苹果科技风排版\n  - markdown 渲染\n  - markdown 导出\n  - md2pdf\n  - md2docx\n  - md2image\n  - md2wechat\n  - md-publish\ndependencies:\n  npm-packages:\n    - markdown-it\n    - puppeteer\n    - katex\n    - juice\n    - highlight.js\n  optional-binaries:\n    - pandoc        # 仅 md2docx 必需\n    - weasyprint    # 仅 --engine pandoc 走 weasyprint 路线时\n---\n\n# 火一五 Markdown 视觉渲染管线 v0.1.0\n\n> Typora 不需要复刻——它的能力本来就是开源拼装的。这个 skill 把同一套拼装做成 AI 可调用的版本。\n\n**愿景:** 加速企业向全场景人工智能机器人转变\n**理念:** 打破信息孤岛,用一套系统驱动企业增长\n\n---\n\n## 〇、与 `huo15-openclaw-office-doc` 的边界(必读)\n\n| 维度 | huo15-openclaw-office-doc | huo15-markdown-export(本 skill) |\n|---|---|---|\n| 输入 | 自然语言指令(写合同/写 PRD) | 已有的 markdown 文件 |\n| 引擎 | python-docx + reportlab(结构化直出) | markdown-it + Puppeteer + Pandoc |\n| 适用 | 合同 / PRD / 会议纪要 / 故障报告等**结构化业务公文** | 技术博客 / 复盘 / 营销文案 / 客户报告等**视觉化 markdown** |\n| 主题 | 一套企业公文规范 | 7 套(报纸风/暗色/学术/公众号/小红书/品牌等) |\n| 多端 | docx / PDF | docx / PDF / HTML / 长图 / 公众号 inline / live preview |\n\n**选择规则**:用户给\"目的+主题\"让你**写**新文档 → office-doc;用户给一份**已有的 .md** 让你\"导出/渲染/换主题/做长图\" → 本 skill。\n\n---\n\n## 一、能干什么(7 个工具一图)\n\n```\ninput.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  juice 内联,粘到公众号编辑器\n           │\n           ├──► md-preview.js    ──► http://localhost  改文件自动 reload + 主题热切换\n           │\n           └──► md-diff.sh <from> <to>  ──► changelog.pdf   git ref 之间的变更报告\n```\n\n---\n\n## 二、最小可用流程\n\n```bash\n# 1. 第一次用先装依赖\nbash scripts/install-deps.sh\n\n# 2. 用样例文件试一发\nnode scripts/md2pdf-puppet.js examples/sample.md             # → examples/sample.pdf\nnode scripts/md2html.js       examples/sample.md             # → examples/sample.html\nnode scripts/md2image.js      examples/sample.md             # → examples/sample.png(小红书)\nnode scripts/md2wechat.js     examples/sample.md             # → examples/sample.wechat.html\n\n# 3. 实时预览\nnode scripts/md-preview.js    examples/sample.md             # 浏览器开 http://127.0.0.1:7777\n```\n\n---\n\n## 三、主题选择决策树(给 AI 用)\n\n> v0.4.0 起 11 套主题分两大流派阵营:**信息密集**(给信息读者)/ **视觉沉浸**(给阅读者)。\n> 设计规范完整版见 [`themes/DESIGN.md`](themes/DESIGN.md)。\n\n### 默认 / 通用首选\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"苹果风 / 科技风 / 产品发布稿 / 默认就行\" | **`apple-tech`** ⭐ v0.4.2 默认 | `md2pdf` 或 `md2html` |\n\n### 信息密集类(短段落 + 列表 + 代码)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"技术博客 / 长文随笔 / 个人复盘 / 报纸感\" | `typora-newsprint` | `md2pdf` 或 `md2html` |\n| \"技术博客 / **产品文档 / Anthropic 风 / Stripe 风** / 行业标杆审美\" | **`anthropic-doc`** ⭐ v0.4.0 | `md2html` 或 `md2pdf` |\n| \"GitHub / 开源 / API 文档\" | `github` | `md2pdf` |\n| \"夜间阅读 / 投影 / 暗色\" | `typora-night` | `md2html` |\n| \"学术论文 / IEEE / 投稿初稿\" | `academic` | `md2pdf` |\n| \"公司报告 / 客户提案 / 内部周报 / 带页眉页脚\" | `huo15-brand` | `md2pdf` |\n| \"changelog / release notes / 版本对比\" | `huo15-brand` | `md-diff` |\n\n### 视觉沉浸类(长段落 + 节奏 + 留白)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"**品牌故事 / 商业杂志 / 深度长文 / 访谈**\" | **`editorial-magazine`** ⭐ v0.4.0 | `md2pdf` 或 `md2html` |\n| \"**小说 / 长篇随笔 / 思考长文 / 沉浸阅读**\" | **`manuscript-book`** ⭐ v0.4.0 | `md2pdf` |\n| \"**研究报告 / 数据分析 / 教学讲义 / 论证型长文**\" | **`tufte-handout`** ⭐ v0.4.0 | `md2html`(右挂边注需 ≥1100px 宽屏) |\n\n### 多端发布类(目标编辑器特殊)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"微信公众号 / 推文\" | `wechat` | `md2wechat`(juice 内联化) |\n| \"小红书 / 朋友圈 / 长图文\" | `xiaohongshu` | `md2image`(1080px PNG) |\n\n**用户没说就默认** `apple-tech`(苹果科技风,通用 + 极简 + 黑白蓝 + 大留白,适合 90% 场景)。\n**做技术文档无脑选** `anthropic-doc`(2026 年行业主流审美)。\n\n---\n\n## 四、关键参数速查\n\n### `md2pdf-puppet.js`\n```bash\nnode scripts/md2pdf-puppet.js <input.md> [output.pdf] \\\n  --theme typora-newsprint     # 11 选 1(见 §三 决策树)\n  --paper A4                   # A4 / Letter / A3 / A5\n  --margin 18                  # 四边等距 mm(默认 18)\n  --header \"我的文档\"          # 自定义页眉(huo15-brand 主题已内置)\n  --footer \"{pageNumber} / {totalPages}\"\n  --print-urls                 # 链接后追加 (URL) 文本\n  --no-mermaid                 # 跳过 mermaid 等待加速\n```\n\n### `md2docx.sh`(需先装 pandoc)\n```bash\nbash scripts/md2docx.sh <input.md> [output.docx] \\\n  --no-toc                              # 不要目录\n  --reference templates/reference.docx  # 自定义模板\n```\n\n### `md2image.js`\n```bash\nnode scripts/md2image.js <input.md> [output.png] \\\n  --theme xiaohongshu          # 默认 xiaohongshu\n  --width 1080                 # 画幅宽度\n  --scale 2                    # 倍清(2 = retina)\n```\n\n### `md-diff.sh`\n```bash\nbash scripts/md-diff.sh <from-ref> <to-ref> [output.pdf] \\\n  --theme huo15-brand          # 默认 huo15-brand\n  --repo /path/to/git/repo     # 默认当前目录\n```\n\n---\n\n## 五、AI 调用模式(集成到对话流)\n\n### 模式 A:一步导出\n> 用户:\"把这份分析报告导成 PDF 给我\"\n> AI:Bash → `bash scripts/md2pdf.sh /tmp/report.md /tmp/report.pdf --theme huo15-brand`\n\n### 模式 B:导出 + 转发(联动 huo15-wecom)\n> 用户:\"复盘报告导成 PDF 发到运营群\"\n> 1. AI 写 `report.md` 到 `/tmp`\n> 2. AI 调本 skill 导 PDF → `/tmp/report.pdf`\n> 3. AI 调 `huo15-wecom` 发文件到目标群\n\n### 模式 C:多端并行(一份 md 多种产出)\n> 用户:\"这篇文章我要发公众号 + 小红书 + 个人博客\"\n> AI 并行:\n> - `md2wechat.js article.md` → 公众号粘贴版\n> - `md2image.js article.md --theme xiaohongshu` → 小红书长图\n> - `md2html.js article.md --theme typora-newsprint` → 博客 HTML\n\n### 模式 D:AI 改主题\n> 用户:\"主题再暖一点,标题大一点\"\n> AI 用 Edit 工具直接改 `themes/typora-newsprint.css` 的 `--accent` 与 `h1 font-size`,**不需要写新脚本**——这是本 skill 的元能力。\n\n### 模式 E:版本对比 PDF\n> 用户:\"v1.2 到 v1.3 都改了什么,出个 PDF 给客户\"\n> AI:`bash scripts/md-diff.sh v1.2.0 v1.3.0 release-notes.pdf --theme huo15-brand`\n\n### 模式 F:企微/钉钉/微信对话渲染送达(配合 enhance,**最常用**)\n> 用户(在企微对话框):\"把这份复盘渲染成 PDF 发给我\"\n> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"`\n> 2. AI 拿到 stdout 的 JSON,看到 `files[0].path = /tmp/.../report-20260505.pdf`\n> 3. AI 按 JSON.next_actions 顺序:**优先**调 `enhance_share_file({filePath, label, expireHours: 24})`\n> 4. 拿到 `structuredContent.url = https://keepermac.huo15.com/plugins/enhance-share/<token>-report-20260505.pdf`\n> 5. AI 把 url 作为 outbound 消息回到当前会话,企微用户在对话框点链接下载/查看\n> **若无 enhance**:JSON 的 priority=2 fallback,AI 把本地 path 告诉用户(降级,但不报错)\n\n### 模式 G:发布 + 多端 + 自动归档(v0.3.0,**复盘场景首选**)\n> 用户:\"把 Q1 复盘**发布**出去,我可能要发企微 + 朋友圈 + 邮件\"\n> AI:`bash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘\"`(默认 mode=all)\n> → 一次渲染 4 端产物 + 写归档 `~/knowledge/huo15/<日期>-<slug>.md` + JSON.post_share_actions\n> → 4 个 file 各调一次 `enhance_share_file` 拿 URL → AI 用 Edit 把 URL 回写到 KB 归档 frontmatter `share_urls:`\n> → 组装\"多版本菜单\"消息回当前会话(PDF / 长图 / HTML / 公众号 inline)— **用户自己**决定转发哪个,不替用户广播\n> 加 `--with-qr` 触发\"二阶段二维码\":AI 用 PDF URL 二刷 `md2pdf-puppet --qr-url <url>` 出打印版\n\n### 模式 H:卡片预览(v0.3.0)\n> 用户:\"发个链接给同事,要在企微对话框里直接看到标题+摘要预览\"\n> AI:`md2html.js` 生成 HTML(默认从 markdown 抽 H1 + 首段作 OG title/description)→ `enhance_share_file` → 发企微\n> 同事看到带卡片预览的链接(微信/企微/Slack/Twitter 都支持 OG)\n\n### 模式 I:线下纸质 ↔ 线上文档(v0.3.0)\n> 用户:\"客户提案打印 50 份发线下,客户能扫码看在线版\"\n> 两阶段:① `md-publish.sh proposal.md --mode pdf --with-qr` 拿 PDF URL ② `md2pdf-puppet --qr-url <PDF URL> --qr-label \"扫码看完整在线版\"` 二维码进每页页脚\n> 用户打印 → 客户扫码 → 跳 enhance 公网链接看高保真 PDF\n\n---\n\n## 六、自定义主题(给 AI 的)\n\n用户说\"我要 X 风格\" → AI 直接改 CSS,**不要重写脚本**:\n\n1. **先读** [`themes/DESIGN.md`](themes/DESIGN.md)(8 大设计范式 + 红线清单 + 命名规范)\n2. 复制最相近的主题到新文件:`cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改 `:root` 中的 **token override**(差异化变量,如 `--font-body` / `--color-accent` / `--measure` / `--leading`)— **不要复制 _tokens.css 的内容**,render.js 自动 prepend\n4. 写本主题独有的\"特征\"(双线 / drop cap / 边注 / 居中标题等)\n5. 在 [`scripts/lib/render.js`](scripts/lib/render.js) 的 `AVAILABLE_THEMES` 数组加新名字\n6. 在本 SKILL.md 第三节决策树加一行\n7. 立刻可用:`--theme <my-theme>`\n\n**主题文件不允许**:\n- 塞 `<script>` / 远程 `@import` 字体(打印会卡)/ JS\n- 用 Inter / Roboto 默认字体(反 AI Slop 红线 — 见 DESIGN.md §1.7)\n- h2/h3 加左竖条装饰(同上,2023 ChatGPT 卡片风泛滥)\n- 渐变背景 / 大 box-shadow 红紫光晕(同上)\n\n---\n\n## 七、依赖说明\n\n| 依赖 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | https://nodejs.org/ 或 `brew install node` |\n| `npm install`(本目录) | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | `md2docx` 必需 | `brew install pandoc` / `apt install pandoc` |\n| WeasyPrint | `md2pdf --engine pandoc` 路线可选 | `pip install weasyprint` |\n| **huo15-openclaw-enhance** | **可选** — 装了启用\"企微对话拿公网 URL\"模式 F | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n**默认路线(puppeteer)只需 npm install,不依赖 pandoc;企微集成所需的 enhance 也是可选,无 enhance 仍能用本机渲染**。\n\n---\n\n## 八、踩坑提示(给 AI 的预防针)\n\n1. **微信公众号粘贴丢样式**:必须用 `md2wechat.js`(已 juice 内联),**不能**直接用 `md2html.js` 的输出粘\n2. **mermaid 渲染需要联网**:`md2pdf-puppet.js` 默认从 jsdelivr CDN 加载 mermaid 运行时,离线环境加 `--no-mermaid`\n3. **小红书长图过长会被压缩**:超过 5000px 时拆成两张,先用 markdown 二级标题分段后分别导\n4. **学术 PDF 中文断行**:`academic` 主题用衬线英文优先,中文长段落建议手动加空格断词,或改用 `huo15-brand` 主题\n5. **品牌页眉页脚只在 huo15-brand 主题生效**:其他主题想要页眉用 `--header` 参数手动加\n6. **reference.docx 不存在不报错**:Pandoc 自动用内置默认。想要品牌 Word → 见 `templates/README.md`\n7. **严禁手写 enhance-share URL**:配合 enhance 时,必须从 `enhance_share_file` 工具的 `structuredContent.url` 取真实链接。**不能**手写、拼接、猜测、回忆类似 `http://localhost:18789/<file>`、`/plugins/enhance-share/<filename>`(缺 token)等任何形式——它们都不是真实链接,用户点了只会 404。这条与 enhance v5.7.24+ 的规则一致\n8. **md-preview.js 不要直接暴露给企微用户**:它绑 127.0.0.1,内网穿透看不见。企微场景必用 `md-share.sh` + enhance_share_file 链路\n9. **md-share.sh / md-publish.sh 不调 enhance**:本 skill 输出 JSON 的 next_actions 是**指示**,不是直接调用——独立装本 skill(没装 enhance)依然能跑(降级 priority=2 输出本地路径)\n10. **md-publish 不替用户广播**:即使用户说\"发到所有群\",也只输出 4 个 URL 让**用户自己**转发。严禁 AI 主动调 wecom 类工具广播——这是 §6.5 + memory `lesson_wecom_at_all_broadcast.md` v2.8.1 @all 事故的红线\n11. **OG 卡片需要公网 URL 才显示完整**:HTML 自包含可粘到本地预览,但**只有把 HTML 通过 enhance_share_file 暴露到公网**,微信/企微/Slack 抓 OG meta 时才会渲染卡片(本机 file:// 不会触发卡片抓取)\n12. **二维码两阶段不能合一**:**md2pdf-puppet --qr-url 必须传一个已存在的公网 URL**——不能在第一阶段渲染 PDF 时就嵌\"未来这个 PDF 的 URL\"(鸡生蛋问题)。正确流程:第一阶段 publish 拿 PDF URL → 第二阶段用该 URL 重渲染带 QR 的 PDF\n13. **KB 归档 frontmatter 的 share_urls 由 AI 回写**:md-publish 写归档时 share_urls 留空数组,**AI 拿到 enhance URL 后用 Edit 工具回写**——脚本不调 enhance,所以脚本自己写不出 URL(capability detection 设计的代价)\n\n---\n\n## 九、企微 / 钉钉 / 微信场景:capability detection 集成 enhance\n\n### 设计原则(与 §11.4 红线 + memory `feedback_plugins_must_be_independently_installable.md` 一致)\n\n- ✅ 本 skill 不 import / 不依赖 enhance\n- ✅ md-share.sh 仅渲染 + 输出标准 JSON\n- ✅ 由调用 skill 的 AI 在运行时检测 enhance 是否在场:**enhance_share_file 工具可见 → 调它拿 URL;不可见 → 给本地路径**\n- ❌ 不写跨插件 import,不写\"if enhance 装了\"的硬判断,不在脚本里 spawn 任何 plugin\n\n### 工作流图\n\n```\n企微用户:\"把这份分析报告导成 PDF 发我\"\n        │\n        ▼\n   OpenClaw inbound\n        │\n        ▼\n   AI 看到 SKILL.md §九 模式 F\n        │\n        ▼\n   bash scripts/md-share.sh report.md --mode pdf --label \"...\"\n        │\n        │ stdout: {\"files\":[{\"path\":\"/tmp/.../report-TS.pdf\",...}], \"next_actions\":[...]}\n        ▼\n   AI 按 next_actions priority=1 尝试:\n   enhance_share_file({filePath, label, expireHours: 24})\n        │\n        ├─ 工具可见 ─→ 拿 structuredContent.url ─→ outbound 发链接到企微 ─→ ✓\n        │\n        └─ 工具不可见 / 调用失败 ─→ priority=2 fallback ─→\n                                 outbound 把 file.path 告诉用户(降级)\n```\n\n### `md-share.sh` 用法速查\n\n```bash\n# 单一格式\nbash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"\nbash scripts/md-share.sh post.md   --mode image --theme xiaohongshu  # 小红书长图\nbash scripts/md-share.sh news.md   --mode wechat                      # 公众号 inline\n\n# 一份 md 多端并行(企微一次给齐 PDF + 长图 + 网页 三个链接)\nbash scripts/md-share.sh report.md --mode all --label \"战略分析报告\"\n\n# 长效链接(客户 30 天内可访问)\nbash scripts/md-share.sh proposal.md --mode pdf --expire-hours 720 --label \"客户提案 v1\"\n```\n\n### `md-publish.sh` 用法速查(v0.3.0,**比 md-share 多了 KB 归档 + 多端默认**)\n\n```bash\n# 默认:mode=all,自动归档到 ~/knowledge/huo15/<日期>-<slug>.md\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n\n# 客户提案(打印场景):带二维码,二阶段 AI 自动二刷 PDF\nbash scripts/md-publish.sh proposal.md --slug client-proposal-v1 \\\n  --label \"客户提案 v1\" --with-qr --expire-hours 720\n\n# 不归档(纯发布,不写知识库)\nbash scripts/md-publish.sh quick-note.md --no-archive\n\n# 自定义归档目录\nbash scripts/md-publish.sh internal.md --kb-dir ~/work/wiki/2026-q2\n\n# 仅 PDF + 归档\nbash scripts/md-publish.sh report.md --mode pdf --slug q1-summary\n```\n\n**md-publish vs md-share 选择**:\n- 一次性\"发我看看\" → md-share(轻量)\n- \"发布出去 + 留档案\" → md-publish(归档 + 多端默认 + 二维码可选)\n- 复盘 / 客户提案 / 周月报 / 公司公告 → md-publish\n\n### v0.3.0 新增能力(简表)\n\n- **OG 卡片**:`md2html` 默认从 H1 + 首段抽 og:title/description;显式覆盖用 `--og-title/--og-description/--og-image/--og-url`。HTML 粘到企微/微信/Slack 自动渲染卡片\n- **PDF 二维码**:两阶段 — ①拿 PDF URL ②`md2pdf-puppet --qr-url <URL> --qr-label \"扫码看在线版\"`,二维码进每页右下角页脚(huo15-brand 主题最佳)\n\n输出 JSON(stdout)始终遵循 schema:\n\n```json\n{\n  \"status\": \"render_complete\",\n  \"files\": [{ \"path\": \"/tmp/.../xxx.pdf\", \"kind\": \"pdf\", \"label\": \"...\", \"size_kb\": 234, \"mime\": \"...\", \"theme\": \"huo15-brand\" }],\n  \"next_actions\": [\n    { \"priority\": 1, \"tool\": \"enhance_share_file\", \"args_per_file\": {...}, \"result_field\": \"structuredContent.url\", \"warning\": \"严禁手写 URL\" },\n    { \"priority\": 2, \"tool\": null, \"fallback\": \"把 path 告诉用户\" }\n  ],\n  \"ai_instruction\": \"对每个 file 优先 priority=1,失败降级 priority=2\"\n}\n```\n\n### AI 触发判断(给读 SKILL.md 的 AI)\n\n用户出现以下意图就走模式 F:\n- \"**发**给我 / 发给客户 / 发到群里\" — outbound 意图\n- \"**链接**给我 / 给我个链接 / 公网链接 / 分享链接\" — URL 需求\n- \"**给我看看 / 看效果 / 预览**\" + 渠道在 IM(企微/钉钉/微信)— 视觉送达\n- 当前会话来自企微/钉钉/微信 inbound — 渠道天然适配 enhance\n\n如果用户**只是**说\"导出 PDF\" 而**没有发送/链接**意图,走模式 A(纯本机文件输出);用户后续说\"发我\" 再切到模式 F。\n\n---\n\n## 十、文件清单\n\n```\nhuo15-markdown-export/\n├── SKILL.md / README.md / package.json / _meta.json / LICENSE\n├── scripts/\n│   ├── install-deps.sh / install-to-workspaces.sh\n│   ├── md2pdf.sh + md2pdf-puppet.js   # PDF\n│   ├── md2docx.sh                      # Word(Pandoc)\n│   ├── md2html.js                      # HTML 自包含 + OG 卡片\n│   ├── md2image.js                     # 长图 PNG\n│   ├── md2wechat.js                    # 微信公众号 inline\n│   ├── md-preview.js                   # 127.0.0.1 live preview\n│   ├── md-share.sh / md-publish.sh    # 对接 enhance(JSON)\n│   ├── md-diff.sh                      # git → changelog PDF\n│   └── lib/render.js                   # 共享渲染核心\n├── themes/\n│   ├── DESIGN.md   ⭐ v0.4.0          # 设计规范(必读)\n│   ├── _tokens.css ⭐ v0.4.0          # design tokens\n│   ├── apple-tech.css ⭐ v0.4.2 默认  # 苹果科技风\n│   ├── typora-newsprint / -night / github / academic / huo15-brand\n│   ├── anthropic-doc / editorial-magazine / manuscript-book / tufte-handout  ⭐ v0.4.0\n│   └── wechat / xiaohongshu           # hardcode(目标编辑器剥 var)\n├── templates/{pdf-print.css, README.md}\n└── examples/{sample.md, chart-demo.md}\n```\n\n---\n\n## 十一、版本\n\n- **v0.4.2**(2026-05-07):**新默认主题 apple-tech(苹果科技风)+ 修 YAML frontmatter 错乱 + 加强触发词**\n  - 新增 **`apple-tech`** 主题作为默认 — Apple 官网视觉:大字 hero(h1=3rem 紧字距 -0.022em)+ 大留白(80px+ padding)+ 黑白为主(#1d1d1f 字 / #ffffff 底)+ 极少色(Apple Blue #0066cc 仅在链接,60-30-10)+ 圆角(8-12px panel)+ 零装饰(无下划线 / 无边框 / 无分隔线)\n  - **字体双轨**:屏幕用 -apple-system / SF Pro / PingFang(Mac 原生视觉),`@media print` 切到 Helvetica Neue + Songti SC(反 Type 3 安全字体,PDF 嵌入 CID TrueType 正常)\n  - **修 YAML frontmatter 渲染 bug**(用户截图实测):`render.js` 在 markdown-it parse 前调 `stripFrontMatter()` 剥掉 `--- title: x\\nauthor: y ---`,原来被当成 `<hr>` + 段落渲染显示为大字标题段,现在剥干净 + meta.title 注入 OG title\n  - **改默认主题**:`render.js` 内 `DEFAULT_THEME = 'apple-tech'`(原 `typora-newsprint`),`md2html.js` / `md2pdf-puppet.js` / `md2pdf.sh` / `md-share.sh` 默认全部同步\n  - **加强触发词**:`description` 开头加\"火一五排版发布技能\"重复 3 次提升嵌入向量命中,`aliases` 列表前 8 位全是\"火一五XXX\"高频锚词,补\"苹果科技风排版\" / \"火一五苹果风\"\n  - 修 `anchor permalink` 染色 bug:`markdown-it-anchor` 给 h1-h6 内嵌的 `<a>` 继承 `--color-accent` 致 h1/h2 整段变 Apple Blue,显式 `h1-h6 a { color: inherit }` 让标题保持 fg 色\n- **v0.4.1**(2026-05-07):**反 Type 3 字体修复 — PDF 渲染浅灰看不清的真根因**\n  - 用户报\"科技风、其他风格 PDF 文字很浅看不清\"。深度调研发现:macOS Headless Chromium 把字体嵌入 PDF 时,Apple 受保护字体(`-apple-system` / `system-ui` / `PingFang SC` / `SF Pro` / `Iowan Old Style`)+ OpenType CFF 字体(`Source Han Sans/Serif SC` / `Noto CJK` / `Hiragino Sans GB`)走 **Type 3 路径渲染**,WPS / Foxit / 旧 Acrobat 渲染成笔画细 + 灰阶模糊\n  - 调研对照 Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)— **零用** Apple 系统字体,英文用 PT Serif / Open Sans / Merriweather / Helvetica Neue,中文 fallback 只用 STSong / Songti SC。我们对齐\n  - **修法 1**:`_tokens.css` 字体栈剔除所有禁忌字体,英文用 `PT Serif/Merriweather/Open Sans/Helvetica Neue`,**中文 fallback 不论英文衬线/无衬线统一用 `Songti SC`**(macOS 预装真 TTC,嵌成 CID TrueType 正常)\n  - **修法 2**:typora-night 加 `@media print` 自动反色为浅底深字 — 原本暗底浅字打印模式 1.4:1(WCAG 远不达 4.5:1)看不清,反色后 17.4:1\n  - **修法 3**:`templates/pdf-print.css` 删 `body { background: #ffffff !important }` 强制白底 — 让主题自控背景(newsprint 米色 / manuscript 旧书纸 / editorial 暖白等保留)\n  - **修法 4**:`themes/DESIGN.md §7.5` 新增\"反 Type 3 字体硬红线\"段,落禁忌字体清单 + 推荐字体 + 发版前 `pdffonts | grep \"Type 3\"` 自查\n  - 验收:9 主题 PDF 重渲染,Type 3 字体从 178/177/177/9/194/35/14/10/9 → 5/5/5/9/5/5/9/6/5(主体字体全部 CID TrueType,5-9 个边缘 emoji / 标点 fallback 不影响视觉);9 主题打印模式 WCAG 全部 ≥ 14:1\n- **v0.4.0**(2026-05-07):**主题系统重构 + 4 个新预设**\n  - 抽 `themes/_tokens.css`(全局 design tokens:字体栈 / 字号阶梯 1.25 Major Third / 行高档位 / 留白 8pt grid / 容器宽 / 语义色)\n  - `render.js` 自动为 9 个支持 token 的主题 prepend `_tokens.css`,wechat / xiaohongshu 因目标编辑器剥 var 保留 hardcode\n  - 新增 [`themes/DESIGN.md`](themes/DESIGN.md) — 8 大设计范式 + 反 AI Slop 红线 + 主题选择决策树 + 新主题 7 步 checklist + 发版前红线 grep 自查\n  - 重构 5 旧主题(newsprint / night / github / academic / brand)用 token,代码量 ~40% 收缩\n  - **修 3 处 AI Slop 红线**:typora-night 字体 Inter → system-ui + 暗底 #1f2329 → #121212;huo15-brand 去 h2 左竖条 + 改 60-30-10(strong / h3 不再染主色,主色降到 ≤10%);xiaohongshu 去渐变背景 + 去 strong 渐变高亮 + 去图片红光晕\n  - **新增 4 个预设**:\n    - `anthropic-doc` — Anthropic / Stripe 技术文档风,衬线正文 + 灰底代码 + 极少装饰(2026 年技术文档主流审美)\n    - `editorial-magazine` — 商业杂志体,Playfair Display 大字 + drop cap + 满版图 + 大留白(品牌故事 / 深度长文)\n    - `manuscript-book` — 书稿 / 小说体,单一衬线 + 1.95 行高 + 章标居中 + 0 装饰 + 段首缩进(无干扰沉浸阅读)\n    - `tufte-handout` — Tufte 边注体,窄主文 + 右挂边注(≥1100px)+ 三线表 + ET Book 衬线感(数据分析 / 研究报告)\n  - 主题决策树拆\"信息密集 / 视觉沉浸 / 多端发布\"三阵营(更易选)\n- **v0.3.x**(2026-05-06):`md-publish.sh` 多端发布 + KB 归档;HTML OG 卡片;PDF `--qr-url` 二维码;`install-to-workspaces.sh` 多 workspace 安装\n- **v0.2.0**(2026-05-05):`md-share.sh` + capability detection 集成 enhance\n- **v0.1.0**(2026-05-05):首发,7 主题 + 7 脚本 + KaTeX + mermaid + highlight.js\n\n> 详细 changelog 见 `git log` / cnb.cool 仓库 commit history\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v0.4.2:README.md\n\n# 火一五 Markdown 视觉渲染管线\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>打破信息孤岛,用一套系统驱动企业增长</h3>\n<h3>加速企业用户向全场景人工智能机器人转变</h3>\n\n\n</div>\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n## 这是什么\n\n**`huo15-markdown-export`** 是火一五 OpenClaw 生态的 markdown 视觉渲染管线。任何 `.md` 文件,一行命令就能导出 PDF / Word / 单文件 HTML / 小红书长图 / 微信公众号 inline / live preview / git changelog PDF——7 种产出,7 套主题,零 AI 也能跑,接进 Claude 后 AI 直接调用。\n\n把 Typora 的\"渲染美学 + 多格式导出\"剥离出来,做成 AI 可编排的工具——**编辑器交给 VSCode / Obsidian / Cursor,渲染交给本 skill**。\n\n---\n\n## 与 huo15-openclaw-office-doc 的关系\n\n| 场景 | 用哪个 |\n|---|---|\n| 让 AI **写**一份合同/PRD/会议纪要 | `huo15-openclaw-office-doc`(结构化公文,reportlab 直出) |\n| 我有一份 .md,想**导出**成 PDF/Word/长图 | `huo15-markdown-export`(本 skill) |\n\n**两者互补,不重叠**。\n\n---\n\n## 快速开始\n\n```bash\n# 1. 进 skill 目录\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-markdown-export\n\n# 2. 装依赖(node + 可选 pandoc)\nbash scripts/install-deps.sh\n\n# 3. 试一发\nnode scripts/md2pdf-puppet.js examples/sample.md\nnode scripts/md2image.js      examples/sample.md --theme xiaohongshu\nnode scripts/md-preview.js    examples/sample.md\n# 浏览器打开 http://127.0.0.1:7777\n```\n\n---\n\n## 9 个工具\n\n| 脚本 | 输入 → 输出 | 用途 |\n|---|---|---|\n| `md2pdf-puppet.js` | md → PDF | Chromium 打印(Typora 同款),7 主题;**v0.3.0 加 `--qr-url` 嵌二维码** |\n| `md2docx.sh` | md → docx | Pandoc + 火一五 reference.docx 模板 |\n| `md2html.js` | md → 单文件 html | **v0.3.0 自动加 OG 卡片**(企微/微信粘贴显示标题摘要) |\n| `md2image.js` | md → png | 1080px 小红书长图,也可 huo15-brand 沉稳风 |\n| `md2wechat.js` | md → inline html | juice 内联,粘到微信公众号 |\n| `md-preview.js` | md → http server | 本机 127.0.0.1(企微看不见,本机调试用) |\n| `md-diff.sh` | git ref × 2 → PDF | 版本对比 / changelog |\n| **`md-share.sh`** ⭐ v0.2.0 | md → 多产物 + JSON | **企微对话渲染送达**,对接 enhance 拿公网 URL |\n| **`md-publish.sh`** ⭐⭐ v0.3.0 | md → 多端 + JSON + KB 归档 | **发布场景首选**:多端 + 归档 `~/knowledge/huo15/` + 二阶段 QR PDF;人在回路转发 |\n\n---\n\n## 7 套主题\n\n| 主题 | 适用 |\n|---|---|\n| `typora-newsprint` | 报纸风衬线,个人博客 / 长文随笔 |\n| `typora-night` | 暗色护眼,夜间 / 投影 |\n| `github` | GitHub README 风,开源文档 |\n| `academic` | 学术论文,IEEE/ACM 风格初稿 |\n| `wechat` | 微信公众号(已剥离 grid/flex/var) |\n| `xiaohongshu` | 小红书长图,1080px 暖色大字号 |\n| `huo15-brand` | 火一五品牌,客户报告 / 内部周报(自带页眉页脚) |\n\n切主题:`--theme <name>`。AI 想做新主题:复制最相近的 CSS 改即可。\n\n---\n\n## 集成到 OpenClaw / Claude\n\n**自然语言示例**(AI 自动调用):\n\n> \"把这份分析报告**发给客户**\" → AI 调 `md-share.sh --mode pdf` → chain 调 `enhance_share_file` 拿公网 URL → 发企微对话\n> \"这份 Q1 复盘**发布**出去 + 留档\" → AI 调 `md-publish.sh --slug q1-summary` → 多端发布 + 归档 KB + 4 个 URL 让用户挑转发\n> \"客户提案打印 50 份,要让客户能扫码看在线版\" → AI 调 `md-publish.sh --with-qr` → 二阶段拿到 URL → 二刷 PDF 嵌二维码\n> \"这篇文章发链接给同事,要在企微显示标题摘要预览\" → AI 调 `md2html.js`(v0.3.0 自动 OG)→ enhance share → 发链接,自动卡片\n> \"v1.2 到 v1.3 改了什么,出个 PDF\" → AI 调 `md-diff.sh`\n> \"主题再暖一点\" → AI 用 Edit 工具改 themes/*.css(不写新脚本)\n\n---\n\n## 企微 / 钉钉 / 微信对话渲染送达(v0.2.0 新增)\n\n**问题**:OpenClaw 部署在内网穿透后(`https://<bot_base_url>` → `localhost:18789`),企微用户无法访问 `127.0.0.1` 起的预览 server。\n\n**方案**:`md-share.sh` + `huo15-openclaw-enhance`(可选)的 `enhance_share_file` 工具 = 渲染产物自动暴露成 `https://<bot_base_url>/plugins/enhance-share/<token>-<file>` 公网 URL。\n\n```\n企微用户:\"把复盘渲染成长图发我\"\n     ↓\nAI:bash md-share.sh report.md --mode image --label \"Q1 复盘\"\n     ↓\n拿到 stdout JSON.files[0].path\n     ↓\nAI:enhance_share_file({filePath, label, expireHours: 24})    ← enhance 工具\n     ↓\nurl = https://keepermac.huo15.com/plugins/enhance-share/abc-Q1.png\n     ↓\nAI 把 url 发回企微对话,用户点链接看图\n```\n\n**capability detection 设计**:本 skill **不强依赖 enhance**——\n\n- 装了 enhance:走上面的优雅链路(priority=1)\n- 没装 enhance:`md-share.sh` 输出的 JSON 仍然给本地路径(priority=2 fallback),AI 把路径告诉用户(降级,不报错)\n- 跨 OpenClaw 部署自适应:`bot_base_url` 不同的实例,enhance 自动从 host header 检测,无需配 env\n\n详细 chain 调用模式见 [SKILL.md §九](SKILL.md)。\n\n---\n\n## 发布 + 归档(v0.3.0 新增)\n\n`md-publish.sh` 把\"发出去给人看\"和\"给自己留档\"做成同一个动作:\n\n```bash\nbash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘报告\"\n```\n\n一次完成:\n1. **多端渲染** — PDF + 长图 + HTML(带 OG 卡片)+ 公众号 inline,共 4 个产物\n2. **KB 归档** — 自动写 `~/knowledge/huo15/2026-05-06-q1-summary.md`,带 frontmatter(title / slug / published_at / source / summary / render_outputs / share_urls 占位 / tags)\n3. **share-ready JSON** — AI 拿到后逐个调 `enhance_share_file` 拿 4 个 URL\n4. **回写 KB** — AI 用 Edit 工具把 4 个 URL 写回 KB frontmatter `share_urls:` 列表(未来翻档案能直接拿到当时的公网链接)\n5. **多版本菜单** — AI 把 4 个 URL 组装成消息发回当前会话,**用户自己**决定转发哪个版本到哪个群(人在回路,严守 §6.5 \"禁广播\")\n\n`--with-qr` 启用二阶段:AI 拿到 PDF URL 后,自动用 `md2pdf-puppet --qr-url <url>` 二刷一份带二维码页脚的打印版 PDF。**线下客户提案 / 海报 / 名片背面 / 印刷品**专用——扫码直达在线版。\n\n---\n\n## OG 卡片(v0.3.0 新增)\n\n`md2html.js` 默认从 markdown 抽 H1 + 首段作为 `og:title` / `og:description`。HTML 通过 enhance 暴露成公网 URL 后,粘到企微/微信/Slack 对话框**自动显示标题+摘要的卡片预览**(不是冷链接)。\n\n```bash\n# 自动模式(零配置)\nnode scripts/md2html.js article.md\n\n# 显式覆盖 + 加封面图\nnode scripts/md2html.js article.md article.html \\\n  --og-title \"AI 时代的 Markdown 工具链\" \\\n  --og-description \"把 Typora 拆成 OpenClaw skill 的设计思考\" \\\n  --og-image https://tools.huo15.com/uploads/cover.png\n```\n\n---\n\n## 依赖\n\n| 工具 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | `brew install node` |\n| npm install | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | 仅 `md2docx` | `brew install pandoc` |\n| **huo15-openclaw-enhance** | 仅企微对话送达模式(可选) | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n默认 puppeteer 路线只需 Node,不依赖 pandoc;企微集成所需的 enhance 也是可选——**装不装本 skill 都能跑**。\n\n---\n\n## 详细文档\n\n- 完整能力 + AI 调用模式 → [SKILL.md](SKILL.md)\n- 主题选择决策树 + reference.docx 自定义 → [templates/README.md](templates/README.md)\n- 跑一遍 → [examples/sample.md](examples/sample.md)\n\n---\n\n## 协议\n\nMIT — 见 [LICENSE](LICENSE)。\n\n---\n\n<div align=\"center\">\n\n**公司名称:** 青岛火一五信息科技有限公司\n\n**联系邮箱:** postmaster@huo15.com | **QQ群:** 1093992108\n\n---\n\n**关注逸寻智库公众号,获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\n---\n\nFile v0.4.2:templates/README.md\n\n# 主题选择决策树\n\n| 场景 | 选哪个主题 | 输出格式 | 推荐脚本 |\n|---|---|---|---|\n| 个人技术博客 / 长文随笔 | `typora-newsprint` | HTML / PDF | `md2pdf` / `md2html` |\n| 夜间阅读 / 投影演示 | `typora-night` | HTML | `md2html` |\n| 开源项目文档 / GitHub README | `github` | HTML / PDF | `md2pdf` |\n| 学术论文初稿 | `academic` | PDF | `md2pdf` |\n| 微信公众号发布 | `wechat` | HTML(内联 CSS) | `md2wechat` |\n| 小红书长图文 | `xiaohongshu` | PNG 长图 | `md2image` |\n| 公司对外报告 / 客户提案 | `huo15-brand` | PDF(带页眉页脚) | `md2pdf` |\n| 内部 changelog / 版本对比 | `huo15-brand` | PDF | `md-diff` |\n\n## 想做新主题?\n\n把这个目录里任何一个 CSS 复制为 `themes/<my-theme>.css`,改完在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上名字即可。\n\n主题文件**只允许**写视觉样式——不要在主题里塞 JS,不要 import 远程字体(打印会卡)。\n\n## reference.docx(Word 模板)\n\n`md2docx` 走 Pandoc,默认用本目录的 `reference.docx` 作为字体/页眉模板。\n\n**没有 reference.docx 也能跑**——Pandoc 用内置默认模板。但如果你想要\"火一五品牌的 Word 输出\":\n\n```bash\n# 1. 先用 Pandoc 生成默认 reference.docx\npandoc -o reference.docx --print-default-data-file reference.docx\n\n# 2. 用 Word 打开,改字体(中文 → 等线 / 英文 → Calibri)、改样式、加页眉 logo\n\n# 3. 替换本目录的 reference.docx\nmv ~/Downloads/my-reference.docx /Users/jobzhao/workspace/projects/openclaw/huo15-skills/huo15-markdown-export/templates/reference.docx\n```\n\n## pdf-print.css\n\n控制 PDF 打印时的额外规则:页眉页脚、避免标题孤行、表格不跨页。**改它会影响所有 PDF 输出**——慎改。\n\nFile v0.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-markdown-export\",\n  \"version\": \"0.4.2\",\n  \"publishedAt\": 1778559405934\n}\n\nFile v0.4.2:examples/chart-demo.md\n\n# Mermaid 图表示例\n\n测试 mermaid 各种图表在 PDF / HTML / PNG 长图中的渲染。\n\n## 流程图\n\n```mermaid\nflowchart TD\n  Start([开始]) --> Input[/输入 markdown/]\n  Input --> Render{渲染}\n  Render -->|markdown-it| HTML[HTML]\n  HTML -->|puppeteer| PDF[PDF]\n  HTML -->|juice 内联| WeChat[微信公众号]\n  HTML -->|screenshot| PNG[长图 PNG]\n  PDF --> End([输出])\n  WeChat --> End\n  PNG --> End\n```\n\n## 时序图\n\n```mermaid\nsequenceDiagram\n  participant U as 用户\n  participant AI as Claude\n  participant S as huo15-markdown-export\n  participant W as huo15-wecom\n\n  U->>AI: 把这份分析报告发给客户\n  AI->>S: bash md2pdf.sh report.md\n  S->>S: markdown-it → HTML → Chromium → PDF\n  S-->>AI: report.pdf\n  AI->>W: send_file(report.pdf, target=客户群)\n  W-->>U: ✓ 已送达\n```\n\n## 甘特图\n\n```mermaid\ngantt\n  title huo15-markdown-export 迭代节奏\n  dateFormat YYYY-MM-DD\n  section v0.1\n  底座 + 主题 :a1, 2026-05-05, 1d\n  脚本 :a2, after a1, 1d\n  section v0.2\n  Pandoc 后端完善 :2026-05-08, 2d\n  reference.docx 模板 :2026-05-10, 1d\n```\n\n## 类图(架构概览)\n\n```mermaid\nclassDiagram\n  class Render {\n    +buildMd()\n    +buildHtml()\n    +readTheme()\n  }\n  class Md2Pdf\n  class Md2Html\n  class Md2Image\n  class Md2Wechat\n  class MdPreview\n\n  Md2Pdf --> Render\n  Md2Html --> Render\n  Md2Image --> Render\n  Md2Wechat --> Render\n  MdPreview --> Render\n```\n\nFile v0.4.2:examples/sample.md\n\n---\ntitle: huo15-markdown-export 渲染样例\nauthor: 火一五\n---\n\n# huo15-markdown-export 渲染样例\n\n> 用这份文档测试所有主题、KaTeX、代码高亮、表格、Mermaid。\n\n## 1. 段落与强调\n\n这是一个普通段落,包含**加粗**、*斜体*、~~删除线~~、==高亮==、`行内代码`、[外链](https://huo15.com)。\n\n中英文混排:Markdown 是一种**轻量级标记语言**,2004 年由 John Gruber 与 Aaron Swartz 共同设计。\n\nH~2~O 与 X^2^ + Y^2^ = Z^2^。\n\n## 2. 列表\n\n无序列表:\n\n- 苹果\n- 橙子\n  - 红橙\n  - 脐橙\n- 香蕉\n\n任务列表:\n\n- [x] 写底座\n- [x] 写主题\n- [ ] 跑通所有脚本\n\n## 3. 表格\n\n| 主题 | 适用场景 | 输出 |\n|---|---|---|\n| `typora-newsprint` | 个人博客 | HTML/PDF |\n| `github` | 开源文档 | HTML/PDF |\n| `wechat` | 微信公众号 | inline HTML |\n| `xiaohongshu` | 小红书长图 | PNG |\n| `huo15-brand` | 公司报告 | PDF(带页眉页脚) |\n\n## 4. 代码块\n\n```javascript\nfunction hello(name) {\n  return `Hello, ${name}!`;\n}\n\nconsole.log(hello('huo15'));\n```\n\n```python\ndef fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        yield a\n        a, b = b, a + b\n\nprint(list(fib(10)))\n```\n\n## 5. 引用\n\n> 「好文案不是写出来的,是留出来的。」 —— Allen 流\n\n> 多层引用:\n> > 嵌套层 1\n> > > 嵌套层 2\n\n## 6. 数学公式\n\n行内:质能方程 $E = mc^2$。\n\n块级:\n\n$$\n\\int_{-\\infty}^{\\infty} e^{-x^2} \\, dx = \\sqrt{\\pi}\n$$\n\n$$\n\\frac{\\partial L}{\\partial \\theta} = \\mathbb{E}\\left[\\nabla_\\theta \\log \\pi_\\theta(a|s) \\cdot Q^\\pi(s, a)\\right]\n$$\n\n## 7. Mermaid 流程图\n\n```mermaid\nflowchart LR\n  A[markdown 源文件] --> B{选择目标}\n  B -->|PDF| C[md2pdf-puppet.js]\n  B -->|HTML| D[md2html.js]\n  B -->|长图| E[md2image.js]\n  B -->|公众号| F[md2wechat.js]\n  C --> G[Chromium 打印]\n  E --> G\n  G --> H[输出文件]\n  D --> H\n  F --> H\n```\n\n## 8. 脚注\n\n这是一个有脚注的句子[^1]。后面再来一个[^typora]。\n\n[^1]: 脚注内容支持 markdown,**包括加粗**和 [链接](https://example.com)。\n[^typora]: Typora 是 2015 年由 Abner Lee 开发的所见即所得 markdown 编辑器。\n\n---\n\n更多用法:`templates/README.md` 主题决策树。\n\nFile v0.4.2:themes/DESIGN.md\n\n# 火一五排版设计规范(themes/DESIGN.md)\n\n> 本文件是 `huo15-markdown-export` 所有主题(themes/*.css)的工作宪法。\n> 任何新增 / 修改主题前先读此文件,任何不一致的地方以本文件为准。\n>\n> v0.4.0 起整套主题改为\"`_tokens.css` 提供 design tokens + 各主题只 override 差异化变量\"的两层架构。\n> 维护:发现新坑或新派别先更新本文件,再改 CSS。\n\n---\n\n## 一、八大设计范式\n\n### 1. 排版(Typography)\n\n| 维度 | 原则 | 中文执行 |\n|---|---|---|\n| **字体分类** | 衬线长文阅读 / 无衬线短文 UI / 等宽代码 | 衬线=Source Han Serif / Songti SC;无衬线=PingFang SC / Source Han Sans;等宽=JetBrains Mono / SF Mono |\n| **字号阶梯** | 数学比例:Minor Third 1.2 / Major Third 1.25 / Perfect Fourth 1.333 | 中文统一用 **1.25 (Major Third)**,温和不喧宾夺主 |\n| **行高(Leading)** | 英文 1.5-1.65 / 中文 **1.7-1.9** | 中文长文 ≥ 1.75 是底线;1.85 适合阅读密度低的随笔 |\n| **行宽(Measure)** | 英文 65ch / 中文 28-40 字 | 720px-820px 最舒服 |\n| **字重对比** | 只用 400 + 700,中间值在打印机糊成一片 | PingFang 600 在 Mac 漂亮但 Win 渲染差,生产用 700 |\n\n### 2. 8pt 网格(Grid)\n\n所有 `margin / padding / font-size / gap` 都是 **8 的倍数**:`8 / 16 / 24 / 32 / 40 / 48 / 64 / 96`。\n\n违反会让\"切主题文档跳动\",视觉系统崩溃。\n\n### 3. 色彩 — 60-30-10 + WCAG AA + OKLCH\n\n- **60-30-10 法则**:背景 60% + 次要色 30% + 强调色 ≤ 10%。**主色不得堆**:strong + h2 边 + h3 + table th 都染主色 = 主色 ≥ 30% = 全文炸\n- **OKLCH > HSL**:HSL 不同色相亮度感知不均;OKLCH 感知均匀。新写主题用 `oklch(...)`,老主题保留 hex 但下次重构时迁移\n- **WCAG 2.2 AA**:正文 4.5:1 / 标题 3:1 / 大字 18px+ 3:1\n- **暗底不要 #000**:屏幕过曝。用 `#0d0d0d` ~ `#1a1a1a`,纯黑只用于打印\n\n### 4. CRAP 四原则(Robin Williams 经典)\n\n- **C**ontrast — 弱对比 = 看不出层级 = 设计失败\n- **R**epetition — 同类元素一致(所有 h2 一个样,所有 quote 一个样)\n- **A**lignment — 严格对齐,不要\"差不多就行\"\n- **P**roximity — 相关元素挨近(h3 距上面 h2 大 / 距下面正文小)\n\n### 5. 印刷美学传承(每种 = 一种主题流派)\n\n| 流派 | 灵魂 | 标志 | 当前主题 |\n|---|---|---|---|\n| **Newsprint(报纸)** | 高密度信息 | 双线分隔 / 衬线小字 / 多列 | typora-newsprint |\n| **Editorial(杂志)** | 慢阅读美学 | 大留白 / drop cap / 引号挂边 / 满版图 | editorial-magazine(v0.4.0) |\n| **Academic(学术)** | 严谨克制 | Times / 双栏 / 编号公式 / 脚注 | academic |\n| **Manuscript(书稿)** | 朴素无干扰 | 单一衬线 / 1.85 行高 / 章标居中 / 零装饰 | manuscript-book(v0.4.0) |\n| **Tufte(边注)** | 数据为本 | 主文 + 右挂边注 / 极少修饰 / 数据嵌入 | tufte-handout(v0.4.0) |\n\n### 6. 数字原生美学\n\n- **Anthropic / Stripe doc**:朴素衬线 + 灰底代码 + 单色 accent + **极少**装饰 — 当前技术文档行业标杆 → `anthropic-doc`(v0.4.0)\n- **GitHub README**:无衬线 + 系统字体 + 蓝 accent → `github`\n- **Notion / Linear**:无衬线紧凑 + 灰阶 + 圆角中性 — SaaS 内部知识库\n- **iOS HIG / Material 3**:不在本 skill 范围(那是 UI 不是文档)\n\n### 7. 反 AI Slop 硬红线(违反则一眼\"AI 生成感\")\n\n| 禁忌 | 原因 | 检查 |\n|---|---|---|\n| 紫色渐变 / 多色彩虹 bg | Midjourney / Stable Diffusion 标志性产物 | grep `linear-gradient` 任何主题 → 必须解释或删 |\n| Emoji 当 icon | 廉价感,改用 lucide / heroicons 实线 SVG | 主题 CSS 不内嵌 emoji |\n| **圆角卡 + 左竖条** | 2023 年 ChatGPT 卡片风,2026 已俗 | grep `border-left.*solid` h2/h3 上 → 改\"上方双线\"或\"字号+letter-spacing\"区分 |\n| **Inter / Roboto 默认** | \"AI 生成网页\"标配,已被识别 | font-family 第一个不能是 Inter / Roboto;参考 §7.5 字体栈选 |\n| CSS 画伪产品图 | AI 标志 | 不准 |\n| 大 box-shadow 红/紫光晕 | AI 标志 | 阴影只用极淡灰 `0 1px 2px rgba(0,0,0,0.05)` |\n\n### 7.5 反 Type 3 字体硬红线(PDF 渲染浅灰看不清的真根因)\n\n> v0.4.1 新增。用户报\"科技风、其他风格 PDF 文字很浅看不清\",根因是 macOS Headless\n> Chromium 把某些字体嵌入 PDF 时走 **Type 3**(路径渲染)而不是 **CID TrueType**,\n> WPS / Foxit / 旧 Acrobat 渲染 Type 3 成笔画细 + 灰阶模糊。\n\n#### 禁忌字体清单(不要在 font-family 里**优先**出现)\n\n| 字体 | 类别 | 原因 |\n|---|---|---|\n| `-apple-system` / `system-ui` / `BlinkMacSystemFont` | CSS 通用族 | macOS 解析为 SF Pro,受保护字体走 Type 3 |\n| `SF Pro` / `SF Mono` | Apple 系统字体 | 受保护无法直接嵌入,走 path |\n| `PingFang SC` | Apple 系统字体 | 受保护(Catalina+ 移到 system),Skia 嵌成 Type 3 |\n| `ui-serif` / `ui-sans-serif` / `ui-monospace` | CSS 通用族 | macOS 走 Apple 受保护字体 |\n| `Iowan Old Style` | Apple Books 字体 | 受保护,走 Type 3 |\n| **`Source Han Sans/Serif SC`** | 开源 OTF | Adobe Source Han 是 OTF/CFF,Skia 嵌成 Type 3 |\n| **`Noto Sans/Serif CJK SC`** | 开源 OTF | Google Noto CJK 同上,OTF/CFF 走 Type 3 |\n| **`Hiragino Sans GB`** | macOS 预装 | OpenType CFF outlines,Skia 嵌成 Type 3 |\n| `STHeiti` / `Heiti SC` | macOS 预装 | OpenType CFF,可能走 Type 3 |\n\n#### 应该用的字体(真 TrueType,可正常嵌入 CID TrueType)\n\n| 类别 | 优先字体 |\n|---|---|\n| 英文衬线 | `PT Serif` / `Merriweather` / `Charter` / `Georgia` / `Times New Roman` / `Liberation Serif` |\n| 英文无衬线 | `Open Sans` / `Helvetica Neue` / `Helvetica` / `Arial` / `Lucida Grande` |\n| 英文等宽 | `Menlo` / `Monaco` / `Consolas` / `Courier New` / `Liberation Mono` |\n| **中文 fallback(不论英文衬线/无衬线)** | **`Songti SC`**(STSongti-SC,macOS 预装真 TTC)/ `STSong` / `SimSun`(Win) |\n| 中文 Win 兜底 | `Microsoft YaHei` |\n| Emoji | `Segoe UI Emoji` / `Apple Color Emoji` / `Noto Color Emoji` |\n\n#### 关键洞察\n\n1. **不论英文是衬线还是无衬线,中文 fallback 都用 `Songti SC`** — 这是 macOS Headless Chromium 下唯一嵌成 CID TrueType 的预装中文字体。Typora 官方 github 主题(英文 Open Sans + 中文 STSong)就是这个策略\n2. **PDF 视觉上中文衬线 vs 无衬线差异极小** — 优先**清晰**而不是纯衬线匹配\n3. **Apple 系统字体在 PDF 上不可控** — Typora 官方 5 大主题(newsprint/github/night/gothic/pixyll)**全部零用** -apple-system / system-ui / PingFang SC,我们对齐\n4. **暗主题不要直接走 PDF** — typora-night 加 `@media print` 自动切浅底深字版,避免暗底浅字在打印模式被白底覆盖后 1.4:1 看不清\n\n#### 发版前自查 grep + pdffonts\n\n```bash\n# 1. font-family 首选不能是禁忌字体\ngrep -nE \"font-family.*((-apple-system|system-ui|BlinkMacSystem|PingFang|ui-serif|ui-sans-serif|SF Pro|SF Mono|Iowan|Source Han|Noto.*CJK|Hiragino Sans GB|STHeiti)\" themes/*.css | grep -v \"/\\*\"\n#   命中且字体在前两位 = 违反 §7.5\n\n# 2. 跑完 md2pdf 后看 Type 3 字体计数\npdffonts /tmp/output.pdf | grep -c \"Type 3\"\n#   ≤ 5 ✓ (边缘 emoji / 系统符号);> 50 ❌ (主体走 Type 3 = 浅灰看不清)\npdffonts /tmp/output.pdf | grep -c \"CID TrueType\"\n#   ≥ 30 ✓ (主体字体正常嵌入)\n```\n\n### 8. 中文排版特例\n\n- **font-family 顺序**:英文族优先,中文族在后(浏览器先匹配英文 → 落回中文)。否则中文字体里的英文(伪粗、字宽不一)难看\n- **避头尾**:浏览器 CSS `text-spacing: auto` 兼容差,生产忽略;长段落手动空格断词\n- **首字下沉(drop cap)**:`::first-letter` 中文容易选中标点,要 `<span class=\"dropcap\">` 手动包,默认不开\n- **text-indent: 2em**:学术体首段缩进的中文做法,但中英混排首词若是英文会突兀,用 `:first-of-type, h*+p { text-indent: 0 }` 兜底\n\n---\n\n## 二、本 skill 的工程规范\n\n### 2.1 两层架构(v0.4.0 起)\n\n```\nthemes/\n├── _tokens.css           # 全局 design tokens(字体栈/字号/行高/留白/容器宽/语义色)\n├── DESIGN.md             # 本文件\n├── typora-newsprint.css  # Override slot:--font-body / --color-accent / --color-bg / --measure / --leading\n├── typora-night.css\n├── github.css\n├── academic.css\n├── huo15-brand.css\n├── anthropic-doc.css     # v0.4.0 新增\n├── editorial-magazine.css # v0.4.0 新增\n├── manuscript-book.css   # v0.4.0 新增\n├── tufte-handout.css     # v0.4.0 新增\n├── wechat.css            # 例外:hardcode(微信编辑器剥 var)\n└── xiaohongshu.css       # 例外:hardcode(juice 内联前已展平)\n```\n\n### 2.2 token 命名规范(写在 `_tokens.css`)\n\n```\n--font-{serif|sans|mono|display}      # 字体族\n--fs-{base|sm|lg|h1..h4}              # 字号\n--lh-{tight|normal|relax}             # 行高\n--space-{1..6}                        # 留白(8 的倍数)\n--measure-{narrow|normal|wide|full}   # 容器宽\n--color-{fg|muted|rule|bg|code-bg|accent}  # 语义色\n```\n\n**禁止**:`--brand` / `--accent` 二选一,统一用 `--color-accent`。老命名(typora-newsprint 的 `--accent`)v0.4.0 改造时统一迁移。\n\n### 2.3 主题文件骨架(每个主题都长这样)\n\n```css\n/* huo15-markdown-export — <Theme Name>\n * 流派:<Newsprint / Editorial / Academic / Manuscript / Tufte / Doc / Brand / Social / Dark>\n * 适合:<场景>\n * 关键差异化:<一句话说清这个主题与其他主题的视觉锚点>\n */\n\n@import url(\"./_tokens.css\");\n\n:root {\n  /* === 主题 override:只改差异 token === */\n  --font-body:    var(--font-serif);\n  --font-heading: var(--font-display);\n  --color-accent: #8b2a2a;\n  --color-bg:     #f3eee5;\n  --measure:      var(--measure-normal);\n  --leading:      var(--lh-relax);\n}\n\n/* 然后只写本主题独有的\"特征\"样式 */\n.markdown-body h1 { /* 双线 / 居中 / 红色等 */ }\n```\n\n### 2.4 主题选择决策树(SKILL.md 同步)\n\n| 场景关键词 | 主题 | 流派 |\n|---|---|---|\n| 技术博客 / 长文复盘 / 个人随笔 | `typora-newsprint` | Newsprint |\n| 夜间阅读 / 投影 / 暗色 | `typora-night` | Dark UI |\n| GitHub / 开源 / API 文档 | `github` | Tech-doc |\n| 学术论文 / IEEE 投稿初稿 | `academic` | Academic |\n| 微信公众号 推文 | `wechat` | WeChat editor |\n| 小红书 / 朋友圈长图 | `xiaohongshu` | Social |\n| 公司报告 / 客户提案 / 周报 | `huo15-brand` | Corporate |\n| **技术博客 / 产品文档 / 行业标杆审美** | `anthropic-doc` ⭐ | Stripe/Anthropic Doc |\n| **品牌故事 / 深度长文 / 商业杂志感** | `editorial-magazine` ⭐ | Editorial |\n| **小说 / 思考长文 / 无干扰阅读** | `manuscript-book` ⭐ | Manuscript |\n| **数据分析 / 研究报告 / 教学讲义** | `tufte-handout` ⭐ | Tufte |\n| changelog / 版本对比 | `huo15-brand` | Corporate |\n\n**用户没说就默认** `typora-newsprint`(报纸风为通用合理基线)。\n\n### 2.5 红线自查清单(发版前 grep)\n\n```bash\n# 1. 没有 Inter / Roboto 当默认字体\ngrep -E 'font-family.*\"Inter\"' themes/*.css | grep -v \"/\\*\"\n#    → 命中且不在注释中 = 违反 §1.7\n\n# 2. h2 / h3 没有左竖条\ngrep -E 'h[2-4].*border-left' themes/*.css\n#    → 命中要改\"上方双线 / 字号差 / 字色 / letter-spacing\"\n\n# 3. 没有渐变背景(除非主题流派必须)\ngrep -E 'linear-gradient' themes/*.css\n#    → 命中要审查:editorial-magazine 等可能合理,brand/wechat/xhs 不应有\n\n# 4. 没有 #000 纯黑底色\ngrep -E 'background.*#000(?![0-9a-f])' themes/*.css\n\n# 5. 字体栈中文 fallback 完整\n#    每个主题至少有 PingFang SC / Songti SC / Noto * SC 兜底\n```\n\n### 2.6 新增主题 checklist(写一个新主题的 7 步)\n\n1. 在 `_tokens.css` 中确认所需的 token 已存在(没有的先加进去)\n2. 复制最相近的主题文件 → `cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改文件头注释:流派 + 适合场景 + 关键差异化\n4. 改 `:root` 中的差异化 token(只改差异,不要复制 _tokens 的内容)\n5. 写本主题独有的特征样式(双线 / drop cap / 边注 / 等等)\n6. 在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上新名字\n7. 在 `SKILL.md` 第三节\"主题选择决策树\"加一行\n8. 跑 smoke test:`node scripts/md2html.js examples/sample.md --theme <my-theme>` 检视效果\n\n---\n\n## 三、版本与迁移记录\n\n- **v0.4.0**(2026-05-07,本次):\n  - 抽 `_tokens.css`,5 个旧主题改造为 token-based(newsprint / night / github / academic / brand)\n  - 修 3 处 AI Slop 红线(night Inter / brand 左竖条主色堆 / xhs 渐变光晕)\n  - 新增 4 个预设(anthropic-doc / editorial-magazine / manuscript-book / tufte-handout)\n  - 写本规范文件 `DESIGN.md`\n- **v0.3.x**:7 主题各自独立 CSS,无统一 token,有红线触雷\n\n---\n\n## 四、参考(权威源,优先级降序)\n\n- **CRAP 四原则**:Robin Williams《The Non-Designer's Design Book》\n- **8pt grid**:Material 3 spec / iOS HIG\n- **OKLCH**:Evil Martians《OKLCH in CSS: why we moved from RGB and HSL》\n- **WCAG 2.2**:https://www.w3.org/TR/WCAG22/\n- **中文排版**:W3C《中文排版需求(clreq)》https://www.w3.org/TR/clreq/\n- **Tufte 风格**:Edward Tufte《The Visual Display of Quantitative Information》\n- **Editorial 流派**:Khoi Vinh《Ordering Disorder: Grid Principles for Web Design》\n- **Anthropic doc**:https://docs.anthropic.com/(直接看视觉)\n- **反 AI Slop**:CLAUDE.md §9 / `~/knowledge/huo15/2026-04-27-frontend-design-marathon-v2-v46.md`\n\nFile v0.4.2:package.json\n\n{\n  \"name\": \"@huo15/huo15-markdown-export\",\n  \"version\": \"0.4.2\",\n  \"description\": \"Typora 风 markdown 视觉渲染管线(PDF / DOCX / 长图 / 微信公众号 / live preview / share-ready JSON 对接 enhance / OG 卡片 / 二维码 / KB 归档)— 火一五\",\n  \"private\": true,\n  \"main\": \"scripts/lib/render.js\",\n  \"bin\": {\n    \"huo15-md2pdf\": \"scripts/md2pdf-puppet.js\",\n    \"huo15-md2html\": \"scripts/md2html.js\",\n    \"huo15-md2image\": \"scripts/md2image.js\",\n    \"huo15-md2wechat\": \"scripts/md2wechat.js\",\n    \"huo15-md-preview\": \"scripts/md-preview.js\",\n    \"huo15-md-share\": \"scripts/md-share.sh\",\n    \"huo15-md-publish\": \"scripts/md-publish.sh\"\n  },\n  \"dependencies\": {\n    \"markdown-it\": \"^14.1.0\",\n    \"markdown-it-anchor\": \"^9.2.0\",\n    \"markdown-it-attrs\": \"^4.3.1\",\n    \"markdown-it-emoji\": \"^3.0.0\",\n    \"markdown-it-footnote\": \"^4.0.0\",\n    \"markdown-it-task-lists\": \"^2.1.1\",\n    \"@mdit/plugin-katex\": \"^0.18.0\",\n    \"@mdit/plugin-mark\": \"^0.18.0\",\n    \"@mdit/plugin-sub\": \"^0.18.0\",\n    \"@mdit/plugin-sup\": \"^0.18.0\",\n    \"highlight.js\": \"^11.10.0\",\n    \"katex\": \"^0.16.11\",\n    \"puppeteer\": \"^23.0.0\",\n    \"juice\": \"^11.0.0\",\n    \"qrcode\": \"^1.5.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v0.4.1: 34 files, 77922 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (7678b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (8137b), scripts/md-share.sh (7063b), scripts/md2docx.sh (1484b), scripts/md2html.js (2143b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6594b), scripts/md2pdf.sh (2189b), scripts/md2wechat.js (1591b), SKILL.md (25573b), templates/pdf-print.css (1501b), templates/README.md (1788b), themes/_tokens.css (8578b), themes/academic.css (2874b), themes/anthropic-doc.css (4098b), themes/DESIGN.md (13605b), themes/editorial-magazine.css (5989b), themes/github.css (1875b), themes/huo15-brand.css (3613b), themes/manuscript-book.css (5473b), themes/tufte-handout.css (6287b), themes/typora-newsprint.css (1728b), themes/typora-night.css (3748b), themes/wechat.css (3673b), themes/xiaohongshu.css (3795b)\n\nFile v0.4.1:SKILL.md\n\n---\nname: huo15-markdown-export\ndisplayName: 火一五排版发布技能\ndescription: 【青岛火一五】Typora 风 markdown 渲染管线 — .md 导出 PDF / Word / HTML / 长图 / 公众号 inline / changelog。**11 主题**(报纸/暗色/GitHub/学术/微信/小红书/火一五品牌 + v0.4.0 新增 Anthropic 文档风/Editorial 杂志/Manuscript 书稿/Tufte 边注)。Node + markdown-it + Puppeteer + qrcode。与 office-doc 互补(它走公文,本 skill 走 md 视觉美学)。v0.4.0:抽 _tokens.css 统一 design tokens,新增 themes/DESIGN.md 团队规范(8 大设计范式 + 反 AI Slop 红线)。capability detection 集成 enhance:装了 huo15-openclaw-enhance 时 md-share/md-publish 输出 JSON,AI chain 调 enhance_share_file 拿 bot_base_url/plugins/enhance-share/<token> 公网 URL 发企微/钉钉/微信;无 enhance 独立可跑。v0.3.0:md-publish 多端发布 + 归档 ~/knowledge/huo15/;HTML 自动 OG 卡片(微信粘贴显示标题摘要);PDF --qr-url 嵌二维码。触发词:排版发布、火一五排版发布、导出 PDF、导出 Word、md 转 PDF、Typora、长图、小红书、朋友圈长图、微信公众号、博客导出、复盘、changelog、版本对比、品牌报告、发到企微、发给客户、分享链接、公网链接、发布、归档、卡片预览、二维码、排版、火一五排版、技术博客、产品文档、品牌故事、深度长文、小说、长篇随笔、研究报告、数据分析、教学讲义、Anthropic 文档风、杂志体、书稿体、Tufte 边注。\nversion: 0.4.1\naliases:\n  - 火一五排版发布技能\n  - 火一五排版发布\n  - 火一五排版技能\n  - 火一五排版\n  - 火一五Markdown技能\n  - 火一五Markdown排版发布\n  - 火一五Typora替代\n  - 火一五PDF导出技能\n  - 火一五出版技能\n  - 火一五发布技能\n  - 火一五多端发布技能\n  - 火一五美化排版\n  - 火一五分享文档\n  - 火一五长图技能\n  - 火一五二维码PDF\n  - markdown 渲染\n  - markdown 导出\n  - md2pdf\n  - md2docx\n  - md2image\n  - md2wechat\n  - md-publish\ndependencies:\n  npm-packages:\n    - markdown-it\n    - puppeteer\n    - katex\n    - juice\n    - highlight.js\n  optional-binaries:\n    - pandoc        # 仅 md2docx 必需\n    - weasyprint    # 仅 --engine pandoc 走 weasyprint 路线时\n---\n\n# 火一五 Markdown 视觉渲染管线 v0.1.0\n\n> Typora 不需要复刻——它的能力本来就是开源拼装的。这个 skill 把同一套拼装做成 AI 可调用的版本。\n\n**愿景:** 加速企业向全场景人工智能机器人转变\n**理念:** 打破信息孤岛,用一套系统驱动企业增长\n\n---\n\n## 〇、与 `huo15-openclaw-office-doc` 的边界(必读)\n\n| 维度 | huo15-openclaw-office-doc | huo15-markdown-export(本 skill) |\n|---|---|---|\n| 输入 | 自然语言指令(写合同/写 PRD) | 已有的 markdown 文件 |\n| 引擎 | python-docx + reportlab(结构化直出) | markdown-it + Puppeteer + Pandoc |\n| 适用 | 合同 / PRD / 会议纪要 / 故障报告等**结构化业务公文** | 技术博客 / 复盘 / 营销文案 / 客户报告等**视觉化 markdown** |\n| 主题 | 一套企业公文规范 | 7 套(报纸风/暗色/学术/公众号/小红书/品牌等) |\n| 多端 | docx / PDF | docx / PDF / HTML / 长图 / 公众号 inline / live preview |\n\n**选择规则**:用户给\"目的+主题\"让你**写**新文档 → office-doc;用户给一份**已有的 .md** 让你\"导出/渲染/换主题/做长图\" → 本 skill。\n\n---\n\n## 一、能干什么(7 个工具一图)\n\n```\ninput.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  juice 内联,粘到公众号编辑器\n           │\n           ├──► md-preview.js    ──► http://localhost  改文件自动 reload + 主题热切换\n           │\n           └──► md-diff.sh <from> <to>  ──► changelog.pdf   git ref 之间的变更报告\n```\n\n---\n\n## 二、最小可用流程\n\n```bash\n# 1. 第一次用先装依赖\nbash scripts/install-deps.sh\n\n# 2. 用样例文件试一发\nnode scripts/md2pdf-puppet.js examples/sample.md             # → examples/sample.pdf\nnode scripts/md2html.js       examples/sample.md             # → examples/sample.html\nnode scripts/md2image.js      examples/sample.md             # → examples/sample.png(小红书)\nnode scripts/md2wechat.js     examples/sample.md             # → examples/sample.wechat.html\n\n# 3. 实时预览\nnode scripts/md-preview.js    examples/sample.md             # 浏览器开 http://127.0.0.1:7777\n```\n\n---\n\n## 三、主题选择决策树(给 AI 用)\n\n> v0.4.0 起 11 套主题分两大流派阵营:**信息密集**(给信息读者)/ **视觉沉浸**(给阅读者)。\n> 设计规范完整版见 [`themes/DESIGN.md`](themes/DESIGN.md)。\n\n### 信息密集类(短段落 + 列表 + 代码)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"技术博客 / 长文随笔 / 个人复盘 / 报纸感\" | `typora-newsprint` | `md2pdf` 或 `md2html` |\n| \"技术博客 / **产品文档 / Anthropic 风 / Stripe 风** / 行业标杆审美\" | **`anthropic-doc`** ⭐ v0.4.0 | `md2html` 或 `md2pdf` |\n| \"GitHub / 开源 / API 文档\" | `github` | `md2pdf` |\n| \"夜间阅读 / 投影 / 暗色\" | `typora-night` | `md2html` |\n| \"学术论文 / IEEE / 投稿初稿\" | `academic` | `md2pdf` |\n| \"公司报告 / 客户提案 / 内部周报 / 带页眉页脚\" | `huo15-brand` | `md2pdf` |\n| \"changelog / release notes / 版本对比\" | `huo15-brand` | `md-diff` |\n\n### 视觉沉浸类(长段落 + 节奏 + 留白)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"**品牌故事 / 商业杂志 / 深度长文 / 访谈**\" | **`editorial-magazine`** ⭐ v0.4.0 | `md2pdf` 或 `md2html` |\n| \"**小说 / 长篇随笔 / 思考长文 / 沉浸阅读**\" | **`manuscript-book`** ⭐ v0.4.0 | `md2pdf` |\n| \"**研究报告 / 数据分析 / 教学讲义 / 论证型长文**\" | **`tufte-handout`** ⭐ v0.4.0 | `md2html`(右挂边注需 ≥1100px 宽屏) |\n\n### 多端发布类(目标编辑器特殊)\n\n| 用户场景关键词 | 选哪个 | 用什么脚本 |\n|---|---|---|\n| \"微信公众号 / 推文\" | `wechat` | `md2wechat`(juice 内联化) |\n| \"小红书 / 朋友圈 / 长图文\" | `xiaohongshu` | `md2image`(1080px PNG) |\n\n**用户没说就默认** `typora-newsprint`(报纸风为通用合理基线)。\n**做技术文档无脑选** `anthropic-doc`(2026 年行业主流审美)。\n\n---\n\n## 四、关键参数速查\n\n### `md2pdf-puppet.js`\n```bash\nnode scripts/md2pdf-puppet.js <input.md> [output.pdf] \\\n  --theme typora-newsprint     # 11 选 1(见 §三 决策树)\n  --paper A4                   # A4 / Letter / A3 / A5\n  --margin 18                  # 四边等距 mm(默认 18)\n  --header \"我的文档\"          # 自定义页眉(huo15-brand 主题已内置)\n  --footer \"{pageNumber} / {totalPages}\"\n  --print-urls                 # 链接后追加 (URL) 文本\n  --no-mermaid                 # 跳过 mermaid 等待加速\n```\n\n### `md2docx.sh`(需先装 pandoc)\n```bash\nbash scripts/md2docx.sh <input.md> [output.docx] \\\n  --no-toc                              # 不要目录\n  --reference templates/reference.docx  # 自定义模板\n```\n\n### `md2image.js`\n```bash\nnode scripts/md2image.js <input.md> [output.png] \\\n  --theme xiaohongshu          # 默认 xiaohongshu\n  --width 1080                 # 画幅宽度\n  --scale 2                    # 倍清(2 = retina)\n```\n\n### `md-diff.sh`\n```bash\nbash scripts/md-diff.sh <from-ref> <to-ref> [output.pdf] \\\n  --theme huo15-brand          # 默认 huo15-brand\n  --repo /path/to/git/repo     # 默认当前目录\n```\n\n---\n\n## 五、AI 调用模式(集成到对话流)\n\n### 模式 A:一步导出\n> 用户:\"把这份分析报告导成 PDF 给我\"\n> AI:Bash → `bash scripts/md2pdf.sh /tmp/report.md /tmp/report.pdf --theme huo15-brand`\n\n### 模式 B:导出 + 转发(联动 huo15-wecom)\n> 用户:\"复盘报告导成 PDF 发到运营群\"\n> 1. AI 写 `report.md` 到 `/tmp`\n> 2. AI 调本 skill 导 PDF → `/tmp/report.pdf`\n> 3. AI 调 `huo15-wecom` 发文件到目标群\n\n### 模式 C:多端并行(一份 md 多种产出)\n> 用户:\"这篇文章我要发公众号 + 小红书 + 个人博客\"\n> AI 并行:\n> - `md2wechat.js article.md` → 公众号粘贴版\n> - `md2image.js article.md --theme xiaohongshu` → 小红书长图\n> - `md2html.js article.md --theme typora-newsprint` → 博客 HTML\n\n### 模式 D:AI 改主题\n> 用户:\"主题再暖一点,标题大一点\"\n> AI 用 Edit 工具直接改 `themes/typora-newsprint.css` 的 `--accent` 与 `h1 font-size`,**不需要写新脚本**——这是本 skill 的元能力。\n\n### 模式 E:版本对比 PDF\n> 用户:\"v1.2 到 v1.3 都改了什么,出个 PDF 给客户\"\n> AI:`bash scripts/md-diff.sh v1.2.0 v1.3.0 release-notes.pdf --theme huo15-brand`\n\n### 模式 F:企微/钉钉/微信对话渲染送达(配合 enhance,**最常用**)\n> 用户(在企微对话框):\"把这份复盘渲染成 PDF 发给我\"\n> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label \"Q1 复盘报告\"`\n> 2. AI 拿到 stdout 的 JSON,看到 `files[0].path = /tmp/.../report-20260505.pdf`\n> 3. AI 按 JSON.next_actions 顺序:**优先**调 `enhance_share_file({filePath, label, expireHours: 24})`\n> 4. 拿到 `structuredContent.url = https://keepermac.huo15.com/plugins/enhance-share/<token>-report-20260505.pdf`\n> 5. AI 把 url 作为 outbound 消息回到当前会话,企微用户在对话框点链接下载/查看\n> **若无 enhance**:JSON 的 priority=2 fallback,AI 把本地 path 告诉用户(降级,但不报错)\n\n### 模式 G:发布 + 多端 + 自动归档(v0.3.0,**复盘场景首选**)\n> 用户:\"把 Q1 复盘**发布**出去,我可能要发企微 + 朋友圈 + 邮件\"\n> AI:`bash scripts/md-publish.sh report.md --slug q1-summary --label \"Q1 复盘\"`(默认 mode=all)\n> → 一次渲染 4 端产物 + 写归档 `~/knowledge/huo15/<日期>-<slug>.md` + JSON.post_share_actions\n> → 4 个 file 各调一次 `enhance_share_file` 拿 URL → AI 用 Edit 把 URL 回写到 KB 归档 frontmatter `share_urls:`\n> → 组装\"多版本菜单\"消息回当前会话(PDF / 长图 / HTML / 公众号 inline)— **用户自己**决定转发哪个,不替用户广播\n> 加 `--with-qr` 触发\"二阶段二维码\":AI 用 PDF URL 二刷 `md2pdf-puppet --qr-url <url>` 出打印版\n\n### 模式 H:卡片预览(v0.3.0)\n> 用户:\"发个链接给同事,要在企微对话框里直接看到标题+摘要预览\"\n> AI:`md2html.js` 生成 HTML(默认从 markdown 抽 H1 + 首段作 OG title/description)→ `enhance_share_file` → 发企微\n> 同事看到带卡片预览的链接(微信/企微/Slack/Twitter 都支持 OG)\n\n### 模式 I:线下纸质 ↔ 线上文档(v0.3.0)\n> 用户:\"客户提案打印 50 份发线下,客户能扫码看在线版\"\n> 两阶段:① `md-publish.sh proposal.md --mode pdf --with-qr` 拿 PDF URL ② `md2pdf-puppet --qr-url <PDF URL> --qr-label \"扫码看完整在线版\"` 二维码进每页页脚\n> 用户打印 → 客户扫码 → 跳 enhance 公网链接看高保真 PDF\n\n---\n\n## 六、自定义主题(给 AI 的)\n\n用户说\"我要 X 风格\" → AI 直接改 CSS,**不要重写脚本**:\n\n1. **先读** [`themes/DESIGN.md`](themes/DESIGN.md)(8 大设计范式 + 红线清单 + 命名规范)\n2. 复制最相近的主题到新文件:`cp themes/typora-newsprint.css themes/<my-theme>.css`\n3. 改 `:root` 中的 **token override**(差异化变量,如 `--font-body` / `--color-accent` / `--measure` / `--leading`)— **不要复制 _tokens.css 的内容**,render.js 自动 prepend\n4. 写本主题独有的\"特征\"(双线 / drop cap / 边注 / 居中标题等)\n5. 在 [`scripts/lib/render.js`](scripts/lib/render.js) 的 `AVAILABLE_THEMES` 数组加新名字\n6. 在本 SKILL.md 第三节决策树加一行\n7. 立刻可用:`--theme <my-theme>`\n\n**主题文件不允许**:\n- 塞 `<script>` / 远程 `@import` 字体(打印会卡)/ JS\n- 用 Inter / Roboto 默认字体(反 AI Slop 红线 — 见 DESIGN.md §1.7)\n- h2/h3 加左竖条装饰(同上,2023 ChatGPT 卡片风泛滥)\n- 渐变背景 / 大 box-shadow 红紫光晕(同上)\n\n---\n\n## 七、依赖说明\n\n| 依赖 | 必需性 | 装法 |\n|---|---|---|\n| Node ≥ 18 | 必装 | https://nodejs.org/ 或 `brew install node` |\n| `npm install`(本目录) | 必装 | `bash scripts/install-deps.sh` |\n| Pandoc | `md2docx` 必需 | `brew install pandoc` / `apt install pandoc` |\n| WeasyPrint | `md2pdf --engine pandoc` 路线可选 | `pip install weasyprint` |\n| **huo15-openclaw-enhance** | **可选** — 装了启用\"企微对话拿公网 URL\"模式 F | `openclaw plugins install @huo15/huo15-openclaw-enhance` |\n\n**默认路线(puppeteer)只需 npm install,不依赖 pandoc;企微集成所需的 enhance 也是可选,无 enhance 仍能用本机渲染**。\n\n---\n\n## 八、踩坑提示(给 AI 的预防针)\n\n1. **微信公众号粘贴丢样式**:必须用 `md2wechat.js`(已 juice 内联),**不能**直接用 `md2html.js` 的输出粘\n2. **mermaid 渲染需要联网**:`md2pdf-puppet.js` 默认从 jsdelivr CDN 加载 mermaid 运行时,离线环境加 `--no-mermaid`\n3. **小红书长图过长会被压缩**:超过 5000px 时拆成两张,先用 markdown 二级标题分段后分别导\n4. **学术 PDF 中文断行**:`academic` 主题用衬线英文优先,中文长段落建议手动加空格断词,或改用 `huo15-brand` 主题\n5. **品牌页眉页脚只在 huo15-brand 主题生效**:其他主题想要页眉用 `--header` 参数手动加\n6. **reference.docx 不存在不报错**:Pandoc 自动用内置默认。想要品牌 Word → 见 `templates/README.md`\n7. **严禁手写 enhance-share URL**:配合 enhance 时,必须从 `enhance_share_file` 工具的 `structuredContent.url` 取真实链接。**不能**手写、拼接、猜测、回忆类似 `http://localhost:18789/<file>`、`/plugins/enhance-share/<filename>`(缺 token)等任何形式——它们都不是真实链接,用户点了只会 404。这条与 enhance v5.7.24+ 的规则一致\n8. **md-preview.js 不要直接暴露给企微用户**:它绑 127.0.0.1,内网穿透看不见。企微场景必用 `md-share.sh` + enhance_share_file 链路\n9. **md-share.sh / md-publish.sh 不调 enhanc\n\nArchive v0.4.0: 34 files, 73609 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (7678b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (8137b), scripts/md-share.sh (7063b), scripts/md2docx.sh (1484b), scripts/md2html.js (2143b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6594b), scripts/md2pdf.sh (2189b), scripts/md2wechat.js (1591b), SKILL.md (23840b), templates/pdf-print.css (1249b), templates/README.md (1788b), themes/_tokens.css (6963b), themes/academic.css (2792b), themes/anthropic-doc.css (4069b), themes/DESIGN.md (10365b), themes/editorial-magazine.css (5906b), themes/github.css (1875b), themes/huo15-brand.css (3411b), themes/manuscript-book.css (5464b), themes/tufte-handout.css (6289b), themes/typora-newsprint.css (1728b), themes/typora-night.css (1793b), themes/wechat.css (3360b), themes/xiaohongshu.css (3775b)\n\nArchive v0.3.1: 28 files, 54441 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/install-to-workspaces.sh (6091b), scripts/lib/render.js (6935b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (8137b), scripts/md-share.sh (7063b), scripts/md2docx.sh (1484b), scripts/md2html.js (2143b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6594b), scripts/md2pdf.sh (2189b), scripts/md2wechat.js (1591b), SKILL.md (23713b), templates/pdf-print.css (1249b), templates/README.md (1788b), themes/academic.css (2792b), themes/github.css (2545b), themes/huo15-brand.css (3415b), themes/typora-newsprint.css (3771b), themes/typora-night.css (2607b), themes/wechat.css (2525b), themes/xiaohongshu.css (2824b)\n\nArchive v0.3.0: 27 files, 51409 bytes\n\nFiles: _meta.json (140b), examples/chart-demo.md (1414b), examples/sample.md (2198b), package.json (1231b), README.md (8552b), scripts/install-deps.sh (1469b), scripts/lib/render.js (6935b), scripts/md-diff.sh (2014b), scripts/md-preview.js (3434b), scripts/md-publish.sh (8137b), scripts/md-share.sh (7063b), scripts/md2docx.sh (1484b), scripts/md2html.js (2143b), scripts/md2image.js (2709b), scripts/md2pdf-puppet.js (6594b), scripts/md2pdf.sh (2189b), scripts/md2wechat.js (1591b), SKILL.md (22773b), templates/pdf-print.css (1249b), templates/README.md (1788b), themes/academic.css (2792b), themes/github.css (2545b), themes/huo15-brand.css (3415b), themes/typora-newsprint.css (3771b), themes/typora-night.css (2607b), themes/wechat.css (2525b), themes/xiaohongshu.css (2824b)","readmeExcerpt":"Skill: Huo15 Markdown Export Owner: zhaobod1 Summary: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app... Tags: latest:0.4.4 Version history: v0.4.4 | 2026-05-12T04:31:00.824Z | user v0.4.4 unsafe_host_check 扩 LAN IP + 跨 skill 适用。v0.4.3 只查 localhost,这次扩 RFC 1918 私网(192.168/10/172.16-31)+ 169.254 link-local + :","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"input.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  juice 内联,粘到公众号编辑器\n           │\n           ├──► md-preview.js    ──► http://localhost  改文件自动 reload + 主题热切换\n           │\n           └──► md-diff.sh <from> <to>  ──► changelog.pdf   git ref 之间的变更报告"},{"language":"bash","snippet":"# 1. 第一次用先装依赖\nbash scripts/install-deps.sh\n\n# 2. 用样例文件试一发\nnode scripts/md2pdf-puppet.js examples/sample.md             # → examples/sample.pdf\nnode scripts/md2html.js       examples/sample.md             # → examples/sample.html\nnode scripts/md2image.js      examples/sample.md             # → examples/sample.png(小红书)\nnode scripts/md2wechat.js     examples/sample.md             # → examples/sample.wechat.html\n\n# 3. 实时预览\nnode scripts/md-preview.js    examples/sample.md             # 浏览器开 http://127.0.0.1:7777"},{"language":"bash","snippet":"node scripts/md2pdf-puppet.js <input.md> [output.pdf] \\\n  --theme typora-newsprint     # 11 选 1(见 §三 决策树)\n  --paper A4                   # A4 / Letter / A3 / A5\n  --margin 18                  # 四边等距 mm(默认 18)\n  --header \"我的文档\"          # 自定义页眉(huo15-brand 主题已内置)\n  --footer \"{pageNumber} / {totalPages}\"\n  --print-urls                 # 链接后追加 (URL) 文本\n  --no-mermaid                 # 跳过 mermaid 等待加速"},{"language":"bash","snippet":"bash scripts/md2docx.sh <input.md> [output.docx] \\\n  --no-toc                              # 不要目录\n  --reference templates/reference.docx  # 自定义模板"},{"language":"bash","snippet":"node scripts/md2image.js <input.md> [output.png] \\\n  --theme xiaohongshu          # 默认 xiaohongshu\n  --width 1080                 # 画幅宽度\n  --scale 2                    # 倍清(2 = retina)"},{"language":"bash","snippet":"bash scripts/md-diff.sh <from-ref> <to-ref> [output.pdf] \\\n  --theme huo15-brand          # 默认 huo15-brand\n  --repo /path/to/git/repo     # 默认当前目录"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: huo15-markdown-export\ndisplayName: 火一五排版发布技能\ndescription: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **apple-tech(苹果科技风,大字 hero + 紧字距 + 黑白蓝 + 大留白,默认主题)**,其他 11 套:typora-newsprint 报纸 / typora-night 暗色 / github / academic / 微信 / 小红书 / huo15-brand 品牌 / anthropic-doc Anthropic 文档 / editorial-magazine 杂志 / manuscript-book 书稿 / tufte-handout Tufte 边注。Node + markdown-it + Puppeteer + qrcode。与 office-doc 互补(它走公文,本 skill 走 md 视觉美学)。v0.4.2:加 apple-tech 默认 + 修 YAML frontmatter 错乱渲染 + 强化触发词。v0.4.1:反 Type 3 字体修复(PDF 浅灰看不清);v0.4.0:抽 _tokens.css + DESIGN.md 团队规范(8 大设计范式 + 反 AI Slop / Type 3 红线)。capability detection 集成 enhance:md-share/md-publish 输出 JSON,AI chain 调 enhance_share_file 拿公网 URL 发企微/钉钉/微信;无 enhance 独立可跑。触发词:火一五排版发布、火一五排版发布技能、火一五排版、火一五出版、火一五发布、火一五markdown、火一五PDF、火一五导出、排版发布、导出PDF、导出Word、md转PDF、md转Word、md2pdf、md2docx、Typora、长图、小红书、朋友圈长图、微信公众号、博客导出、复盘、changelog、版本对比、品牌报告、发到企微、发给客户、分享链接、公网链接、卡片预览、二维码、苹果科技风、Apple 风、科技风、技术博客、产品文档、品牌故事、深度长文、小说、长篇随笔、研究报告、数据分析、教学讲义、Anthropic 文档风、杂志体、书稿体、Tufte 边注。\nversion: 0.4.4\naliases:\n  - 火一五排版发布技能\n  - 火一五排版发布\n  - 火一五排版\n  - 火一五排版技能\n  - 火一五出版技能\n  - 火一五出版\n  - 火一五发布技能\n  - 火一五发布\n  - 火一五Markdown\n  - 火一五Markdown技能\n  - 火一五Markdown排版发布\n  - 火一五PDF导出\n  - 火一五PDF导出技能\n  - 火一五PDF\n  - 火一五导出\n  - 火一五Typora替代\n  - 火一五多端发布技能\n  - 火一五美化排版\n  - 火一五分享文档\n  - 火一五长图技能\n  - 火一五二维码PDF\n  - 火一五苹果科技风\n  - 火一五Apple风\n  - 苹果科技风排版\n  - markdown 渲染\n  - markdown 导出\n  - md2pdf\n  - md2docx\n  - md2image\n  - md2wechat\n  - md-publish\ndependencies:\n  npm-packages:\n    - markdown-it\n    - puppeteer\n    - katex\n    - juice\n    - highlight.js\n  optional-binaries:\n    - pandoc        # 仅 md2docx 必需\n    - weasyprint    # 仅 --engine pandoc 走 weasyprint 路线时\n---\n\n# 火一五 Markdown 视觉渲染管线 v0.1.0\n\n> Typora 不需要复刻——它的能力本来就是开源拼装的。这个 skill 把同一套拼装做成 AI 可调用的版本。\n\n**愿景:** 加速企业向全场景人工智能机器人转变\n**理念:** 打破信息孤岛,用一套系统驱动企业增长\n\n---\n\n## 〇、与 `huo15-openclaw-office-doc` 的边界(必读)\n\n| 维度 | huo15-openclaw-office-doc | huo15-markdown-export(本 skill) |\n|---|---|---|\n| 输入 | 自然语言指令(写合同/写 PRD) | 已有的 markdown 文件 |\n| 引擎 | python-docx + reportlab(结构化直出) | markdown-it + Puppeteer + Pandoc |\n| 适用 | 合同 / PRD / 会议纪要 / 故障报告等**结构化业务公文** | 技术博客 / 复盘 / 营销文案 / 客户报告等**视觉化 markdown** |\n| 主题 | 一套企业公文规范 | 7 套(报纸风/暗色/学术/公众号/小红书/品牌等) |\n| 多端 | docx / PDF | docx / PDF / HTML / 长图 / 公众号 inline / live preview |\n\n**选择规则**:用户给\"目的+主题\"让你**写**新文档 → office-doc;用户给一份**已有的 .md** 让你\"导出/渲染/换主题/做长图\" → 本 skill。\n\n---\n\n## 一、能干什么(7 个工具一图)\n\n```\ninput.md ──┬──► md2pdf.sh        ──► input.pdf      Chromium 打印,7 主题\n           │     └─ md2pdf-puppet.js  (推荐)\n           │     └─ pandoc engine     (可选,需 weasyprint/xelatex)\n           │\n           ├──► md2docx.sh       ──► input.docx     Pandoc + reference.docx 模板\n           │\n           ├──► md2html.js       ──► input.html     单文件自包含,可邮件可离线\n           │\n           ├──► md2image.js      ──► input.png      1080px 长图(小红书/朋友圈)\n           │\n           ├──► md2wechat.js     ──► input.wechat.html  "},{"path":"README.md","content":"# 火一五 Markdown 视觉渲染管线\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>打破信息孤岛,用一套系统驱动企业增长</h3>\n<h3>加速企业用户向全场景人工智能机器人转变</h3>\n\n\n</div>\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n## 这是什么\n\n**`huo15-markdown-export`** 是火一五 OpenClaw 生态的 markdown 视觉渲染管线。任何 `.md` 文件,一行命令就能导出 PDF / Word / 单文件 HTML / 小红书长图 / 微信公众号 inline / live preview / git changelog PDF——7 种产出,7 套主题,零 AI 也能跑,接进 Claude 后 AI 直接调用。\n\n把 Typora 的\"渲染美学 + 多格式导出\"剥离出来,做成 AI 可编排的工具——**编辑器交给 VSCode / Obsidian / Cursor,渲染交给本 skill**。\n\n---\n\n## 与 huo15-openclaw-office-doc 的关系\n\n| 场景 | 用哪个 |\n|---|---|\n| 让 AI **写**一份合同/PRD/会议纪要 | `huo15-openclaw-office-doc`(结构化公文,reportlab 直出) |\n| 我有一份 .md,想**导出**成 PDF/Word/长图 | `huo15-markdown-export`(本 skill) |\n\n**两者互补,不重叠**。\n\n---\n\n## 快速开始\n\n```bash\n# 1. 进 skill 目录\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-markdown-export\n\n# 2. 装依赖(node + 可选 pandoc)\nbash scripts/install-deps.sh\n\n# 3. 试一发\nnode scripts/md2pdf-puppet.js examples/sample.md\nnode scripts/md2image.js      examples/sample.md --theme xiaohongshu\nnode scripts/md-preview.js    examples/sample.md\n# 浏览器打开 http://127.0.0.1:7777\n```\n\n---\n\n## 9 个工具\n\n| 脚本 | 输入 → 输出 | 用途 |\n|---|---|---|\n| `md2pdf-puppet.js` | md → PDF | Chromium 打印(Typora 同款),7 主题;**v0.3.0 加 `--qr-url` 嵌二维码** |\n| `md2docx.sh` | md → docx | Pandoc + 火一五 reference.docx 模板 |\n| `md2html.js` | md → 单文件 html | **v0.3.0 自动加 OG 卡片**(企微/微信粘贴显示标题摘要) |\n| `md2image.js` | md → png | 1080px 小红书长图,也可 huo15-brand 沉稳风 |\n| `md2wechat.js` | md → inline html | juice 内联,粘到微信公众号 |\n| `md-preview.js` | md → http server | 本机 127.0.0.1(企微看不见,本机调试用) |\n| `md-diff.sh` | git ref × 2 → PDF | 版本对比 / changelog |\n| **`md-share.sh`** ⭐ v0.2.0 | md → 多产物 + JSON | **企微对话渲染送达**,对接 enhance 拿公网 URL |\n| **`md-publish.sh`** ⭐⭐ v0.3.0 | md → 多端 + JSON + KB 归档 | **发布场景首选**:多端 + 归档 `~/knowledge/huo15/` + 二阶段 QR PDF;人在回路转发 |\n\n---\n\n## 7 套主题\n\n| 主题 | 适用 |\n|---|---|\n| `typora-newsprint` | 报纸风衬线,个人博客 / 长文随笔 |\n| `typora-night` | 暗色护眼,夜间 / 投影 |\n| `github` | GitHub README 风,开源文档 |\n| `academic` | 学术论文,IEEE/ACM 风格初稿 |\n| `wechat` | 微信公众号(已剥离 grid/flex/var) |\n| `xiaohongshu` | 小红书长图,1080px 暖色大字号 |\n| `huo15-brand` | 火一五品牌,客户报告 / 内部周报(自带页眉页脚) |\n\n切主题:`--theme <name>`。AI 想做新主题:复制最相近的 CSS 改即可。\n\n---\n\n## 集成到 OpenClaw / Claude\n\n**自然语言示例**(AI 自动调用):\n\n> \"把这份分析报告**发给客户**\" → AI 调 `md-share.sh --mode pdf` → chain 调 `enhance_share_file` 拿公网 URL → 发企微对话\n> \"这份 Q1 复盘**发布**出去 + 留档\" → AI 调 `md-publish.sh --slug q1-summary` → 多端发布 + 归档 KB + 4 个 URL 让用户挑转发\n> \"客户提案打印 50 份,要让客户能扫码看在线版\" → AI 调 `md-publish.sh --with-qr` → 二阶段拿到 URL → 二刷 PDF 嵌二维码\n> \"这篇文章发链接给同事,要在企微显示标题摘要预览\" → AI 调 `md2h"},{"path":"templates/README.md","content":"# 主题选择决策树\n\n| 场景 | 选哪个主题 | 输出格式 | 推荐脚本 |\n|---|---|---|---|\n| 个人技术博客 / 长文随笔 | `typora-newsprint` | HTML / PDF | `md2pdf` / `md2html` |\n| 夜间阅读 / 投影演示 | `typora-night` | HTML | `md2html` |\n| 开源项目文档 / GitHub README | `github` | HTML / PDF | `md2pdf` |\n| 学术论文初稿 | `academic` | PDF | `md2pdf` |\n| 微信公众号发布 | `wechat` | HTML(内联 CSS) | `md2wechat` |\n| 小红书长图文 | `xiaohongshu` | PNG 长图 | `md2image` |\n| 公司对外报告 / 客户提案 | `huo15-brand` | PDF(带页眉页脚) | `md2pdf` |\n| 内部 changelog / 版本对比 | `huo15-brand` | PDF | `md-diff` |\n\n## 想做新主题?\n\n把这个目录里任何一个 CSS 复制为 `themes/<my-theme>.css`,改完在 `scripts/lib/render.js` 的 `AVAILABLE_THEMES` 数组加上名字即可。\n\n主题文件**只允许**写视觉样式——不要在主题里塞 JS,不要 import 远程字体(打印会卡)。\n\n## reference.docx(Word 模板)\n\n`md2docx` 走 Pandoc,默认用本目录的 `reference.docx` 作为字体/页眉模板。\n\n**没有 reference.docx 也能跑**——Pandoc 用内置默认模板。但如果你想要\"火一五品牌的 Word 输出\":\n\n```bash\n# 1. 先用 Pandoc 生成默认 reference.docx\npandoc -o reference.docx --print-default-data-file reference.docx\n\n# 2. 用 Word 打开,改字体(中文 → 等线 / 英文 → Calibri)、改样式、加页眉 logo\n\n# 3. 替换本目录的 reference.docx\nmv ~/Downloads/my-reference.docx /Users/jobzhao/workspace/projects/openclaw/huo15-skills/huo15-markdown-export/templates/reference.docx\n```\n\n## pdf-print.css\n\n控制 PDF 打印时的额外规则:页眉页脚、避免标题孤行、表格不跨页。**改它会影响所有 PDF 输出**——慎改。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-markdown-export\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1778560260824\n}"},{"path":"examples/chart-demo.md","content":"# Mermaid 图表示例\n\n测试 mermaid 各种图表在 PDF / HTML / PNG 长图中的渲染。\n\n## 流程图\n\n```mermaid\nflowchart TD\n  Start([开始]) --> Input[/输入 markdown/]\n  Input --> Render{渲染}\n  Render -->|markdown-it| HTML[HTML]\n  HTML -->|puppeteer| PDF[PDF]\n  HTML -->|juice 内联| WeChat[微信公众号]\n  HTML -->|screenshot| PNG[长图 PNG]\n  PDF --> End([输出])\n  WeChat --> End\n  PNG --> End\n```\n\n## 时序图\n\n```mermaid\nsequenceDiagram\n  participant U as 用户\n  participant AI as Claude\n  participant S as huo15-markdown-export\n  participant W as huo15-wecom\n\n  U->>AI: 把这份分析报告发给客户\n  AI->>S: bash md2pdf.sh report.md\n  S->>S: markdown-it → HTML → Chromium → PDF\n  S-->>AI: report.pdf\n  AI->>W: send_file(report.pdf, target=客户群)\n  W-->>U: ✓ 已送达\n```\n\n## 甘特图\n\n```mermaid\ngantt\n  title huo15-markdown-export 迭代节奏\n  dateFormat YYYY-MM-DD\n  section v0.1\n  底座 + 主题 :a1, 2026-05-05, 1d\n  脚本 :a2, after a1, 1d\n  section v0.2\n  Pandoc 后端完善 :2026-05-08, 2d\n  reference.docx 模板 :2026-05-10, 1d\n```\n\n## 类图(架构概览)\n\n```mermaid\nclassDiagram\n  class Render {\n    +buildMd()\n    +buildHtml()\n    +readTheme()\n  }\n  class Md2Pdf\n  class Md2Html\n  class Md2Image\n  class Md2Wechat\n  class MdPreview\n\n  Md2Pdf --> Render\n  Md2Html --> Render\n  Md2Image --> Render\n  Md2Wechat --> Render\n  MdPreview --> Render\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app... Skill: Huo15 Markdown Export Owner: zhaobod1 Summary: 火一五排版发布技能 / 火一五 markdown 排版 / 火一五 PDF 导出 / 火一五出版 / 火一五发布 / huo15-markdown-export — 【青岛火一五】markdown 一键导出 PDF / Word / HTML / 长图 / 公众号 inline。**12 主题**默认 **app... Tags: latest:0.4.4 Version history: v0.4.4 | 2026-05-12T04:31:00.824Z | user v0.4.4 unsafe_host_check 扩 LAN IP + 跨 skill 适用。v0.4.3 只查 localhost,这次扩 RFC 1918 私网(192.168/10/172.16-31)+ 169.254 link-local + :","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":985,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T17:10:57.786Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:58:48.385Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}