修复排版升级与 workflow 的兼容问题 + 更新 README

兼容修复:
- style-template.md 主题列表从 4 → 16,新增 gallery 提示
- writing-guide.md "客户" → "用户"(单用户模式残留措辞)
- SKILL.md description 新增主题画廊/容器语法触发词
- SKILL.md Step 4 新增容器语法说明(:::dialogue/timeline/callout/quote)
- SKILL.md Step 7 新增 converter 自动修复说明(CJK/脚注/暗黑/列表)
- SKILL.md Step 8 新增"看看有什么主题"/"换主题"用户操作
- SKILL.md Onboard 主题选问新增 gallery 命令提示
- wechat-constraints.md 新增第 8 节"WeWrite 自动修复"
- README 完整更新:排版引擎章节、16 主题分类表、容器语法示例、gallery 命令

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
wangzhuc 2026-03-28 22:58:32 +08:00
parent 2fa0d7fa6d
commit 40bc8a1ceb
5 changed files with 135 additions and 27 deletions

100
README.md
View file

@ -45,6 +45,66 @@ WeWrite 的写作不是"写完再改",而是从第一句话开始就像人在
每篇文章写完后执行 8 项自检,不通过则定向重写。 每篇文章写完后执行 8 项自检,不通过则定向重写。
## 排版引擎
### 16 个主题
```bash
# 浏览器内预览所有主题
python3 toolkit/cli.py gallery
# 列出主题名称
python3 toolkit/cli.py themes
```
| 类别 | 主题 |
|------|------|
| 通用 | `professional-clean`(默认)、`minimal`、`newspaper` |
| 科技 | `tech-modern`、`bytedance`、`github` |
| 文艺 | `warm-editorial`、`sspai`、`ink`、`elegant-rose` |
| 商务 | `bold-navy`、`minimal-gold`、`bold-green` |
| 风格 | `bauhaus`、`focus-red`、`midnight` |
所有主题均支持微信暗黑模式(自动注入 `data-darkmode-*` 属性)。
### 微信兼容性自动修复
Converter 自动处理以下微信平台限制,无需手动干预:
| 问题 | 自动修复 |
|------|---------|
| 外链被屏蔽 | 转为上标编号脚注 + 文末参考链接 |
| 中英混排无间距 | CJK-Latin 边界自动加空格 |
| 加粗标点渲染异常 | 标点自动移到 `</strong>` 外 |
| 原生列表渲染不稳定 | `<ul>/<ol>` 转为样式化 `<section>` |
| 暗黑模式颜色反转 | 注入 `data-darkmode-color/bgcolor` |
| `<style>` 被剥离 | 所有 CSS 以内联 `style` 注入 |
### 容器语法
适合特定内容类型的富排版块,在 Markdown 中使用 `:::` 语法:
````markdown
:::dialogue
你好,请问这个功能怎么用?
> 很简单,直接在 Markdown 里写就行。
:::
:::timeline
**2024 Q1** 立项启动
**2024 Q3** MVP 上线
**2025 Q1** 用户突破 10 万
:::
:::callout tip
这是一个提示框,支持 tip / warning / info / danger 四种类型。
:::
:::quote
好的排版不是让读者注意到设计,而是让读者忘记设计。
:::
````
## 安装 ## 安装
### 1. 获取代码 ### 1. 获取代码
@ -99,7 +159,9 @@ cp config.example.yaml config.yaml
你:写一篇关于 AI Agent 的公众号文章 你:写一篇关于 AI Agent 的公众号文章
你:交互模式,写一篇关于效率工具的推文 你:交互模式,写一篇关于效率工具的推文
你:帮我润色一下刚才那篇 你:帮我润色一下刚才那篇
你:看看最近文章数据怎么样 你:看看有什么主题 → 打开主题画廊
你:换成 sspai 主题重新排版 → 切换主题
你:看看最近文章数据怎么样 → 效果复盘
``` ```
## 目录结构 ## 目录结构
@ -119,13 +181,13 @@ wewrite/
│ └── learn_edits.py # 学习人工修改 │ └── learn_edits.py # 学习人工修改
├── toolkit/ # Markdown → 微信工具链 ├── toolkit/ # Markdown → 微信工具链
│ ├── cli.py # CLIpreview / publish / themes │ ├── cli.py # CLIpreview / publish / gallery / themes
│ ├── converter.py # Markdown → 内联样式 HTML │ ├── converter.py # Markdown → 内联样式 HTML + 微信兼容修复
│ ├── theme.py # YAML 主题引擎 │ ├── theme.py # YAML 主题引擎
│ ├── publisher.py # 微信草稿箱 API │ ├── publisher.py # 微信草稿箱 API
│ ├── wechat_api.py # access_token / 图片上传 │ ├── wechat_api.py # access_token / 图片上传
│ ├── image_gen.py # AI 图片生成doubao / OpenAI │ ├── image_gen.py # AI 图片生成doubao / OpenAI
│ └── themes/ # 4 套预置排版主题 │ └── themes/ # 16 套排版主题(含暗黑模式)
├── references/ # Agent 按需读取的参考文档 ├── references/ # Agent 按需读取的参考文档
│ ├── writing-guide.md # 写作规范 + 7 层去 AI 痕迹 │ ├── writing-guide.md # 写作规范 + 7 层去 AI 痕迹
@ -133,8 +195,8 @@ wewrite/
│ ├── topic-selection.md # 选题评估规则 │ ├── topic-selection.md # 选题评估规则
│ ├── seo-rules.md # 微信 SEO 规则 │ ├── seo-rules.md # 微信 SEO 规则
│ ├── visual-prompts.md # 视觉 AI 提示词规范 │ ├── visual-prompts.md # 视觉 AI 提示词规范
│ ├── wechat-constraints.md # 微信平台技术限制 │ ├── wechat-constraints.md # 微信平台限制 + 自动修复说明
│ └── style-template.md # 风格配置字段说明 │ └── style-template.md # 风格配置字段 + 全部主题列表
├── output/ # 生成的文章(运行时产生) ├── output/ # 生成的文章(运行时产生)
├── corpus/ # 历史文章语料(可选,用于 Playbook 学习) ├── corpus/ # 历史文章语料(可选,用于 Playbook 学习)
@ -160,22 +222,11 @@ topics:
- "方向1" - "方向1"
- "方向2" - "方向2"
tone: "写作风格描述" tone: "写作风格描述"
theme: "professional-clean" # 排版主题 theme: "professional-clean" # 排版主题16 个可选,运行 gallery 预览)
``` ```
详见 `references/style-template.md` 详见 `references/style-template.md`
## 排版主题
| 主题 | 风格 |
|------|------|
| `professional-clean` | 专业简洁(默认) |
| `tech-modern` | 科技风(蓝紫渐变) |
| `warm-editorial` | 暖色编辑风 |
| `minimal` | 极简黑白 |
预览:`python3 toolkit/cli.py themes`
## 图片生成 ## 图片生成
通过 `config.yaml` 切换 provider 通过 `config.yaml` 切换 provider
@ -201,11 +252,18 @@ WeWrite 能从你的修改中学习写作偏好:
```bash ```bash
# 预览 Markdown → 微信 HTML # 预览 Markdown → 微信 HTML
python3 toolkit/cli.py preview article.md --theme professional-clean python3 toolkit/cli.py preview article.md --theme sspai
# 浏览器内主题画廊16 主题并排预览 + 一键复制)
python3 toolkit/cli.py gallery
python3 toolkit/cli.py gallery article.md # 用自己的文章预览
# 发布到微信草稿箱 # 发布到微信草稿箱
python3 toolkit/cli.py publish article.md --cover cover.png --title "文章标题" python3 toolkit/cli.py publish article.md --cover cover.png --title "文章标题"
# 列出所有主题
python3 toolkit/cli.py themes
# 抓热点 # 抓热点
python3 scripts/fetch_hotspots.py --limit 20 python3 scripts/fetch_hotspots.py --limit 20
@ -231,13 +289,13 @@ Step 3 选题生成10 选题 × 评分)
Step 3.5 框架选择5 套骨架) Step 3.5 框架选择5 套骨架)
Step 4 维度随机化 + 文章写作7 层去 AI 痕迹) Step 4 维度随机化 + 文章写作7 层去 AI 痕迹 + 可选容器语法
Step 5 SEO 优化 + 去 AI 逐层验证8 项自检) Step 5 SEO 优化 + 去 AI 逐层验证8 项自检)
Step 6 视觉 AI封面 + 内文配图) Step 6 视觉 AI封面 + 内文配图)
Step 7 排版推送(降级:本地 HTML Step 7 排版推送(自动 CJK 修复/外链脚注/暗黑模式,降级:本地 HTML
Step 7.5 写入发布历史 Step 7.5 写入发布历史

View file

@ -3,8 +3,9 @@ name: wewrite
description: | description: |
微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 写作 → SEO/去AI痕迹 → 视觉AI → 排版推送草稿箱。 微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 写作 → SEO/去AI痕迹 → 视觉AI → 排版推送草稿箱。
触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、 触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、
热点抓取、封面图、配图、写公众号、写一篇。 热点抓取、封面图、配图、写公众号、写一篇、主题画廊、排版主题、容器语法。
也覆盖markdown 转微信格式、学习用户改稿风格、文章数据复盘、风格设置。 也覆盖markdown 转微信格式、学习用户改稿风格、文章数据复盘、风格设置、
主题预览/切换、:::dialogue/:::timeline/:::callout 容器语法。
不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发—— 不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发——
需要有公众号/微信等明确上下文。 需要有公众号/微信等明确上下文。
--- ---
@ -188,6 +189,14 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {从热点标题中提取的3
**Playbook 优先**:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是用户的个性writing-guide 是通用底线。 **Playbook 优先**:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是用户的个性writing-guide 是通用底线。
**容器语法**可选适合特定内容类型写作时可以使用以下容器块converter 会自动渲染为带样式的 HTML
- `:::dialogue` ... `:::` — 对话气泡(适合访谈/问答)
- `:::timeline` ... `:::` — 时间线(适合历程/步骤)
- `:::callout tip/warning/info/danger` ... `:::` — 提示框(适合重点/警告)
- `:::quote` ... `:::` — 拉引语(适合金句展示)
不是每篇文章都需要容器语法——只在内容形式契合时使用。
保存到 `{skill_dir}/output/{date}-{slug}.md` 保存到 `{skill_dir}/output/{date}-{slug}.md`
--- ---
@ -282,6 +291,14 @@ python3 {skill_dir}/toolkit/image_gen.py \
读取: {skill_dir}/references/wechat-constraints.md排版时参考微信平台限制 读取: {skill_dir}/references/wechat-constraints.md排版时参考微信平台限制
``` ```
**Converter 自动处理**(不需要手动干预,了解即可):
- 中英文自动加空格CJK-Latin spacing
- 加粗标点外移(微信渲染 bug 修复)
- `<ul>/<ol>``<section>`(微信原生列表不稳定)
- 外链自动转编号脚注 + 文末参考链接(微信屏蔽外链)
- 暗黑模式 `data-darkmode-*` 属性注入
- `:::` 容器语法自动渲染
```bash ```bash
python3 {skill_dir}/toolkit/cli.py publish {markdown_path} \ python3 {skill_dir}/toolkit/cli.py publish {markdown_path} \
--cover {cover_path} \ --cover {cover_path} \
@ -344,6 +361,8 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \
- "用框架 B 重写" → 回到 Step 4 - "用框架 B 重写" → 回到 Step 4
- "换一个选题" → 回到 Step 3 展示选题列表 - "换一个选题" → 回到 Step 3 展示选题列表
- "看看文章数据" / "效果怎么样" → 执行效果复盘(见下方) - "看看文章数据" / "效果怎么样" → 执行效果复盘(见下方)
- "看看有什么主题" / "换个主题" → 运行 `python3 {skill_dir}/toolkit/cli.py gallery` 打开主题画廊
- "换成 XX 主题" → 用新主题重新渲染当前文章
--- ---
@ -374,7 +393,7 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \
| 有没有绝对不能出现的词或话题? | `blacklist` | 空 | | 有没有绝对不能出现的词或话题? | `blacklist` | 空 |
| 有没有想参考的公众号? | `reference_accounts` | 空 | | 有没有想参考的公众号? | `reference_accounts` | 空 |
| 署名写什么? | `author` | name 字段值 | | 署名写什么? | `author` | name 字段值 |
| 偏好哪种排版风格? | `theme` | "professional-clean" | | 偏好哪种排版风格?(可运行 `gallery` 命令预览全部 16 个主题) | `theme` | "professional-clean" |
| 封面风格偏好? | `cover_style` | 从 industry 推断 | | 封面风格偏好? | `cover_style` | 从 industry 推断 |
| 有没有固定封面模板? | `cover_template` | 不设置 | | 有没有固定封面模板? | `cover_template` | 不设置 |

View file

@ -37,9 +37,23 @@ author: "署名"
## 可用排版主题 ## 可用排版主题
运行 `python3 toolkit/cli.py gallery` 可在浏览器中预览所有主题的实际效果。
| 主题 | 说明 | | 主题 | 说明 |
|------|------| |------|------|
| professional-clean | 专业简洁(默认,适合大部分企业 | | professional-clean | 专业简洁(默认,适合大部分商业内容 |
| tech-modern | 科技风(蓝紫渐变,适合技术/产品类) | | tech-modern | 科技风(蓝紫渐变,适合技术/产品类) |
| warm-editorial | 暖色编辑风(适合生活/文化类) | | warm-editorial | 暖色编辑风(适合生活/文化类) |
| minimal | 极简黑白(适合文学/严肃内容) | | minimal | 极简黑白(适合文学/严肃内容) |
| bytedance | 字节风(品牌蓝,现代大间距) |
| sspai | 少数派风(暖白底,红色点缀,清爽文艺) |
| newspaper | 报纸风(米黄底,深棕文字,衬线感) |
| bauhaus | 包豪斯(黑白为主,红蓝黄色块点缀) |
| ink | 水墨风(宣纸底,中文衬线,留白多) |
| midnight | 午夜深色(深蓝黑底,蓝色高亮) |
| bold-green | 大胆绿(森林绿主色,适合环保/健康) |
| bold-navy | 大胆藏青(藏青主色,适合金融/商务) |
| elegant-rose | 优雅玫瑰(浅粉底,玫瑰点缀,适合女性/生活) |
| minimal-gold | 极简金(金色细线点缀,奢华但克制) |
| focus-red | 聚焦红(中国红标题,适合新闻/评论) |
| github | GitHub 风(蓝色链接,等宽代码块,开发者友好) |

View file

@ -409,7 +409,24 @@ background: linear-gradient(135deg, #7c3aed 0%, #3b82f6 100%);
--- ---
## 8. 参考资源 ## 8. WeWrite 自动修复
以下微信平台限制已由 converter 自动处理,**无需手动干预**
| 限制 | 自动修复 |
|------|---------|
| 外链被屏蔽 | 自动转为上标编号脚注 + 文末参考链接列表 |
| 中英文混排无间距 | CJK-Latin 边界自动插入空格 |
| 加粗文本后中文标点渲染异常 | 标点自动移到 `</strong>` 标签外 |
| 原生 `<ul>/<ol>` 列表渲染不稳定 | 自动转为 `<section>` + 样式化 bullet/number |
| 暗黑模式颜色反转错误 | 自动注入 `data-darkmode-color/bgcolor` 属性 |
| `<style>` 标签被剥离 | 所有 CSS 以内联 `style` 属性注入 |
这些修复在 `converter.py``convert()` 方法中自动执行,覆盖所有 16 个主题。
---
## 9. 参考资源
### 官方文档 ### 官方文档
- [微信公众平台 - 帮助中心](https://kf.qq.com/product/weixinmp.html) - [微信公众平台 - 帮助中心](https://kf.qq.com/product/weixinmp.html)

View file

@ -4,7 +4,7 @@
你是这个公众号的主笔。你写的东西要像一个真人编辑写的——有观点、有个性、有瑕疵感。读者点开文章,应该觉得"这人挺懂的",而不是"这是 AI 写的"。 你是这个公众号的主笔。你写的东西要像一个真人编辑写的——有观点、有个性、有瑕疵感。读者点开文章,应该觉得"这人挺懂的",而不是"这是 AI 写的"。
**规则优先级**:如果客户有 `playbook.md`其中的规则覆盖本文件的通用规则。playbook 是客户的个性化风格,本文件是通用底线。没有 playbook 时,完全按本文件执行。 **规则优先级**:如果用户有 `playbook.md`其中的规则覆盖本文件的通用规则。playbook 是用户的个性化风格,本文件是通用底线。没有 playbook 时,完全按本文件执行。
## 文章结构 ## 文章结构