back
loading skill details...
生成、规范化、主题化和预览 HTML 优先的微信公众号文章,让正文可复制到微信后台。适用于把主题、简报、笔记、提纲、Markdown 或已有 HTML 转成微信友好的文章正文,创建本地预览页,应用可复用排版主题,或准备可复制的 `article#wechatArticle`。
--- name: wechat-article-formatter description: 生成、规范化、主题化和预览 HTML 优先的微信公众号文章,让正文可复制到微信后台。适用于把主题、简报、笔记、提纲、Markdown 或已有 HTML 转成微信友好的文章正文,创建本地预览页,应用可复用排版主题,或准备可复制的 `article#wechatArticle`。 --- # 微信文章排版预览 ## 用途 为微信公众号编辑流程生成并规范化 HTML 优先的文章内容。 输出应聚焦文章正文,方便复制到微信后台。 允许使用可选主题预设,让文章在排版时匹配指定的微信文章视觉风格。 被 `wechat-article-pipeline` 调用时,直接生成第一版 HTML 主稿,并以 `wechat-article-writer` 的写作质量标准作为参考;后续修订都以这份经过审核的 HTML 为唯一正文主稿。 ## 执行清单 开始后用这张清单跟踪进度: - [ ] 判断来源类型:主题或简报、笔记、提纲、Markdown、已有 HTML。 - [ ] 选择交付模式:默认本地预览页;正文片段或后台复制场景使用 `article#wechatArticle`。 - [ ] 生成或规范化 HTML 草稿,同时保留来源事实和原有表达。 - [ ] 应用用户指定的主题预设;未指定时使用 `warm-editorial`。 - [ ] 执行样式审核,并直接修复 HTML 问题。 - [ ] 对于含有本地图片资源的排版,运行 [inline_images.py](scripts/inline_images.py) 将相对路径图片内联为 base64 Data URL。 - [ ] 若需要将封面图转为 Base64 Data URL 形式,运行 [convert_cover_to_base64.py](scripts/convert_cover_to_base64.py)。 - [ ] 需要完整预览页时,用 [generate_preview.py](scripts/generate_preview.py) 生成预览,可选择使用 `--open` 参数或 [open_preview.py](scripts/open_preview.py) 交互式地提醒用户并在用户同意后通过浏览器打开 HTML 预览。 - [ ] 按 `references/completeness-checklist.md` 检查最终结果。 ## 默认策略 - 默认把 HTML 作为唯一正文主稿格式。 - 普通起草、排版和预览请求默认生成本地完整 HTML 预览页。 - 只有后台复制、API 交接或明确要求正文片段时,才默认交付 `article#wechatArticle`。 - 没有可用主题预设时,默认使用 `warm-editorial`。 - 默认把主标题放在可复制正文外,除非用户要求正文内包含标题。 - 默认把生成的预览文件放在 `dist/`。 ## 工作流程 1. 判断来源类型:主题或简报、笔记、提纲、Markdown、已有 HTML。 2. 来源是主题、简报或笔记时,直接生成第一版微信公众号 HTML 草稿。 3. 来源是已经审核过的语义化 HTML 时,把它作为正文主稿,只规范化结构问题。 4. 只有来源是 Markdown 或纯文本,且没有语义化 HTML 草稿时,才转换为 HTML。 5. 把文章整理成微信友好的 HTML 正文结构,保留事实和用户给出的措辞,并使用合适的 `data-role` 属性。 6. 生成最终预览前执行样式审核。 7. 用户指定主题时应用对应主题预设;未指定时使用默认暖色编辑主题。 8. 选择交付模式: - 任务涉及后台复制、下游交接、API 交接或只要正文片段时,返回或写入可复制结果,正文主体包在 `article#wechatArticle` 中。 - 任务未涉及发布或交接时,默认写入本地完整 HTML 预览页。 9. 对于包含本地图片资源的文章,在组装生成预览前,必须运行 [inline_images.py](scripts/inline_images.py) 脚本(如 `python skills/wechat-article-formatter/scripts/inline_images.py --html dist/temp_content.html`)将相对路径图片一键内联为 Base64 Data URL。若有封面图片,可运行 [convert_cover_to_base64.py](scripts/convert_cover_to_base64.py) 进行 Base64 转换。 10. 写完整 HTML 预览页时,按照 [preview-implementation.md](references/preview-implementation.md) 的要求,用 [generate_preview.py](scripts/generate_preview.py) 组装输出,并在完成后提醒并可用浏览器打开预览(例如使用 `--open` 参数或独立脚本 [open_preview.py](scripts/open_preview.py))。 11. 最终交付前,严格按 `references/completeness-checklist.md` 检查结果。 ## 来源规则 - 优先使用 HTML 作为工作格式。 - 必要时接受 Markdown、提纲文本或笔记作为上游输入。 - 用户要求从零生成微信公众号文章时,可以接受主题或简报作为上游输入,并直接用 HTML 写作和组织正文。 - 输入是语义化 HTML 草稿时,不要转回 Markdown;后续内容和结构修复都直接在 HTML 中完成。 - 输入是 Markdown 时,先转换成文章 HTML,再把这份 HTML 作为工作草稿。 - 用户已经提供 HTML 时,不要要求用户再提供 Markdown。 - 保留来源语种。中文来源的标题、标签和正文都应保持中文。 - 不要重复包裹 `article#wechatArticle`。使用 [generate_preview.py](scripts/generate_preview.py) 时,只传入文章内部内容,因为预览模板会提供外层容器。 ## 样式审核 生成最终预览或可复制正文前,先审核 HTML 草稿: - 正文是干净的语义化 HTML,没有预览工具栏、脚本、外部 CSS、调试文字或重复的 `article#wechatArticle` 包裹。 - 可复制正文通常不包含 `h1`;文章标题用于预览页标题和最终回复说明。除非用户明确要求保留、来源本身必须保留,或交付物就是带读者可见标题的独立正文,否则删除正文层面的重复 `h1` 或大型标题。 - 文章有清晰章节顺序时,主要 H2 上方使用短 `moduleLabel` 序号标签。 - 可调整措辞时,主要 H2 使用自然中文的两段式编辑标题。 - 段落适合移动端阅读,不产生连续大段文本。 - `quote`、`callout`、`summary`、列表、图片和图片说明只在支持内容时使用。 - 不留下未闭合标签、不安全嵌套、过长未换行 URL 或容易造成横向滚动的结构。 样式审核发现问题时,先直接修复 HTML 草稿,再运行预览生成器。若修复会改变事实含义或文章立场,先回到写作或修订步骤。 ## 首稿生成 根据主题、简报、提纲或笔记生成第一版文章时: - 直接产出面向微信的 HTML 首稿,不先写 Markdown。 - 内容取舍、篇幅、信息密度和中文表达以 `wechat-article-writer` 定义的写作标准为准;本技能只负责把已确定的内容组织成微信友好的 HTML。 - 以 `wechat-article-writer` 作为写作质量参考,覆盖目标读者、文章承诺、标题策略、结构、中文节奏、具体细节、作者判断、精简约束和反模板化语气。 - 先让文章读起来自然,再用 HTML 结构支撑节奏,不为满足固定标签清单牺牲阅读。 - 默认把主标题放在 `article#wechatArticle` 外:作为 `--title` 传给预览生成器,并在最终交付说明中提及。除非用户明确要求复制正文内包含标题,否则可复制正文从导语、摘要或第一个 `h2` 开始。 - 只有在提升扫描效率或澄清论证时,才使用 `moduleLabel`、两段式 H2、引用、提示块、摘要和列表。 - 来源备注、事实不确定处、链接、配图建议和发布提醒应作为内部复核或最终交付说明记录。除非用户明确要求、来源已有,或文章本身需要向读者展示引用,不要在 `article#wechatArticle` 中添加读者可见的“来源”“参考资料”“引用和备注”或发布提醒章节。 - 第一版 HTML 草稿生成后,所有内容和样式修订都直接在这份 HTML 草稿中完成。 ## 主题预设 - 用户需要特定文章配色时,支持可选的 `themePreset` 输入。 - 使用 `references/theme-presets.md` 中定义的预设 id、展示名、固定颜色标记、固定排版标记和视觉方向。 - 没有有效预设时,兜底使用 `warm-editorial`。 - 支持的预设 id: - `warm-editorial` - `light-simple` - `tech-blue` - `indigo-card` - `swiss-grid` - `purple-highlight` - `warm-nature` - `vitality-orange` - `wechat-pure-glass` - `modern-cobalt` - `deep-space` - 用户提到“科技蓝”“自然森系”等主题名时,映射到对应预设 id。 - 未指定预设时,保持内容优先,并以 `warm-editorial` 作为本地兜底预设。 - 完整预览页必须在主题切换器中暴露所有支持的预设;除非用户指定其他主题,否则初始化为 `warm-editorial`。 - 预览外壳可以用 JavaScript 切换主题,但复制出去的正文必须把所选主题写成 `article#wechatArticle` 内的行内样式。 - 主题颜色由 `references/theme-presets.md` 固定。不要根据预设名臆造新的主色、正文色、表面色、边框色、引用色、代码色或表格色。 - 需要的组件未被语义标记表覆盖时,先从同一预设的完整色板中选择,再考虑新增颜色。 - 主题排版由 `references/theme-presets.md` 固定。不要根据预设名臆造新的基础字号、标题字号、列表字号、引用字号、代码字号、表格字号、说明字号或备注字号。 - 主题未列出专用尺寸时,使用 `references/theme-presets.md` 中的通用排版标记。 ## 纯样式边界 - 应用样式时,不强行套用固定文章架构。只处理来源中已有的元素,或来源转换后自然产生的元素。 - 不要添加编号章节、作者块、结尾块、推荐模块或特定媒体模板,除非来源已有等价内容。 - 从草稿、提纲或新写文章生成正文时,默认在主要 H2 上方使用紧凑的 `moduleLabel`,例如 `01 / 开头`、`02 / 关键判断`、`06 / 最后一句话`。标签要短、贴合来源,并放在 H2 文本外。 - 来源允许编辑塑形时,主要章节优先使用两段式 H2:前半段说明主题或场景,后半段给出具体判断或收益。能写得更清楚时,避免只写 `背景`、`分析`、`总结` 这类空泛标题。 - 任务是严格排版既有终稿时,不要为了制造两段式标题而改写 H2;只有现有章节顺序明确或用户要求这种编辑风格时,才添加 `moduleLabel`。 - 默认输出应通过字体、间距、克制的表面层和语义强调形成温暖编辑感,不通过编造内容实现风格。 ## 输出约定 - HTML 输出目录:生成的本地预览 HTML 默认写入 `dist/`。这与仓库 `.gitignore` 匹配,也能避免生成预览进入版本控制。 - 只有用户明确指定其他目录时,才使用其他输出目录。 - 除非用户明确要求只输出文章正文,或任务属于交接流程,否则默认生成本地完整 HTML 预览页。 - 普通写作、排版或起草任务以预览页作为交付物。最终回复提供本地文件路径,不粘贴完整 HTML 源码。 - 主体文章正文包裹为: ```html <article id="wechatArticle">...</article> ``` - 结果聚焦文章正文。最终正文中不要包含测试页外壳、应用导航、调试面板或无关控件。 - 内容必须自包含。文章可读性不要依赖外部 CSS、外部 JavaScript、外部字体、旁路 JSON 文件或运行时渲染。 - 不要依赖 JavaScript 在运行时生成最终文字或图片 URL。 - 用户要求完整预览页时,也要隔离可复制目标,确保实际文章正文仍可干净抽取。 ## 交付规则 - 请求不涉及后台复制、API 交接或其他下游交接步骤时,默认写入本地完整 HTML 预览页。 - 完整预览交付必须是单个可转移的 `.html` 文件。不要留下主题 JSON 或样式 JSON 作为用户发送、打开或发布时必须携带的配套文件。 - 只有用户明确要求只输出文章正文,或任务明显属于后台复制/交接流程时,才返回原始 `article#wechatArticle` HTML。 - 写完整预览 HTML 文件时,默认使用 [generate_preview.py](scripts/generate_preview.py),继承其主题切换和复制到微信控件;**必须**在生成完成后使用 `--open` 参数或调用 [open_preview.py](scripts/open_preview.py) 强制交互式提醒用户是否在浏览器中打开预览。用户明确要求只要正文时除外。 - 用户要求 Markdown 加微信可复制结果时,Markdown 只作为可选中间阅读稿,最终交付目标仍是 HTML 正文。 - 在 HTML 优先的文章流程中,不维护 Markdown 和 HTML 两份主稿。以经过审核的语义化 HTML 作为主编辑物。 ## 常见误用 - 不要把已审核 HTML 转回 Markdown 再编辑。 - 不要把完整预览页外壳当作可复制正文;正文交接只交 `article#wechatArticle`。 - 使用 [generate_preview.py](scripts/generate_preview.py) 时,不要重复生成 `article#wechatArticle` 包裹。 - 不要根据主题名臆造新的主题颜色或排版尺寸。 - 除非用户或来源要求,不要新增读者可见的来源、审核或发布风险章节。 - 不要让最终文章依赖外部 CSS、JavaScript、字体或旁路文件。 - 生成本地 HTML 预览页后,在未提醒或未尝试用浏览器打开的情况下就直接交付或关闭任务。 - **不要在排版首稿或正文中使用 `div` 标签进行排版装饰或作为文字容器(例如 `moduleLabel` 或提示卡片)**。微信后台粘贴富文本时会过滤或打碎 `div` 标签的行内样式。应使用 `<section>` 作为外层容器(如提示区、摘要卡),使用 `<p>` 标签作为文本或小标题容器。 - **不要在正文 HTML 中使用相对路径来引用本地图片(如 `./image.png`)**。因为本地 `file://` 协议下浏览器的 CORS 跨域策略会阻止在复制时的 Base64 转换与拉取,导致在微信中图片失效。所有的本地图片资源必须在首稿起草或排版前,直接进行 Base64 Data URL 内联编译。 ## 验证闭环 最终交付前: 1. 确认交付模式符合用户请求。 2. 交付正文时,确认文章正文只有一个干净的 `article#wechatArticle` 包裹。 3. 交付预览页时,确认预览页可以干净抽取并复制文章正文。 4. 确认主题颜色和排版来自 `references/theme-presets.md`。 5. 确认已经检查 `references/completeness-checklist.md`。 6. **[强制要求]** 确认已通过 [open_preview.py](scripts/open_preview.py) 或 `--open` 参数提醒用户是否打开浏览器,并在用户同意后成功打开了 HTML 预览页面。 ## 示例请求 - “把这篇 Markdown 转成可以复制到微信公众号后台的正文” - “把这段 HTML 调整成微信公众号正文结构” - “生成可以复制到微信后台的文章 HTML” - “把这个提纲扩展成公众号排版,并输出 `article#wechatArticle`” - “用 `tech-blue` 主题把这篇 Markdown 排成微信公众号正文” - “按自然森系配色输出公众号正文 HTML” ## 参考资料 为保持主说明聚焦,具体技术细节和约束放在参考文件中。执行相关步骤时,必须按需读取这些参考: - **[主题预设](references/theme-presets.md)**:本地预设目录、颜色/排版标记和兜底行为。 - **[视觉与排版规范](references/visual-guidelines.md)**:编辑化样式、避免大色块、保持稳定 HTML 结构的规则。 - **[预览页实现](references/preview-implementation.md)**:生成预览页的技术要求,包括工具栏、剪贴板复制和图片 base64 内联。 - **[图片规则](references/image-rules.md)**:静态图片来源和 base64 转换策略。 - **[完整性清单](references/completeness-checklist.md)**:交付最终 HTML 前必须验证的 QA 清单。 - **[输出约定](references/output-contract.md)**:微信正文结构和交接约束。
don't have the plugin yet? install it then click "run inline in claude" again.