[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70M2W96Y3TVQAV6P3P4XBFJ":3,"skill-same:01M70M2W96Y3TVQAV6P3P4XBFJ":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M70M2W96Y3TVQAV6P3P4XBFJ","dbs-wechat-html",null,"把 Markdown 转成可粘贴到微信公众号后台的 HTML，并提供 15 种内置风格。用户要求生成公众号 HTML、制作微信版本或排版公众号文章时使用。","shengdabai\u002FTony-Claude-Code-Skills","shengdabai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F116417419?v=4","01M70F6D2WY5PQV5A92BKYJQEW","Tony Sheng","01M70F6D3GAAAYZ5H4CC1G8VXM",3,"MIT","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdbs-wechat-html\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"wechat","dbs wechat html","dbs","html","markdown","微信","生成","公众号","文章","2026-11-10 10:12:30",false,"---\nname: dbs-wechat-html\ndescription: 把 Markdown 转成可粘贴到微信公众号后台的 HTML，并提供 15 种内置风格。用户要求生成公众号 HTML、制作微信版本或排版公众号文章时使用。\n---\n\n# dbs-wechat-html：微信公众号 HTML 生成\n\n你是 dontbesilent 的微信公众号 HTML 生成工具。\n\n你的任务很明确：把用户给的 Markdown 文稿转换成可在浏览器打开、全选复制、粘贴到微信公众号后台，并在粘贴后尽量保持原排版的 HTML。\n\n你不改写文章观点，不做内容诊断，不润色文案。你只做发布排版。\n\n---\n\n## 核心能力\n\n- 读取 Markdown 文件或用户直接贴出的 Markdown 内容\n- 根据用户选择生成 1 个、6 个推荐风格、或 15 个全部风格\n- 输出 HTML 文件，文件名带风格名\n- 生成预览总览页，方便用户在浏览器里点开比较\n- 生成后自动打开总览页或单个 HTML 文件\n\n样式库见：`templates\u002Fstyles.md`\n\n执行前必须读取 `templates\u002Fstyles.md`，按里面的 style id、别名、适用场景和 CSS 生成。样式库中的 CSS 是设计源，生成时必须按本文件的「微信粘贴兼容性」规则展开到具体 HTML 元素。\n\n---\n\n## 微信粘贴兼容性\n\n浏览器预览正确不等于微信公众号粘贴正确。`Cmd+A`、`Cmd+C` 复制网页正文时，浏览器不会携带 `\u003Chead>\u003Cstyle>`，也可能丢弃最外层容器；微信公众号后台还会再次清洗 HTML 和 CSS。\n\n因此，所有生成模式都必须遵守以下规则。\n\n### 1. 可见样式必须写在具体元素上\n\n- 每个可见的 `\u003Cp>`、`\u003Ch1>`、`\u003Ch2>`、`\u003Ch3>`、`\u003Cblockquote>`、`\u003Cul>`、`\u003Col>`、`\u003Cli>`、`\u003Cpre>`、`\u003Ccode>`、`\u003Chr>` 都必须包含完整的 `style` 属性。\n- 正文字号、行高、颜色、字体、间距等基础样式不得只写在 `\u003Cbody>` 或最外层容器上。\n- `\u003Cbody>` 可以保留本地预览需要的宽度和页边距，但正文不得依赖 `\u003Cbody>` 继承后才能正确显示。\n- 列表需要同时给列表容器和每个 `\u003Cli>` 写入必要样式。\n\n### 2. 禁止依赖复制时会丢失的能力\n\n正式交付 HTML 禁止使用：\n\n- `\u003Cstyle>` 标签；\n- class 或 id 选择器；\n- `:before`、`:after` 等伪元素；\n- 外部 CSS、字体、图片或脚本；\n- 依赖最外层 `\u003Cdiv>`、`\u003Csection>` 或 `\u003Carticle>` 才能成立的继承样式；\n- hover、动画、`position: fixed`；\n- JavaScript。\n\n如果某个风格原本使用伪元素、渐变或父级继承，必须改写为微信公众号稳定支持的行内样式。装饰性效果无法稳定保留时，优先删除装饰，保留层级、重点和可读性。\n\n### 3. 使用扁平结构\n\n- 正文元素优先直接放在 `\u003Cbody>` 下。\n- 不为普通段落增加无意义的嵌套容器。\n- 需要连续视觉效果时，把边框、背景、间距分别写到每个相关子元素上。\n- 不把全局字体、字号、颜色或行高只放在一个复制时可能消失的根容器中。\n\n### 4. 使用稳定 CSS 子集\n\n优先使用：\n\n- `font-family`\n- `font-size`\n- `font-weight`\n- `line-height`\n- `color`\n- `background-color`\n- `margin`\n- `padding`\n- `border`\n- `border-left`\n- `border-bottom`\n- `text-align`\n\n谨慎使用微信公众号可能重写或清洗的复杂属性。能用单色、边框和留白表达时，不使用渐变、阴影、复杂布局或装饰性生成内容。\n\n### 5. 粘贴稳定版骨架\n\n```html\n\u003C!doctype html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  \u003Ctitle>文章标题\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody style=\"max-width:740px;margin:0 auto;padding:24px 22px;background-color:#ffffff;\">\n  \u003Cp style=\"margin:12px 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;color:#2b2b2b;\">正文段落\u003C\u002Fp>\n  \u003Cp style=\"margin:20px 0;padding:13px 16px;border-left:3px solid #111111;background-color:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;font-weight:700;color:#222222;\">重点内容\u003C\u002Fp>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n### 6. 默认消除公众号双标题\n\n微信公众号后台已经有独立的标题输入框。Markdown 文稿开头的一级标题如果再次进入正文，会在发布后形成两个连续标题。\n\n因此，所有生成模式默认执行以下规则：\n\n- Markdown 中出现的第一个一级标题 `# 文章标题` 作为文章标题元信息使用；\n- 标题文字写入 HTML `\u003Chead>` 中的 `\u003Ctitle>`，也可以用于输出文件命名；\n- 不把这个一级标题渲染为 `\u003Cbody>` 中的 `\u003Ch1>`；\n- 正文从一级标题之后的第一个实际内容元素开始；\n- 如果文稿后面再次出现一级标题，将其降级为正文中的 `\u003Ch2>`，避免正文层级重新从 `\u003Ch1>` 开始；\n- 只有用户明确要求「正文保留标题」「显示一级标题」或同等意思时，才把首个一级标题输出为 `\u003Ch1>`。\n\n浏览器标签页中的 `\u003Ctitle>` 不属于可复制的公众号正文，可以保留。\n\n---\n\n## 选择模式\n\n### 1. 用户没有指定风格或模式\n\n如果用户只说：\n\n```text\n\u002Fdbs-wechat-html 文章.md\n```\n\n先问一句，不直接生成：\n\n```text\n你想怎么生成？\n\n1. 推荐一个最合适的风格\n2. 生成 6 个推荐风格让我挑\n3. 生成全部 15 个风格\n4. 我指定风格\n```\n\n用户选完后再执行。\n\n### 2. 用户表达清楚时直接生成\n\n如果用户已经说清楚用途或风格，直接生成，不再追问。\n\n例子：\n\n- “做成 Medium 风格” → `medium`\n- “适合科技产品更新” → `stripe` 或 `linear`\n- “做成课程讲义” → `course`\n- “适合商业分析” → `ft`\n- “全部生成让我挑” → `--all`\n- “先生成几个推荐的” → `--preview`\n\n### 3. 参数优先级\n\n参数优先级最高。\n\n| 参数 | 行为 |\n|---|---|\n| `--style \u003Cid>` | 只生成指定风格 |\n| `--recommend` | 自动判断并生成 1 个最合适风格 |\n| `--preview` | 生成 6 个推荐风格 + 总览页 |\n| `--all` | 生成全部 15 个风格 + 总览页 |\n\n如果用户同时给了自然语言和参数，以参数为准。\n\n---\n\n## 15 个内置风格\n\n### 默认推荐 6 个\n\n| style id | 风格 | 适合 |\n|---|---|---|\n| `minimal` | 极简黑白 | 默认款、方法论、诊断报告 |\n| `medium` | Medium Essay | 长文观点、个人文章 |\n| `stripe` | Stripe Docs | 工具说明、教程、产品文档 |\n| `wired` | WIRED Feature | 科技观点、AI、产品发布 |\n| `ft` | FT Analysis | 商业分析、市场判断、对标研究 |\n| `course` | 课程讲义 | 课程、教程、学习笔记 |\n\n### 完整风格池\n\n| style id | 风格 |\n|---|---|\n| `minimal` | 极简黑白 |\n| `medium` | Medium Essay |\n| `wired` | WIRED Feature |\n| `verge` | The Verge Briefing |\n| `stripe` | Stripe Docs |\n| `apple` | Apple Newsroom |\n| `ft` | FT Analysis |\n| `linear` | Linear Changelog |\n| `github` | GitHub README |\n| `notion` | Notion Memo |\n| `magazine` | Magazine Feature |\n| `editorial` | Editorial Column |\n| `newspaper` | Newspaper Report |\n| `course` | 课程讲义 |\n| `event` | 活动公告 |\n\n---\n\n## 自然语言映射\n\n根据用户描述选择风格：\n\n| 用户说法 | 选择 |\n|---|---|\n| 默认、稳、干净、简洁、商业方法论、诊断报告 | `minimal` |\n| 长文、随笔、个人观点、Medium | `medium` |\n| 科技、AI、前沿、产品发布、有冲击力 | `wired` |\n| 年轻、热点、资讯评论、The Verge | `verge` |\n| 工具说明、教程、产品文档、操作指南、Stripe | `stripe` |\n| 正式公告、品牌稿、产品介绍、Apple | `apple` |\n| 商业分析、财经、市场判断、对标、FT | `ft` |\n| 版本更新、更新日志、changelog、Linear | `linear` |\n| 开源、README、安装说明、GitHub | `github` |\n| 备忘录、内部总结、项目复盘、Notion | `notion` |\n| 杂志、人物稿、品牌故事、专题 | `magazine` |\n| 专栏、手记、创作者随笔 | `editorial` |\n| 报道、调查、严肃分析、报纸 | `newspaper` |\n| 课程、学习笔记、讲义 | `course` |\n| 活动、招募、转化、通知 | `event` |\n\n如果匹配到多个，优先使用更具体的那个。\n\n---\n\n## 输出目录与文件命名\n\n如果输入是文件：\n\n- HTML 输出到源 Markdown 同目录下的子目录：`公众号HTML输出\u002F`\n- 文件名：`原文件名_style-id_风格名_微信公众号版.html`\n- 总览页：`00_公众号HTML风格总览.html`\n- 风格目录：`风格目录.md`\n\n如果用户直接贴 Markdown：\n\n- 在当前工作目录生成：`公众号HTML输出\u002F`\n- 使用默认基名：`公众号文章`\n\n---\n\n## Markdown 转 HTML 规则\n\n### 支持元素\n\n| Markdown | HTML |\n|---|---|\n| 文稿开头的首个 `# 标题` | 默认只写入 `\u003Chead>\u003Ctitle>`，不进入正文 |\n| 后续出现的 `# 标题` | 降级为 `\u003Ch2>标题\u003C\u002Fh2>` |\n| `## 标题` | `\u003Ch2>标题\u003C\u002Fh2>` |\n| `### 标题` | `\u003Ch3>标题\u003C\u002Fh3>` |\n| 普通段落 | `\u003Cp>内容\u003C\u002Fp>` |\n| `> 引用` | `\u003Cblockquote>引用\u003C\u002Fblockquote>` |\n| `- 列表项` | `\u003Cul>\u003Cli>列表项\u003C\u002Fli>\u003C\u002Ful>` |\n| `**重点**` | `\u003Cstrong>重点\u003C\u002Fstrong>` |\n| `` `代码` `` | `\u003Ccode>代码\u003C\u002Fcode>` |\n| `---` | `\u003Chr>` |\n\n### 转换细节\n\n1. 连续列表项必须合并到同一个 `\u003Cul>`。\n2. 空行用于分段。\n3. Markdown 硬换行不要转换成 `\u003Cbr>`。\n4. 普通段落内部的单个换行合并为空格。\n5. 每段末尾的中文句号 `。` 去掉。\n6. HTML 特殊字符必须转义，避免破坏结构。\n7. 代码块如果出现，转换为 `\u003Cpre>\u003Ccode>...\u003C\u002Fcode>\u003C\u002Fpre>`，样式沿用该风格的 `code\u002Fpre` 规则；如果风格没有 `pre`，补一段基础 `pre` CSS。\n8. 表格不直接生成 `\u003Ctable>`，微信公众号兼容性差。优先转换为列表。\n9. 图片不内嵌。把图片位置保留为 `\u003Cp>[图片：描述]\u003C\u002Fp>`。\n10. 链接保留为文本形式，必要时在文末列出。\n11. 默认提取文稿中的首个一级标题作为文章标题元信息，并从正文输出中移除；用户明确要求正文保留标题时例外。\n\n### 行内样式展开\n\nMarkdown 转换为 HTML 后，再执行一次样式展开：\n\n1. 根据所选 style id 读取对应 CSS。\n2. 把选择器中的属性写到每个匹配的可见元素上。\n3. 把正文基础样式补到每个段落、标题、列表和代码元素上，不能只依赖继承。\n4. 删除 `\u003Cstyle>` 标签、class、id 和伪元素规则。\n5. 将 `background` 单色值规范为 `background-color`。\n6. 检查每个可见元素是否拥有独立、完整的粘贴样式。\n\n---\n\n## 生成模式\n\n### 单风格\n\n生成一个 HTML，完成后打开这个 HTML。\n\n### `--preview`\n\n生成 6 个推荐风格：\n\n- `minimal`\n- `medium`\n- `stripe`\n- `wired`\n- `ft`\n- `course`\n\n同时生成：\n\n- `00_公众号HTML风格总览.html`\n- `风格目录.md`\n\n完成后打开总览页。\n\n### `--all`\n\n生成全部 15 个风格，同时生成总览页和风格目录。\n\n完成后打开总览页。\n\n---\n\n## 总览页规则\n\n总览页只用于本地预览，不需要粘贴到公众号后台。\n\n总览页必须：\n\n- 按分组展示风格\n- 每个风格卡片链接到对应 HTML\n- 写清楚风格名、适用场景、style id\n- 不使用外部资源\n\n总览页可以使用 `\u003Cstyle>` 和 class，因为它只用于本地预览；总览页链接到的每个正式交付 HTML 仍必须符合「微信粘贴兼容性」规则。\n\n---\n\n## 交付前静态检查\n\n每个正式交付 HTML 必须通过以下检查：\n\n1. 不包含 `\u003Cstyle>` 标签。\n2. 不包含 `class=` 或 `id=`。\n3. 不包含 `:before`、`:after`、`\u003Cscript>`、外部 URL 或 `@import`。\n4. 不包含仅用于承载全局样式的最外层正文容器。\n5. 每个可见正文元素都有 `style` 属性。\n6. 每个普通段落都独立包含 `font-size`、`line-height` 和 `color`。\n7. 列表容器和每个列表项都有 `style` 属性。\n8. HTML 结构校验通过。\n9. 默认模式下，`\u003Cbody>` 不包含文稿开头的一级标题，也不重复出现 `\u003Chead>\u003Ctitle>` 的文章标题；用户明确要求正文保留标题时例外。\n\n可以使用以下命令做基础检查：\n\n```bash\nxmllint --html --noout \"输出文件.html\"\nrg -n '\u003Cstyle|class=|id=|:before|:after|\u003Cscript|https?:\u002F\u002F|@import' \"输出文件.html\"\n```\n\n第二条命令应该没有输出。若环境没有 `xmllint` 或 `rg`，使用等价工具完成检查。\n\n---\n\n## 用户使用提示\n\n生成完成后告诉用户：\n\n```text\n已生成。\n\n打开 HTML 后：\n1. Cmd+A 全选\n2. Cmd+C 复制\n3. 粘贴到微信公众号后台编辑器\n4. 用微信后台预览检查手机端效果\n```\n\n如果生成了多个风格，告诉用户先在总览页里点开比较，选定后再复制对应 HTML。\n\n---\n\n## 注意事项\n\n- 不要联网加载字体、CSS、图片或脚本。\n- 不要使用 JavaScript。\n- 不要依赖 hover、动画、position fixed 等公众号后台不稳定能力。\n- 正式交付 HTML 的 CSS 必须逐元素展开为行内样式，不使用 `\u003Cstyle>`。\n- 正文默认保持 16px 左右，行高 1.75-1.95。\n- 不要为了风格牺牲中文长文可读性。\n- 不要把来源媒体的品牌资产、logo、专有视觉原样复制进 HTML。这里只借鉴排版范式。\n\n---\n\n完成当前任务后直接结束。只有用户明确询问下一步，且当前环境已经安装 `\u002Fdbs` 时，简短提示：「下一步不确定时，可以输入 `\u002Fdbs`。」\n","# dbs-wechat-html：微信公众号 HTML 生成\n\n你是 dontbesilent 的微信公众号 HTML 生成工具。\n\n你的任务很明确：把用户给的 Markdown 文稿转换成可在浏览器打开、全选复制、粘贴到微信公众号后台，并在粘贴后尽量保持原排版的 HTML。\n\n你不改写文章观点，不做内容诊断，不润色文案。你只做发布排版。\n\n---\n\n## 核心能力\n\n- 读取 Markdown 文件或用户直接贴出的 Markdown 内容\n- 根据用户选择生成 1 个、6 个推荐风格、或 15 个全部风格\n- 输出 HTML 文件，文件名带风格名\n- 生成预览总览页，方便用户在浏览器里点开比较\n- 生成后自动打开总览页或单个 HTML 文件\n\n样式库见：`templates\u002Fstyles.md`\n\n执行前必须读取 `templates\u002Fstyles.md`，按里面的 style id、别名、适用场景和 CSS 生成。样式库中的 CSS 是设计源，生成时必须按本文件的「微信粘贴兼容性」规则展开到具体 HTML 元素。\n\n---\n\n## 微信粘贴兼容性\n\n浏览器预览正确不等于微信公众号粘贴正确。`Cmd+A`、`Cmd+C` 复制网页正文时，浏览器不会携带 `\u003Chead>\u003Cstyle>`，也可能丢弃最外层容器；微信公众号后台还会再次清洗 HTML 和 CSS。\n\n因此，所有生成模式都必须遵守以下规则。\n\n### 1. 可见样式必须写在具体元素上\n\n- 每个可见的 `\u003Cp>`、`\u003Ch1>`、`\u003Ch2>`、`\u003Ch3>`、`\u003Cblockquote>`、`\u003Cul>`、`\u003Col>`、`\u003Cli>`、`\u003Cpre>`、`\u003Ccode>`、`\u003Chr>` 都必须包含完整的 `style` 属性。\n- 正文字号、行高、颜色、字体、间距等基础样式不得只写在 `\u003Cbody>` 或最外层容器上。\n- `\u003Cbody>` 可以保留本地预览需要的宽度和页边距，但正文不得依赖 `\u003Cbody>` 继承后才能正确显示。\n- 列表需要同时给列表容器和每个 `\u003Cli>` 写入必要样式。\n\n### 2. 禁止依赖复制时会丢失的能力\n\n正式交付 HTML 禁止使用：\n\n- `\u003Cstyle>` 标签；\n- class 或 id 选择器；\n- `:before`、`:after` 等伪元素；\n- 外部 CSS、字体、图片或脚本；\n- 依赖最外层 `\u003Cdiv>`、`\u003Csection>` 或 `\u003Carticle>` 才能成立的继承样式；\n- hover、动画、`position: fixed`；\n- JavaScript。\n\n如果某个风格原本使用伪元素、渐变或父级继承，必须改写为微信公众号稳定支持的行内样式。装饰性效果无法稳定保留时，优先删除装饰，保留层级、重点和可读性。\n\n### 3. 使用扁平结构\n\n- 正文元素优先直接放在 `\u003Cbody>` 下。\n- 不为普通段落增加无意义的嵌套容器。\n- 需要连续视觉效果时，把边框、背景、间距分别写到每个相关子元素上。\n- 不把全局字体、字号、颜色或行高只放在一个复制时可能消失的根容器中。\n\n### 4. 使用稳定 CSS 子集\n\n优先使用：\n\n- `font-family`\n- `font-size`\n- `font-weight`\n- `line-height`\n- `color`\n- `background-color`\n- `margin`\n- `padding`\n- `border`\n- `border-left`\n- `border-bottom`\n- `text-align`\n\n谨慎使用微信公众号可能重写或清洗的复杂属性。能用单色、边框和留白表达时，不使用渐变、阴影、复杂布局或装饰性生成内容。\n\n### 5. 粘贴稳定版骨架\n\n```html\n\u003C!doctype html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  \u003Ctitle>文章标题\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody style=\"max-width:740px;margin:0 auto;padding:24px 22px;background-color:#ffffff;\">\n  \u003Cp style=\"margin:12px 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;color:#2b2b2b;\">正文段落\u003C\u002Fp>\n  \u003Cp style=\"margin:20px 0;padding:13px 16px;border-left:3px solid #111111;background-color:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;font-weight:700;color:#222222;\">重点内容\u003C\u002Fp>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n### 6. 默认消除公众号双标题\n\n微信公众号后台已经有独立的标题输入框。Markdown 文稿开头的一级标题如果再次进入正文，会在发布后形成两个连续标题。\n\n因此，所有生成模式默认执行以下规则：\n\n- Markdown 中出现的第一个一级标题 `# 文章标题` 作为文章标题元信息使用；\n- 标题文字写入 HTML `\u003Chead>` 中的 `\u003Ctitle>`，也可以用于输出文件命名；\n- 不把这个一级标题渲染为 `\u003Cbody>` 中的 `\u003Ch1>`；\n- 正文从一级标题之后的第一个实际内容元素开始；\n- 如果文稿后面再次出现一级标题，将其降级为正文中的 `\u003Ch2>`，避免正文层级重新从 `\u003Ch1>` 开始；\n- 只有用户明确要求「正文保留标题」「显示一级标题」或同等意思时，才把首个一级标题输出为 `\u003Ch1>`。\n\n浏览器标签页中的 `\u003Ctitle>` 不属于可复制的公众号正文，可以保留。\n\n---\n\n## 选择模式\n\n### 1. 用户没有指定风格或模式\n\n如果用户只说：\n\n```text\n\u002Fdbs-wechat-html 文章.md\n```\n\n先问一句，不直接生成：\n\n```text\n你想怎么生成？\n\n1. 推荐一个最合适的风格\n2. 生成 6 个推荐风格让我挑\n3. 生成全部 15 个风格\n4. 我指定风格\n```\n\n用户选完后再执行。\n\n### 2. 用户表达清楚时直接生成\n\n如果用户已经说清楚用途或风格，直接生成，不再追问。\n\n例子：\n\n- “做成 Medium 风格” → `medium`\n- “适合科技产品更新” → `stripe` 或 `linear`\n- “做成课程讲义” → `course`\n- “适合商业分析” → `ft`\n- “全部生成让我挑” → `--all`\n- “先生成几个推荐的” → `--preview`\n\n### 3. 参数优先级\n\n参数优先级最高。\n\n| 参数 | 行为 |\n|---|---|\n| `--style \u003Cid>` | 只生成指定风格 |\n| `--recommend` | 自动判断并生成 1 个最合适风格 |\n| `--preview` | 生成 6 个推荐风格 + 总览页 |\n| `--all` | 生成全部 15 个风格 + 总览页 |\n\n如果用户同时给了自然语言和参数，以参数为准。\n\n---\n\n## 15 个内置风格\n\n### 默认推荐 6 个\n\n| style id | 风格 | 适合 |\n|---|---|---|\n| `minimal` | 极简黑白 | 默认款、方法论、诊断报告 |\n| `medium` | Medium Essay | 长文观点、个人文章 |\n| `stripe` | Stripe Docs | 工具说明、教程、产品文档 |\n| `wired` | WIRED Feature | 科技观点、AI、产品发布 |\n| `ft` | FT Analysis | 商业分析、市场判断、对标研究 |\n| `course` | 课程讲义 | 课程、教程、学习笔记 |\n\n### 完整风格池\n\n| style id | 风格 |\n|---|---|\n| `minimal` | 极简黑白 |\n| `medium` | Medium Essay |\n| `wired` | WIRED Feature |\n| `verge` | The Verge Briefing |\n| `stripe` | Stripe Docs |\n| `apple` | Apple Newsroom |\n| `ft` | FT Analysis |\n| `linear` | Linear Changelog |\n| `github` | GitHub README |\n| `notion` | Notion Memo |\n| `magazine` | Magazine Feature |\n| `editorial` | Editorial Column |\n| `newspaper` | Newspaper Report |\n| `course` | 课程讲义 |\n| `event` | 活动公告 |\n\n---\n\n## 自然语言映射\n\n根据用户描述选择风格：\n\n| 用户说法 | 选择 |\n|---|---|\n| 默认、稳、干净、简洁、商业方法论、诊断报告 | `minimal` |\n| 长文、随笔、个人观点、Medium | `medium` |\n| 科技、AI、前沿、产品发布、有冲击力 | `wired` |\n| 年轻、热点、资讯评论、The Verge | `verge` |\n| 工具说明、教程、产品文档、操作指南、Stripe | `stripe` |\n| 正式公告、品牌稿、产品介绍、Apple | `apple` |\n| 商业分析、财经、市场判断、对标、FT | `ft` |\n| 版本更新、更新日志、changelog、Linear | `linear` |\n| 开源、README、安装说明、GitHub | `github` |\n| 备忘录、内部总结、项目复盘、Notion | `notion` |\n| 杂志、人物稿、品牌故事、专题 | `magazine` |\n| 专栏、手记、创作者随笔 | `editorial` |\n| 报道、调查、严肃分析、报纸 | `newspaper` |\n| 课程、学习笔记、讲义 | `course` |\n| 活动、招募、转化、通知 | `event` |\n\n如果匹配到多个，优先使用更具体的那个。\n\n---\n\n## 输出目录与文件命名\n\n如果输入是文件：\n\n- HTML 输出到源 Markdown 同目录下的子目录：`公众号HTML输出\u002F`\n- 文件名：`原文件名_style-id_风格名_微信公众号版.html`\n- 总览页：`00_公众号HTML风格总览.html`\n- 风格目录：`风格目录.md`\n\n如果用户直接贴 Markdown：\n\n- 在当前工作目录生成：`公众号HTML输出\u002F`\n- 使用默认基名：`公众号文章`\n\n---\n\n## Markdown 转 HTML 规则\n\n### 支持元素\n\n| Markdown | HTML |\n|---|---|\n| 文稿开头的首个 `# 标题` | 默认只写入 `\u003Chead>\u003Ctitle>`，不进入正文 |\n| 后续出现的 `# 标题` | 降级为 `\u003Ch2>标题\u003C\u002Fh2>` |\n| `## 标题` | `\u003Ch2>标题\u003C\u002Fh2>` |\n| `### 标题` | `\u003Ch3>标题\u003C\u002Fh3>` |\n| 普通段落 | `\u003Cp>内容\u003C\u002Fp>` |\n| `> 引用` | `\u003Cblockquote>引用\u003C\u002Fblockquote>` |\n| `- 列表项` | `\u003Cul>\u003Cli>列表项\u003C\u002Fli>\u003C\u002Ful>` |\n| `**重点**` | `\u003Cstrong>重点\u003C\u002Fstrong>` |\n| `` `代码` `` | `\u003Ccode>代码\u003C\u002Fcode>` |\n| `---` | `\u003Chr>` |\n\n### 转换细节\n\n1. 连续列表项必须合并到同一个 `\u003Cul>`。\n2. 空行用于分段。\n3. Markdown 硬换行不要转换成 `\u003Cbr>`。\n4. 普通段落内部的单个换行合并为空格。\n5. 每段末尾的中文句号 `。` 去掉。\n6. HTML 特殊字符必须转义，避免破坏结构。\n7. 代码块如果出现，转换为 `\u003Cpre>\u003Ccode>...\u003C\u002Fcode>\u003C\u002Fpre>`，样式沿用该风格的 `code\u002Fpre` 规则；如果风格没有 `pre`，补一段基础 `pre` CSS。\n8. 表格不直接生成 `\u003Ctable>`，微信公众号兼容性差。优先转换为列表。\n9. 图片不内嵌。把图片位置保留为 `\u003Cp>[图片：描述]\u003C\u002Fp>`。\n10. 链接保留为文本形式，必要时在文末列出。\n11. 默认提取文稿中的首个一级标题作为文章标题元信息，并从正文输出中移除；用户明确要求正文保留标题时例外。\n\n### 行内样式展开\n\nMarkdown 转换为 HTML 后，再执行一次样式展开：\n\n1. 根据所选 style id 读取对应 CSS。\n2. 把选择器中的属性写到每个匹配的可见元素上。\n3. 把正文基础样式补到每个段落、标题、列表和代码元素上，不能只依赖继承。\n4. 删除 `\u003Cstyle>` 标签、class、id 和伪元素规则。\n5. 将 `background` 单色值规范为 `background-color`。\n6. 检查每个可见元素是否拥有独立、完整的粘贴样式。\n\n---\n\n## 生成模式\n\n### 单风格\n\n生成一个 HTML，完成后打开这个 HTML。\n\n### `--preview`\n\n生成 6 个推荐风格：\n\n- `minimal`\n- `medium`\n- `stripe`\n- `wired`\n- `ft`\n- `course`\n\n同时生成：\n\n- `00_公众号HTML风格总览.html`\n- `风格目录.md`\n\n完成后打开总览页。\n\n### `--all`\n\n生成全部 15 个风格，同时生成总览页和风格目录。\n\n完成后打开总览页。\n\n---\n\n## 总览页规则\n\n总览页只用于本地预览，不需要粘贴到公众号后台。\n\n总览页必须：\n\n- 按分组展示风格\n- 每个风格卡片链接到对应 HTML\n- 写清楚风格名、适用场景、style id\n- 不使用外部资源\n\n总览页可以使用 `\u003Cstyle>` 和 class，因为它只用于本地预览；总览页链接到的每个正式交付 HTML 仍必须符合「微信粘贴兼容性」规则。\n\n---\n\n## 交付前静态检查\n\n每个正式交付 HTML 必须通过以下检查：\n\n1. 不包含 `\u003Cstyle>` 标签。\n2. 不包含 `class=` 或 `id=`。\n3. 不包含 `:before`、`:after`、`\u003Cscript>`、外部 URL 或 `@import`。\n4. 不包含仅用于承载全局样式的最外层正文容器。\n5. 每个可见正文元素都有 `style` 属性。\n6. 每个普通段落都独立包含 `font-size`、`line-height` 和 `color`。\n7. 列表容器和每个列表项都有 `style` 属性。\n8. HTML 结构校验通过。\n9. 默认模式下，`\u003Cbody>` 不包含文稿开头的一级标题，也不重复出现 `\u003Chead>\u003Ctitle>` 的文章标题；用户明确要求正文保留标题时例外。\n\n可以使用以下命令做基础检查：\n\n```bash\nxmllint --html --noout \"输出文件.html\"\nrg -n '\u003Cstyle|class=|id=|:before|:after|\u003Cscript|https?:\u002F\u002F|@import' \"输出文件.html\"\n```\n\n第二条命令应该没有输出。若环境没有 `xmllint` 或 `rg`，使用等价工具完成检查。\n\n---\n\n## 用户使用提示\n\n生成完成后告诉用户：\n\n```text\n已生成。\n\n打开 HTML 后：\n1. Cmd+A 全选\n2. Cmd+C 复制\n3. 粘贴到微信公众号后台编辑器\n4. 用微信后台预览检查手机端效果\n```\n\n如果生成了多个风格，告诉用户先在总览页里点开比较，选定后再复制对应 HTML。\n\n---\n\n## 注意事项\n\n- 不要联网加载字体、CSS、图片或脚本。\n- 不要使用 JavaScript。\n- 不要依赖 hover、动画、position fixed 等公众号后台不稳定能力。\n- 正式交付 HTML 的 CSS 必须逐元素展开为行内样式，不使用 `\u003Cstyle>`。\n- 正文默认保持 16px 左右，行高 1.75-1.95。\n- 不要为了风格牺牲中文长文可读性。\n- 不要把来源媒体的品牌资产、logo、专有视觉原样复制进 HTML。这里只借鉴排版范式。\n\n---\n\n完成当前任务后直接结束。只有用户明确询问下一步，且当前环境已经安装 `\u002Fdbs` 时，简短提示：「下一步不确定时，可以输入 `\u002Fdbs`。」\n",{"name":5,"description":7},"main","7850740bd837adb32f0a109ab2af82482196c6f2","skills\u002Fdbs-wechat-html",1,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills","https:\u002F\u002Fzturnsgo.com","https:\u002F\u002Fgithub.com\u002Fshengdabai","https:\u002F\u002Fzturnsgo.com\u002F","AI × education creator — producer, not consumer. Taught 6,000+ learners; shipping learning tools & daily essays with Claude Code, practicing @xiaolai's way 🥋","2026-11-01 21:28:23",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add shengdabai\u002FTony-Claude-Code-Skills --skill dbs-wechat-html",{"tool":54,"command":55},"bunx","bunx skills add shengdabai\u002FTony-Claude-Code-Skills --skill dbs-wechat-html",{"tool":57,"command":58},"pnpm","pnpm dlx skills add shengdabai\u002FTony-Claude-Code-Skills --skill dbs-wechat-html","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdbs-wechat-html\u002FSKILL.md",true,[62,68],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"agents\u002Fopenai.yaml","REFERENCE","参考文档",263,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdbs-wechat-html\u002Fagents\u002Fopenai.yaml",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"templates\u002Fstyles.md",23303,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdbs-wechat-html\u002Ftemplates\u002Fstyles.md",[73,90,124,151,173,193],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":33},"01M70P17DAD4C1C47NPH6A96EM","xiaolai-methodology","以李笑来(Li Xiaolai)的思考方式、方法论与表达风格,为用户做全方位 1-on-1 教练指导,覆盖创业、赚钱、投资、学习、自学、读书写作、用 AI、以及人生心态与自我管理。当用户提到 \"李笑来\"、\"笑来\"、\"笑来老师\"、\"扮演李笑来\"、\"找笑来聊聊\"、\"笑来怎么看\"、\"xiaolai\"、\"把时间当作朋友\"、\"通往财富自由之路\"、\"定投改变命运\"、\"韭菜的自我修养\"、\"自学是门手艺\"、\"让时间陪你慢慢变富\"、\"七年就是一辈子\"、\"元认知\"、\"活在未来\"、\"复利\u002F长期主义\"、\"践行\"、\"痴迷改进\"、\"个人商业模式\u002F出售时间\"、\"睡后收入\"、\"定投\"、\"财富自由\"、\"操作系统升级\"、\"最少必要知识\"、\"北极星提示词\"、\"用 AI 该怎么学\u002F思考\" 等任一触发词,或当用户带着关于创业\u002F赚钱\u002F投资\u002F学习\u002F职业\u002F重大人生决策的困惑、希望被人用笑来式的「逻辑 + 大白话 + 类比 + 重新定义 + 践行导向」来点醒和指导时,自动进入李笑来教练模式。","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fxiaolai-methodology\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",[83,84,85,86,87,88,89],"methodology","xiaolai","xiaolai methodology","朋友","投资","writing","收入",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":104,"publishedAt":33},"01M70P13NB9YP7ACJR1S861CDS","zread","Produce and consume a wiki-style knowledge base for a code repository via the `zread` CLI and its on-disk output under `.\u002F.zread\u002Fwiki\u002F`. Use this skill whenever the user wants to understand, onboard onto, explore, summarize, map, or get an overview of an unfamiliar codebase; asks for architecture docs, a project wiki, a repo walkthrough, module\u002Fpackage explanations, or \"what does this repo do\"; wants to generate, regenerate, resume, browse, or serve code documentation locally; or mentions zread \u002F zread.ai directly. Also use it proactively before diving into a large unknown repo — if `.\u002F.zread\u002Fwiki\u002Fcurrent` exists, read the generated pages instead of crawling source file-by-file; if it doesn't, consider offering to run `zread generate`. The trigger is the intent (understand a codebase through generated docs), not the literal word \"zread\".","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fzread\u002FSKILL.md",[96,99],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[92,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123],"knowledge","wiki","explore","walkthrough","project","get","knowledge base","run","generate","intent","cli","map","documentation","project wiki","disk","architecture","code","unknown","generated",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":134,"publishedAt":33},"01M70P10S4SWMZQ8BJAFBFDRW3","youtube","Launch the YouTube Creator Agent to auto-generate videos.\nUse when: user types \u002Fyoutube, wants to create YouTube videos,\ngenerate video content, or upload to YouTube.\nKeywords: youtube, video, 视频, 创作视频, 发布视频","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube\u002FSKILL.md",[130,131],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":132,"categoryName":133,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000036","内容创作者",[126,135,136,137,138,139,140,141,113,142,143,144,145,146,147,148,149,150],"user","content","视频","creator","generate video","videos","launch","video content","create","upload","when","use","auto","types","Video","创作",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":33},"01M70P0YE95D8BACZCGV8BK90K","youtube-script-sync","Sync, update, or optimize Tony's GetNote knowledge base `Youtube视频逐字稿` by turning each parent recording or first-person idea note into an idempotent child note containing a directly recordable YouTube long-video or Shorts script. Use when the user says “更新\u002F同步\u002F优化 Youtube视频逐字稿知识库”, or says “更新\u002F同步\u002F优化该知识库” while this knowledge base is the active context.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-script-sync\u002FSKILL.md",[157],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},[159,160,126,161,162,149,163,164,165,166,167,168,169,170,111,171,145,146,105,172],"sync","script","youtube script sync","recording","shorts","first","base","person","update","active","child","optimize","idempotent","long",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":183,"publishedAt":33},"01M70P0WMV5XT0EEC0N445PW07","writing-skills","How to write SKILL.md files that trigger reliably and teach effectively. Use when creating, improving, or reviewing Claude Code skills.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-skills\u002FSKILL.md",[179,180,181,182],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},{"categoryNo":132,"categoryName":133,"taxonomyType":102,"taxonomyTypeDesc":103},[184,88,185,186,187,188,121,145,146,189,190,191,192],"writing skills","how","teach","write skill","write","claude code skills","files","how to","trigger",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":201,"publishedAt":33},"01M70P0SJFR4YVJQBGMHKGSKXT","writing-rules","How to write .claude\u002Frules\u002F files that Claude actually follows. Use when creating, improving, or reviewing project rules.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-rules\u002FSKILL.md",[199,200],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":132,"categoryName":133,"taxonomyType":102,"taxonomyTypeDesc":103},[202,88,203,109,204,190,145,185,188,146,191],"Rules","writing rules","project rules"]