From 500d8224db81034d4c471737cbe27dd4a4893a7a Mon Sep 17 00:00:00 2001 From: leroy Date: Tue, 6 Oct 2026 21:12:21 +0800 Subject: [PATCH] =?UTF-8?q?le-wechat-article=20v1.2=EF=BC=9A=E8=9E=8D?= =?UTF-8?q?=E5=90=88=20gzh-design-skill=20=E4=B8=BB=E9=A2=98=E6=8E=92?= =?UTF-8?q?=E7=89=88=E5=BC=95=E6=93=8E=EF=BC=886=20=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=BA=93=20/=20=E5=90=88=E8=A7=84=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=20/=20=E5=A4=8D=E5=88=B6=E9=A2=84=E8=A7=88=E9=A1=B5?= =?UTF-8?q?=EF=BC=8CAGPL=20=E9=9A=94=E7=A6=BB=E4=BA=8E=20themes/=EF=BC=89?= =?UTF-8?q?=EF=BC=8Cmd2wechat=20=E9=99=8D=E4=B8=BA=E8=BD=BB=E7=A8=BF?= =?UTF-8?q?=E5=BF=AB=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- skills/le-wechat-article/README.md | 4 +- skills/le-wechat-article/SKILL.md | 22 +- .../assets/preview-template.html | 82 ++ .../references/author-profile.md | 6 +- .../references/themes/ENGINE.md | 63 ++ .../references/themes/LICENSE | 671 ++++++++++++ .../references/themes/README.md | 31 + .../references/themes/common-components.md | 191 ++++ .../references/themes/theme-generator.md | 352 +++++++ .../themes/theme-graphite-minimal.md | 702 +++++++++++++ .../references/themes/theme-index.md | 34 + .../references/themes/theme-moyu-green.md | 936 +++++++++++++++++ .../references/themes/theme-moyu-ticket.md | 498 +++++++++ .../references/themes/theme-olive-journal.md | 974 ++++++++++++++++++ .../references/themes/theme-red-white.md | 632 ++++++++++++ .../references/themes/theme-zen-whitespace.md | 538 ++++++++++ .../scripts/component_lint.py | 98 ++ .../scripts/validate_gzh_html.py | 169 +++ .../le-wechat-article/scripts/wrap_preview.py | 44 + 20 files changed, 6039 insertions(+), 12 deletions(-) create mode 100644 skills/le-wechat-article/assets/preview-template.html create mode 100644 skills/le-wechat-article/references/themes/ENGINE.md create mode 100644 skills/le-wechat-article/references/themes/LICENSE create mode 100644 skills/le-wechat-article/references/themes/README.md create mode 100644 skills/le-wechat-article/references/themes/common-components.md create mode 100644 skills/le-wechat-article/references/themes/theme-generator.md create mode 100644 skills/le-wechat-article/references/themes/theme-graphite-minimal.md create mode 100644 skills/le-wechat-article/references/themes/theme-index.md create mode 100644 skills/le-wechat-article/references/themes/theme-moyu-green.md create mode 100644 skills/le-wechat-article/references/themes/theme-moyu-ticket.md create mode 100644 skills/le-wechat-article/references/themes/theme-olive-journal.md create mode 100644 skills/le-wechat-article/references/themes/theme-red-white.md create mode 100644 skills/le-wechat-article/references/themes/theme-zen-whitespace.md create mode 100755 skills/le-wechat-article/scripts/component_lint.py create mode 100755 skills/le-wechat-article/scripts/validate_gzh_html.py create mode 100755 skills/le-wechat-article/scripts/wrap_preview.py diff --git a/README.md b/README.md index 1fa4fb3..3bd9d17 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,8 @@ skills/ 方法论来源(只借机制,不复制表达):[mp-article-writor](https://github.com/balabalabalading/huuuuuuho-skills/tree/main/skills/mp-article-writor)(MIT,类型路由 / 去模板化 / 语义保真)· [wechat-article-skills](https://github.com/aiworkskills/wechat-article-skills)(Apache-2.0,产出配额 / AI 味指纹 / 机器自检)。 +排版主题库直接引入:[gzh-design-skill](https://github.com/isjiamu/gzh-design-skill)(AGPL-3.0)的 6 套主题组件库、平台合规校验器与预览页脚本,存放于 `skills/le-wechat-article/references/themes/` 并适用其原协议(边界与修改声明见该目录 README)。 + 安全边界:不群发不发表、不做跨平台、微信凭证只走环境变量不进仓库。 ## 安装 @@ -83,4 +85,4 @@ mkdir -p ~/.codex/skills && ln -s <克隆路径>/skills/le-wechat-article ~/.cod ## License -[MIT](LICENSE) +[MIT](LICENSE),唯一例外:`skills/le-wechat-article/references/themes/` 目录及自 gzh-design-skill 引入的三个脚本(`validate_gzh_html.py` / `wrap_preview.py` / `component_lint.py`)与 `assets/preview-template.html` 适用 **AGPL-3.0**(原文见该目录 LICENSE)。 diff --git a/skills/le-wechat-article/README.md b/skills/le-wechat-article/README.md index 972b33a..85969f6 100644 --- a/skills/le-wechat-article/README.md +++ b/skills/le-wechat-article/README.md @@ -18,7 +18,7 @@ ## 交付物 -`article.md`(终稿)+ `article.html`(粘贴公众号用,3 骨架 × 4 色板可选)+ 审读报告摘要(含合规清零)+ 3 个标题候选与摘要 + 封面 brief(七步推导,可联动 ckm-banner-design 直接出图)。 +`article.md`(终稿)+ `article.html`(干净正文)+ `article_预览.html`(带「复制到公众号」按钮的预览页)+ 审读报告摘要(含合规清零)+ 3 个标题候选与摘要 + 封面 brief(七步推导,可联动 ckm-banner-design 直接出图)。排版默认走主题引擎(6 套实战主题组件库,HTML 过平台合规校验),轻稿可用 md2wechat 快档。 可选收尾:经官方 API 同步到公众号草稿箱(`scripts/publish_draft.py`,需已认证公众号 + `WECHAT_APP_ID`/`WECHAT_APP_SECRET` 环境变量 + IP 白名单;自动提交 2.35:1 与 1:1 封面裁剪框;首次用 `--check` 验证,`--dry-run` 预览计划)。 @@ -29,3 +29,5 @@ ## 致谢 方法融合自两个开源项目(仅借机制与方法,未复制表达):[mp-article-writor](https://github.com/balabalabalading/huuuuuuho-skills/tree/main/skills/mp-article-writor)(MIT)的类型路由、去模板化审读与语义保真;[wechat-article-skills](https://github.com/aiworkskills/wechat-article-skills)(Apache-2.0)的产出配额、AI 味指纹阈值与机器自检思想。 + +排版主题库(`references/themes/` 与配套校验/预览脚本)**直接引入**自 [gzh-design-skill](https://github.com/isjiamu/gzh-design-skill)(AGPL-3.0,甲木 Jiamu × 摸鱼小李)——该部分适用其原协议,本 skill 其余部分为 MIT,边界与修改声明见 [themes/README.md](references/themes/README.md)。 diff --git a/skills/le-wechat-article/SKILL.md b/skills/le-wechat-article/SKILL.md index ca511ed..1943511 100644 --- a/skills/le-wechat-article/SKILL.md +++ b/skills/le-wechat-article/SKILL.md @@ -49,7 +49,7 @@ description: > 画像还是空模板、或所选账号没有分节时,用其中的「首访问题」问用户一次,把答复写回该文件(此文件随本 skill 存放,属于个人资产);每个账号首次使用各问一次,之后不再重复问。事实卡留空则跳过,用户随时可补。画像与事实卡都不能覆盖类型路由、事实核查和真实性底线。 -**校准结果是固定停点(轻量)**:展示本次将采用的约束——该账号画像要点(定位/声音/文末块/排版骨架与主题色)、将取用的事实卡条目、敏感词要求——用户确认或调整后进第 3 步。画像早已填好、无新信息时也要展示:给用户当场临时调整的机会(如本文换主题色、跳过文末块),展示可精简为几行。 +**校准结果是固定停点(轻量)**:展示本次将采用的约束——该账号画像要点(定位/声音/文末块/排版主题)、将取用的事实卡条目、敏感词要求——用户确认或调整后进第 3 步。画像早已填好、无新信息时也要展示:给用户当场临时调整的机会(如本文换排版主题、跳过文末块),展示可精简为几行。 ### 第 3 步:大纲与图位 @@ -102,19 +102,26 @@ python3 scripts/check_article.py <文章目录>/article.md --type <主类型> ### 第 7 步:交付 -0. **图片生产(默认执行,用户明确不要图时才跳过)**:正文图位与封面按 [visual-production.md](references/visual-production.md) 生产——交给 ckm-banner-design,或 SVG 自绘 + 浏览器截图均可,满足 brief 验收点即可。信息位图上的文字**逐字取自文章**,主题色与排版骨架一致;可编辑源文件(SVG/HTML)随 PNG 一起保留在 `imgs/src/`。生成后把正文图位占位替换为 `imgs/<文件名>.png` 真实路径——**终稿不得残留 placeholder**(此时 check_article 不再加 `--allow-placeholder`)。 +0. **图片生产(默认执行,用户明确不要图时才跳过)**:正文图位与封面按 [visual-production.md](references/visual-production.md) 生产——交给 ckm-banner-design,或 SVG 自绘 + 浏览器截图均可,满足 brief 验收点即可。信息位图上的文字**逐字取自文章**,配色与所选排版主题一致;可编辑源文件(SVG/HTML)随 PNG 一起保留在 `imgs/src/`。生成后把正文图位占位替换为 `imgs/<文件名>.png` 真实路径——**终稿不得残留 placeholder**(此时 check_article 不再加 `--allow-placeholder`)。 -1. 排版转换(纯本地,零依赖)。骨架按文章类型选:工程(技术/教程)、杂志(叙事/访谈)、简报(更新/快讯);骨架与色板以**该账号**画像的「排版偏好」为默认: +1. 排版转换。默认走**主题引擎**——6 套实战主题组件库,融合自 gzh-design-skill(AGPL,见 [themes/README.md](references/themes/README.md))。主题以**该账号**画像的「排版偏好」为默认,按文章类型对照 [themes/theme-index.md](references/themes/theme-index.md) 的适用场景校准(教程/测评→摸鱼绿、深度观点→红白色系、设计科技→石墨极简、随笔→留白禅意、对比评测→摸鱼票据、内刊复盘→橄榄手记);选定后按 [themes/ENGINE.md](references/themes/ENGINE.md) 读该主题组件库 + 通用组件库装配 HTML,装配完**校验到全绿才算完成**: ```bash - python3 scripts/md2wechat.py <文章目录>/article.md --skeleton <工程|杂志|简报> --palette <靛蓝|松绿|黛紫|绛红> -o <文章目录>/article.html - # 不确定选哪个时先看对照页:--preview 生成三骨架 375px 样张,让用户挑 + python3 scripts/validate_gzh_html.py <文章目录>/article.html + # ERROR 与半角标点 WARNING 都要清零;不过则回装配修 + python3 scripts/wrap_preview.py <文章目录>/article.html <文章目录>/article_预览.html ``` - 输出的 HTML 全内联样式,全文复制粘贴进公众号编辑器即可用。 + 为账号定制全新风格:走 [themes/theme-generator.md](references/themes/theme-generator.md) 生成并登记(生成后跑 component_lint 到 0 ERROR)。 + + **轻稿快档**(简报类 <1500 字或用户明确要快时):用 md2wechat 确定性转换,跳过装配环节: + + ```bash + python3 scripts/md2wechat.py <文章目录>/article.md --skeleton 简报 --palette <靛蓝|松绿|黛紫|绛红> -o <文章目录>/article.html + ``` 2. 交付清单(一次给全): - - `article.md`(终稿)+ `article.html`(粘贴用)+ 审读报告摘要(采纳/驳回计数 + 合规清零 + 遗留风险) + - `article.md`(终稿)+ `article.html`(干净正文)+ `article_预览.html`(浏览器打开点「复制到公众号」即可粘贴)+ 审读报告摘要(采纳/驳回计数 + 合规清零 + 遗留风险) - **3 个标题候选**(混两种以上风格,注明各自打法,避开 style-rules 的禁用套路)+ digest 摘要(80–120 字) - **封面 brief**:按 [visual-production.md](references/visual-production.md) 七步推导产出——2.35:1 规格、主标题 4–7 字且在中央 1:1 安全区、短标题(分享卡用)、张力一句话、形态与媒介、避雷项。需要直接出图时把 brief 交给 ckm-banner-design 执行,产出按「345px 缩略回看」验收 - 图片状态:信息位/节奏位/实证位图是否就位;未生成的列出建议 @@ -162,6 +169,7 @@ python3 scripts/publish_draft.py <文章目录> --title "标题" --digest "摘 - 五类型路由与各类型结构:[article-types.md](references/article-types.md) - 公众号排版硬规则、标点规范、产出配额、标题规范:[style-rules.md](references/style-rules.md) - 审读手册(去模板化 + AI 味指纹 + 平台合规 + 语义保真):[review-playbook.md](references/review-playbook.md) +- 排版主题库与装配规则(6 主题 + 通用组件 + 引擎规则,AGPL 来源与协议边界):[themes/README.md](references/themes/README.md) · [theme-index.md](references/themes/theme-index.md) · [ENGINE.md](references/themes/ENGINE.md) - 作者画像(风格;个人层 + 分账号层,渐进填充):[author-profile.md](references/author-profile.md) - 常用事实卡(作者本人事实,渐进填充):[topic-facts.md](references/topic-facts.md) - 封面与插图生产方法(七步推导 + ckm-banner-design 联动):[visual-production.md](references/visual-production.md) diff --git a/skills/le-wechat-article/assets/preview-template.html b/skills/le-wechat-article/assets/preview-template.html new file mode 100644 index 0000000..20d7531 --- /dev/null +++ b/skills/le-wechat-article/assets/preview-template.html @@ -0,0 +1,82 @@ + + + + + +{{TITLE}} · 公众号排版预览 + + + +
+ 👇 下方是排版效果 · 点右侧 复制 直接粘到公众号 + +
+
+
+
+ +
+
+ + + diff --git a/skills/le-wechat-article/references/author-profile.md b/skills/le-wechat-article/references/author-profile.md index 10791b0..804964c 100644 --- a/skills/le-wechat-article/references/author-profile.md +++ b/skills/le-wechat-article/references/author-profile.md @@ -16,7 +16,7 @@ 3. 希望读者记住这是一个什么样的号?(声音与气质) 4. 有没有特别喜欢/不能接受的表达方式?(口语化程度、能否用梗、第一人称习惯) 5. 文末固定要加什么?(关注引导/签名/往期推荐/什么都不加) -6. 排版偏好?(骨架:工程/杂志/简报;主题色:靛蓝/松绿/黛紫/绛红) +6. 排版偏好?(从 themes/theme-index.md 的 6 套主题选默认:摸鱼绿 / 红白色系 / 石墨极简 / 留白禅意 / 摸鱼票据 / 橄榄手记;简报类默认走 md2wechat 轻稿快档) ## 个人层(全账号通用) @@ -66,6 +66,6 @@ ### 排版偏好 -默认排版骨架:**工程**(色条标题,适合技术文) -默认主题色:**靛蓝 #1A5CFF** +默认排版主题:**摸鱼绿**(教程/测评向默认推荐,信息密度高) +轻稿快档:简报类沿用 md2wechat 简报骨架 · 靛蓝 默认字号:16px(公众号正文标准) diff --git a/skills/le-wechat-article/references/themes/ENGINE.md b/skills/le-wechat-article/references/themes/ENGINE.md new file mode 100644 index 0000000..db2355e --- /dev/null +++ b/skills/le-wechat-article/references/themes/ENGINE.md @@ -0,0 +1,63 @@ +# ENGINE —— 主题排版装配规则 + +> 本文件由 gzh-design-skill 的 SKILL.md 提炼适配(AGPL-3.0,见同目录 LICENSE 与 README)。融合改动已用「融合」标注。装配 HTML 时**具体代码一律从主题组件库取,不凭记忆手写**。 + +## 装配流程 + +1. **读两份库**:所选主题的 `theme-{标识}.md`(设计变量、组件 HTML、模板骨架、配方表、映射规则)+ `common-components.md`(代码块 / 图片·GIF / 小标签标题,所有主题共用)。一篇文章只用一套主题,不跨主题混组件。 +2. **判定文章类型**(取主导类型,可复合):教程/操作指南、盘点/工具清单、观点/深度分析、访谈/人物特稿、数据复盘/报告、生活/情感随笔、案例实战——直接沿用第 1 步已选定的主类型,不重复判定。 +3. **查配方表**:按文章类型在该主题库「文章类型 → 组件组合配方」表选核心组件组合与点缀组件,保证同类文章排版气质稳定;配方外元素按主题库映射规则表补充。 +4. **装配**:按主题库「完整文章模板骨架」的顺序,把 article.md 的每个元素替换为对应组件。每个段落、每张图都要转换,不得遗漏,不增删实质内容。 + +## 行内标记映射 + +- `**加粗**` → 主题主色加粗(锚点层) +- `==高亮==` → 渐变背景高亮;`文字` / `++文字++` → 下划线;`~~文字~~` → 荧光笔 +- `> 引用` → 引用高亮块(开头引言用主题引言卡) +- 代码/命令/Prompt → common-components 1a/1b 代码块(**必须**,塞普通段落会丢缩进);行内 code → 1c +- 图片 → 2a(只有 `![说明](url)` 真有说明文字才加说明行,不编造);**融合**:本地 `imgs/*.png` 路径原样保留,草稿箱同步时由 publish_draft.py 替换为微信域名 + +## 智能处理(装配时必须做) + +1. **章节自动编号**:按 `##` 顺序编 01/02/03…;末章为结语/总结时用主题库指定的结语编号变体(如 `∞`)。 +2. **英文标签**:据中文章节标题生成(实测→TEST、教程→TUTORIAL、总结→SUMMARY…),主题库有槽位才用。 +3. **正文关键词下划线(核心特色)**:对每个正文段落主动挑 1–3 个最重要短语(4–15 字),用 theme-index「正文下划线 CSS」列的值标记——优先核心观点、结论、关键数据、专有名词。原文没有加粗也要标;与写作侧「加粗是扫读落点」互补:md 里的加粗进锚点层,下划线在装配时补标。不整段划线。 +4. **引言关键词高亮**:开头金句的核心词用高亮组件。 +5. **目录**:主题库有目录组件时,从全部 `##` 挑最重要的 3 个作精选导读,不是全量章节列表。 +6. **签名区**:「融合」只在**该账号画像配置了文末固定块**时渲染(对应 style-rules「不自动追加关注引导」红线),文案逐字取自画像;画像没配就不生成签名区。原文末尾已有的签名/引导段并入这唯一一处,不在中间或多处出现。 +7. **中文全角标点**:正文标点全角(,。!?:;""''()——…),生成时直接写弯引号;代码块/行内代码/URL/英文标识符内保持原样。 +8. **列表**:按主题库映射规则;无专属组件时转带缩进正文段。 + +## 视觉层级(3 层,防滥用) + +| 层级 | 作用 | 频率 | 手段 | +|------|------|------|------| +| 锚点层 | 最强锚点:产品名/步骤/CTA/核心金句 | 全文 ≤5 处 | 主色加粗、深底白字引用 | +| 标记层 | 正文关键词 | 每段 1–3 处 | 下划线 | +| 容器层 | 引用块、标签、长句强调 | 按需 | 浅底引用、荧光笔、徽章 | + +## 平台红线(校验脚本兜底,但装配时就该守) + +- **禁止**:`