@topmindspace/tms-skills 0.3.1 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +172 -0
- package/README.en.md +6 -76
- package/README.md +7 -75
- package/package.json +1 -1
- package/top-ppt-html/README.en.md +19 -20
- package/top-ppt-html/README.md +36 -90
- package/top-ppt-html/SKILL.md +65 -60
- package/top-ppt-html/references/charts.md +0 -15
- package/top-ppt-html/references/components.md +0 -18
- package/top-ppt-html/references/design-system.md +2 -2
- package/top-ppt-html/references/icons.md +2 -2
- package/top-ppt-html/references/infographics.md +1 -5
- package/top-ppt-html/references/modes.md +4 -4
- package/top-ppt-html/references/tech-design.md +3 -3
- package/top-ppt-html/scripts/build_examples.py +4 -4
- package/top-ppt-html/scripts/build_pptx.js +240 -59
- package/top-ppt-html/scripts/check_triggers.py +10 -2
- package/top-ppt-html/scripts/extract_model.py +16 -5
- package/top-ppt-html/scripts/gen_channel_a.js +55 -10
- package/top-ppt-html/scripts/hydrate_charts.py +68 -13
- package/top-ppt-html/scripts/negative_tests.py +1 -1
- package/top-ppt-html/scripts/prepare_images.py +1 -1
- package/top-ppt-html/scripts/recommend_layout.py +26 -3
- package/top-ppt-html/scripts/render_from_model.py +78 -13
- package/top-ppt-html/scripts/scaffold_report.py +43 -3
- package/top-ppt-html/scripts/sync_runtime.py +32 -4
- package/top-ppt-html/scripts/test_feedback_gates.py +24 -0
- package/top-ppt-html/scripts/validate_pptx.py +10 -1
- package/top-ppt-html/scripts/validate_report.py +43 -7
- package/topmind-cover/README.en.md +11 -25
- package/topmind-cover/README.md +11 -25
- package/topmind-cover/SKILL.md +49 -38
- package/topmind-cover/assets/examples/README.md +15 -26
- package/topmind-cover/assets/examples/big-type-wechat.png +0 -0
- package/topmind-cover/assets/examples/big-type.png +0 -0
- package/topmind-cover/assets/examples/brand-launch-wechat.png +0 -0
- package/topmind-cover/assets/examples/brand-launch.png +0 -0
- package/topmind-cover/assets/examples/gan-huo-wechat.png +0 -0
- package/topmind-cover/assets/examples/gan-huo.png +0 -0
- package/topmind-cover/assets/examples/ip-fun-wechat.png +0 -0
- package/topmind-cover/assets/examples/ip-fun.png +0 -0
- package/topmind-cover/assets/examples/magazine-wechat.png +0 -0
- package/topmind-cover/assets/examples/magazine.png +0 -0
- package/topmind-cover/assets/examples/minimal-wechat.png +0 -0
- package/topmind-cover/assets/examples/minimal.png +0 -0
- package/topmind-cover/assets/examples/news-flash-wechat.png +0 -0
- package/topmind-cover/assets/examples/news-flash.png +0 -0
- package/topmind-cover/assets/examples/overview.png +0 -0
- package/topmind-cover/assets/examples/tutorial-steps-wechat.png +0 -0
- package/topmind-cover/assets/examples/tutorial-steps.png +0 -0
- package/topmind-cover/references/cover-styles.md +235 -264
- package/topmind-cover/references/impact-language.md +53 -0
- package/topmind-wechat-post/README.en.md +49 -1
- package/topmind-wechat-post/README.md +48 -2
- package/topmind-wechat-post/SKILL.md +35 -37
- package/topmind-wechat-post/references/element-spec.md +1 -1
- package/topmind-wechat-post/references/known-pits.md +2 -3
- package/topmind-wechat-post/references/typography-rules.md +1 -1
- package/topmind-wechat-post/references/workflow.md +3 -3
- package/topmind-wechat-post/references/writing-quality.md +8 -32
- package/topmind-wechat-post/scripts/md2wechat.py +117 -41
- package/topmind-wechat-post/scripts/negative_tests.py +32 -0
- package/topmind-x-article/README.en.md +40 -1
- package/topmind-x-article/README.md +42 -4
- package/topmind-x-article/SKILL.md +11 -5
- package/topmind-x-article/references/x-format.md +13 -10
- package/topmind-x-article/scripts/md2x.py +220 -40
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# 冲击力设计语言(抽象原则清单)
|
|
2
|
+
|
|
3
|
+
> 用途:给封面 prompt 编写者的"敢用力"依据。与 `cover-styles.md` 的原创铁律配合使用——
|
|
4
|
+
> 本文件只给可迁移的抽象原则,不给具体版式;任何原则落地时,版式与配色不得与第三方封面构成实质相似。
|
|
5
|
+
> 具体版式红线见 `docs/audit-2026-09-29-round5.md` 第一节差异审查表。
|
|
6
|
+
|
|
7
|
+
## 一、字体:字是第一眼
|
|
8
|
+
|
|
9
|
+
1. **标题字高占画面高度 ≥1/4(上限约 2/5)。**——为什么有效:封面在信息流里先以缩略图出现,字小等于没写标题。
|
|
10
|
+
2. **全图只给一处强调**(一个关键词或一个数字),用字号/色彩/描边等手法与其它文字拉开断层式差距。——为什么有效:处处强调等于没有强调,单点强调才能形成视觉锚。
|
|
11
|
+
3. **字色与底色明度差拉到最大**(深底配浅字、浅底配深字)。——为什么有效:对比是可读性的前提,也是缩略图下抓住注意力的最廉价手段。
|
|
12
|
+
4. **数字优先于文字做视觉钩子。**——为什么有效:数字比文字更快被大脑处理,且自带"具体、可验证"的信任感,3 秒内信息密度最高。
|
|
13
|
+
5. **字体性格与内容情绪一致**(硬朗/书法/圆润/纤细各有脾气)。——为什么有效:字形本身就是情绪,字形与内容违和会直接削弱信任。
|
|
14
|
+
|
|
15
|
+
## 二、色彩:0.3 秒的情绪预告
|
|
16
|
+
|
|
17
|
+
6. **一主色 + 一强调色;强调色只出现在一处或一类元素上。**——为什么有效:色彩记忆点来自克制,第二种强调色出现画面就"吵"了。
|
|
18
|
+
7. **主色与底色/字色形成明确对立**(明暗对立或冷暖对立二选一)。——为什么有效:对立产生张力,张力产生注视;没对比的画面在信息流里直接隐身。
|
|
19
|
+
8. **底色明度走极端**(极浅或极深),避开中间灰。——为什么有效:极端的明度选择让画面有"立场",中间灰最安全也最容易被滑过。
|
|
20
|
+
9. **情绪色与题材匹配**(科技/活力/阅读感各有对应的色彩情绪)。——为什么有效:读者在读字之前,先被颜色"说服"一半。
|
|
21
|
+
|
|
22
|
+
## 三、构图:先有动线,再摆元素
|
|
23
|
+
|
|
24
|
+
10. **先定一条主阅读动线,再摆元素;全图只允许一条。**——为什么有效:眼睛需要被引导,没有动线的画面信息是散的,3 秒内形不成记忆。
|
|
25
|
+
11. **文字区与视觉主体分区明确、互不遮挡。**——为什么有效:字被挡=信息丢失;分区让大脑一次只处理一类信息,认知负荷最低。
|
|
26
|
+
12. **留白是设计元素,不是"没画完"。**——为什么有效:留白制造对比、托出主体;满版无呼吸的画面在小图下糊成一团。
|
|
27
|
+
13. **每张图必须有一个记忆点元素**(形象、数字、符号、质感四选一)。——为什么有效:人记不住"一张好看的图",只记得住一个具体的"东西"。
|
|
28
|
+
|
|
29
|
+
## 四、信息层级:3 秒能读到什么
|
|
30
|
+
|
|
31
|
+
14. **3 秒测试:遮住细节,3 秒内能说出"这是什么、为什么值得点"。**——为什么有效:封面的唯一 KPI 是点击率,3 秒读不懂=设计失败。
|
|
32
|
+
15. **信息分层、各司其职:钩子(为什么停)→ 主题(这是什么)→ 背书(凭什么信)。**——为什么有效:对应读者"被吸引→懂主题→信可信"的决策链,缺一层就断一环。
|
|
33
|
+
16. **背书层只给"点击理由"**(数据、筛选口径、作者身份三选一)。——为什么有效:标题负责"是什么",背书负责"凭什么信你",分工不清两头都弱。
|
|
34
|
+
17. **元素总数 ≤5。**——为什么有效:每多一个元素,视觉权重就被稀释一分;克制是冲击力的另一面。
|
|
35
|
+
|
|
36
|
+
## 五、质感:不单调的来源
|
|
37
|
+
|
|
38
|
+
18. **纯色底必须配一种背景质感**(纸纹/噪点/光影渐变/细微纹理四选一)。——为什么有效:AI 生成的纯色底最容易显"塑料感",一层细微质感立刻拉开与模板图的差距。
|
|
39
|
+
19. **质感只做背景层,不进文字区。**——为什么有效:质感是氛围组,进了文字区就是噪音;克制使用才"高级"。
|
|
40
|
+
20. **保留一处手工感/真实感细节**(笔触、纸纹、真实小物件、自然光影四选一)。——为什么有效:AI 图最缺的是"人味",一个不完美的细节让画面可信度上升。
|
|
41
|
+
|
|
42
|
+
## 六、保守陷阱清单(前几轮样张犯过的错)
|
|
43
|
+
|
|
44
|
+
| # | 保守错误 | 纠正方向 |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 1 | 标题太小(字高 <1/5 画面) | 先定标题字高 ≥1/4,再摆其他元素;标题是视觉重心,不是配角 |
|
|
47
|
+
| 2 | 对比太弱(灰底灰字、强调色饱和度不足) | 字色底色明度差拉满;强调色敢用高饱和,但只用一处 |
|
|
48
|
+
| 3 | 画面太平(元素平均用力、无重心、无动线) | 先定一条主阅读动线和一个最大元素,其他全部让路 |
|
|
49
|
+
| 4 | 元素太多太碎(>5 个、装饰无节制) | 每加一个元素就问"删掉它会损失什么",答不上来就删 |
|
|
50
|
+
| 5 | 数字不敢放大(数据藏在角落小字里) | 真实数字是天然钩子,值得给最大字号或最跳的颜色(只给一处) |
|
|
51
|
+
| 6 | 质感不敢加(纯色底一片死平) | 至少加一层纸纹/噪点/光影,放在背景层 |
|
|
52
|
+
| 7 | 情绪不敢给(断言、感叹全磨平) | 在标题或背书层保留一处情绪支点(断言/感叹/反问三选一),只一处 |
|
|
53
|
+
| 8 | 配色求稳(全用安全中性色) | 主色敢选有情绪的颜色;要克制的是"颜色数量",不是"颜色性格" |
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
Full lifecycle for WeChat articles: delivery package, review & rewrite, three quality gates, status sync, WeChat inline typography, and publish checklist.
|
|
6
6
|
|
|
7
|
+
- Version: **v0.1.0** (same tag as `@topmindspace/tms-skills@0.3.6`)
|
|
8
|
+
|
|
7
9
|
## Install
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -33,6 +35,52 @@ python3 scripts/sync-status.py --set 定稿 <package> --apply
|
|
|
33
35
|
|
|
34
36
|
Scripts use Python stdlib only — zero dependencies.
|
|
35
37
|
|
|
38
|
+
## Minimal example
|
|
39
|
+
|
|
40
|
+
Input `demo.md`:
|
|
41
|
+
|
|
42
|
+
# Title
|
|
43
|
+
|
|
44
|
+
Opening hook paragraph.
|
|
45
|
+
|
|
46
|
+
## Chapter One
|
|
47
|
+
|
|
48
|
+
Body text with **emphasis**.
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# first drop a real image at images/a.png next to demo.md (missing files land in the
|
|
54
|
+
# checklist as "not embedded" and will be lost on paste)
|
|
55
|
+
mkdir -p images && cp /path/to/your-image.png images/a.png
|
|
56
|
+
python3 scripts/md2wechat.py --input demo.md --out-dir demo --slug demo --embed-images
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Output `demo/demo-公众号版.html` (open in a browser → click "复制正文" → paste into the WeChat editor):
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<!-- h2 auto-numbered; closing chapters like "总结" get ∞ -->
|
|
63
|
+
<h2 ...><span ...>01</span>Chapter One</h2>
|
|
64
|
+
<!-- images inlined as base64, pasted along with the text -->
|
|
65
|
+
<img src="data:image/png;base64,iVBORw0KGgo..." ...>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Also generated: `demo/图片上传清单.md` — the upload checklist for images, mermaid diagrams, and reference links.
|
|
69
|
+
|
|
70
|
+
## md2wechat parameters
|
|
71
|
+
|
|
72
|
+
| Flag | Description |
|
|
73
|
+
|------|-------------|
|
|
74
|
+
| `--input` / `--out-dir` / `--slug` | Required: input md, output dir, filename slug |
|
|
75
|
+
| `--embed-images` | Inline images as base64 (mandatory, or pasted images go missing) |
|
|
76
|
+
| `--theme` | Theme id / Chinese name / JSON path, or `genre:<topic>` for auto-pick; `--list-themes` shows all |
|
|
77
|
+
| `--link-mode` | Link rendering: `footnote` (default: superscript `[n]` + end-of-article "参考链接") / `inline` (label normal, URL gray: `文字(url)`) / `note` (whole block gray small text: `文字(url)`) |
|
|
78
|
+
| `--asset-root` | Asset root dir, resolves `../assets/`-style image paths in the draft |
|
|
79
|
+
| `--no-toc` | Skip the auto-inserted "本文看点" reading guide |
|
|
80
|
+
| `--signature` / `--author` / `--author-bio` | Closing signature: `auto` (default, skipped if the draft has one) / `on` / `off`, name and bio |
|
|
81
|
+
| `--no-pangu` | Disable automatic CJK/Latin spacing |
|
|
82
|
+
| `--render-mermaid` | Render mermaid to PNG when mmdc is available |
|
|
83
|
+
|
|
36
84
|
## Three paths
|
|
37
85
|
|
|
38
86
|
- **forward**: draft → WeChat article (review & rewrite)
|
|
@@ -53,7 +101,7 @@ Facts (first-hand sources) / logic (structural consistency) / copy (de-AI-flavor
|
|
|
53
101
|
The following skills live **outside this repo** (usually provided by the user's local workbuddy environment). Missing ones degrade or disable the corresponding capability; all scripts in this repo still work fully:
|
|
54
102
|
|
|
55
103
|
- `humanizer-zh`: fidelity boundaries for Chinese de-AI-flavor; without it the "de-AI-flavor only, no typesetting" path is unavailable.
|
|
56
|
-
- `qu-aiwei-zh`: Chinese de-AI-flavor scan targeting; `scripts/scan_ai_flavor.py` shares its origin and can substitute when missing
|
|
104
|
+
- `qu-aiwei-zh`: Chinese de-AI-flavor scan targeting; `scripts/scan_ai_flavor.py` shares its origin and can substitute when missing.
|
|
57
105
|
|
|
58
106
|
## Development
|
|
59
107
|
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
公众号文章全生命周期:交付包、审校改写、质量三关、状态同步、微信内联排版与发布清单。
|
|
6
6
|
|
|
7
|
+
- 版本:**v0.1.0**(与 `@topmindspace/tms-skills@0.3.6` 同 tag)
|
|
8
|
+
|
|
7
9
|
## 安装
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -33,6 +35,51 @@ python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
|
33
35
|
|
|
34
36
|
脚本纯 Python 标准库,零依赖。
|
|
35
37
|
|
|
38
|
+
## 最小示例
|
|
39
|
+
|
|
40
|
+
输入 `demo.md`:
|
|
41
|
+
|
|
42
|
+
# 标题
|
|
43
|
+
|
|
44
|
+
开头钩子段落。
|
|
45
|
+
|
|
46
|
+
## 第一章
|
|
47
|
+
|
|
48
|
+
正文文字,**重点**加粗。
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# 先在 demo.md 同级放一张真实图片到 images/a.png(缺图会进"未内嵌"清单,粘贴后丢图)
|
|
54
|
+
mkdir -p images && cp /path/to/你的图.png images/a.png
|
|
55
|
+
python3 scripts/md2wechat.py --input demo.md --out-dir demo --slug demo --embed-images
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
输出 `demo/demo-公众号版.html`(浏览器打开 → 点「复制正文」→ 粘贴到公众号后台):
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<!-- 二级标题自动编号;"总结"类末章编号为 ∞ -->
|
|
62
|
+
<h2 ...><span ...>01</span>第一章</h2>
|
|
63
|
+
<!-- 图片 base64 内嵌,粘贴即带图 -->
|
|
64
|
+
<img src="data:image/png;base64,iVBORw0KGgo..." ...>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
附带 `demo/图片上传清单.md`:图片 / mermaid 图表 / 参考链接的上传与核对清单。
|
|
68
|
+
|
|
69
|
+
## md2wechat 参数
|
|
70
|
+
|
|
71
|
+
| 参数 | 说明 |
|
|
72
|
+
|------|------|
|
|
73
|
+
| `--input` / `--out-dir` / `--slug` | 必填:输入 md、输出目录、文件名标识 |
|
|
74
|
+
| `--embed-images` | 图片 base64 内嵌(必加,否则粘贴丢图) |
|
|
75
|
+
| `--theme` | 主题标识 / 中文名 / JSON 路径,或 `genre:题材` 按题材自动选;`--list-themes` 查看全部 |
|
|
76
|
+
| `--link-mode` | 外链形态:`footnote`(默认:正文上标 `[n]` + 文末「参考链接」)/ `inline`(文字正常、URL 灰小字:`文字(url)`)/ `note`(整块灰小字:`文字(url)`) |
|
|
77
|
+
| `--asset-root` | 素材根目录,用于解析稿中 `../assets/` 形式的图片路径 |
|
|
78
|
+
| `--no-toc` | 不自动插入前言导读 |
|
|
79
|
+
| `--signature` / `--author` / `--author-bio` | 尾部签名区:`auto`(默认,有签名则不重复)/ `on` / `off`,署名与简介 |
|
|
80
|
+
| `--no-pangu` | 关闭中英文自动加空格 |
|
|
81
|
+
| `--render-mermaid` | 有 mmdc 时把 mermaid 渲染成 PNG |
|
|
82
|
+
|
|
36
83
|
## 三条路径
|
|
37
84
|
|
|
38
85
|
- **forward**:底稿 → 公众号(审校改写)
|
|
@@ -54,8 +101,7 @@ python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
|
54
101
|
环境提供)。缺失时对应能力降级/不可用,不影响本仓库脚本的全部功能:
|
|
55
102
|
|
|
56
103
|
- `humanizer-zh`:中文去 AI 味的保真边界;缺失时「只去 AI 味不排版」路径不可用。
|
|
57
|
-
- `qu-aiwei-zh`:中文去 AI 味扫描定位;`scripts/scan_ai_flavor.py`
|
|
58
|
-
缺失时可用仓库内脚本替代,扫描定位能力降级。
|
|
104
|
+
- `qu-aiwei-zh`:中文去 AI 味扫描定位;`scripts/scan_ai_flavor.py` 与其同源,缺失时可用仓库内脚本替代。
|
|
59
105
|
|
|
60
106
|
## 开发
|
|
61
107
|
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: topmind-wechat-post
|
|
3
3
|
version: 0.1.0
|
|
4
|
-
description: "管一篇公众号文章从选题/底稿到发布的完整生命周期:交付包搭建、审校改写、质量三关(事实/逻辑/去AI味)、状态同步、微信内联排版与发布清单。Use when 写公众号、公众号排版、公众号定稿、发公众号。Do NOT use for
|
|
4
|
+
description: "管一篇公众号文章从选题/底稿到发布的完整生命周期:交付包搭建、审校改写、质量三关(事实/逻辑/去AI味)、状态同步、微信内联排版与发布清单。Use when 写公众号、公众号排版、公众号定稿、发公众号。Do NOT use for 只改错别字、小红书/知乎、纯网页发布、封面配图(→topmind-cover)、X 长文(→topmind-x-article)。"
|
|
5
5
|
action_category: write
|
|
6
6
|
triggers:
|
|
7
7
|
- 公众号
|
|
8
8
|
- 微信排版
|
|
9
|
+
- 微信编辑器
|
|
9
10
|
- 公众号排版
|
|
10
11
|
- 公众号稿
|
|
11
12
|
- 排版这篇文章
|
|
13
|
+
- 粘贴到公众号
|
|
12
14
|
- 定稿
|
|
13
15
|
- 发公众号
|
|
14
16
|
- 公众号交付
|
|
17
|
+
- 状态同步
|
|
15
18
|
- wechat
|
|
16
19
|
- mp format
|
|
17
20
|
triggers_cn:
|
|
@@ -26,7 +29,7 @@ updated: 2026-09-29
|
|
|
26
29
|
|
|
27
30
|
# topmind-wechat-post · 公众号创作技能
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
管一篇公众号文章从选题/底稿到发布清单的完整生命周期。
|
|
30
33
|
|
|
31
34
|
```
|
|
32
35
|
选题/底稿 → 创作 → 质量三关 → 定稿(状态+目录) → 排版 → 发布清单 →(可选)回推 notes
|
|
@@ -52,18 +55,17 @@ export TOPMIND_WORKSPACE=/path/to/workspace # 推荐
|
|
|
52
55
|
python3 scripts/new-article.py --slug demo --title "标题" --direction reverse
|
|
53
56
|
python3 scripts/lint-wechat.py --input <包>/公众号稿.md --fix
|
|
54
57
|
python3 scripts/scan_ai_flavor.py <包>/公众号稿.md # 目标 ≥85
|
|
55
|
-
python3 scripts/md2wechat.py --input <包>/公众号稿.md --out-dir <包> --slug demo
|
|
56
|
-
--asset-root <素材根> --embed-images
|
|
58
|
+
python3 scripts/md2wechat.py --input <包>/公众号稿.md --out-dir <包> --slug demo --embed-images
|
|
57
59
|
python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
58
60
|
```
|
|
59
61
|
|
|
60
|
-
细节见
|
|
62
|
+
细节见 `references/workflow.md` · `references/known-pits.md`。
|
|
61
63
|
|
|
62
64
|
## 路径默认
|
|
63
65
|
|
|
64
66
|
| 用途 | 解析 |
|
|
65
67
|
|------|------|
|
|
66
|
-
| 交付包根 | `--base` → `TOPMIND_WECHAT_BASE` → `{ws}/40
|
|
68
|
+
| 交付包根 | `--base` → `TOPMIND_WECHAT_BASE` → `{ws}/40-创作/<当年>-公众号`(如 2026-公众号)或 `{ws}/20-专题/<当年>-公众号` |
|
|
67
69
|
| 工作区 | `TOPMIND_WORKSPACE` |
|
|
68
70
|
| 底稿/回推 | `--topstream` → `TOPSTREAM_ROOT` → 可选;不存在则跳过 notes 校验 |
|
|
69
71
|
| 终稿交付 | 可 `save-output` 拷贝到 role:delivery(`88-交付/`),包仍留在创作类专题 |
|
|
@@ -88,13 +90,9 @@ python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
|
88
90
|
|
|
89
91
|
### 站外拉取(转载整合 / 在线精选站)
|
|
90
92
|
|
|
91
|
-
源不在本工作区、也不在 topstream `notes/` 时,**仍落 `reverse` + `target_file: pending`**。
|
|
93
|
+
源不在本工作区、也不在 topstream `notes/` 时,**仍落 `reverse` + `target_file: pending`**。
|
|
92
94
|
**不要用 `forward`**:它要求 `source_file` 以 `notes/` 开头且文件真实存在,站外源必然过不了 `sync-mapping.py`。
|
|
93
95
|
|
|
94
|
-
```bash
|
|
95
|
-
python3 scripts/new-article.py --slug <中文短名> --title "<标题>" --direction reverse
|
|
96
|
-
```
|
|
97
|
-
|
|
98
96
|
取源坑(RSC 载荷、图片 hash 映射、`md5` 去重、截图裁切)见 `references/workflow.md`「站外拉取取源注意」;差异与口径写进包内 `README.md`。
|
|
99
97
|
|
|
100
98
|
**回推纪律**:notes 保持纯 Markdown(`:::` 容器 / 徽章 / `==高亮==` 只进公众号稿);回推**务必带 `--assets`**(否则 GitHub 上 `images/` 死链)。命令串见 `references/workflow.md`「收尾」。
|
|
@@ -131,16 +129,14 @@ python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
|
131
129
|
|
|
132
130
|
### 关 1 · 事实
|
|
133
131
|
|
|
134
|
-
- 承重数字回**一手来源**;厂商口径 / 据报道
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
- 外部工具改过的稿:**先核数字再动文字**;「比值对但绝对值错」= 全段重核
|
|
132
|
+
- 承重数字回**一手来源**;厂商口径 / 据报道 分开写;查不到一手来源的传闻**删**
|
|
133
|
+
- 改稿续写:正文已有数字**回源重核**(上一轮文本最不可信)
|
|
134
|
+
- 多口径显式拆开;表格从数据源生成,禁止手抄
|
|
135
|
+
- 外部工具改过的稿:**先核数字再动文字**;「比值对但绝对值错」= 全段重核
|
|
139
136
|
|
|
140
137
|
### 关 2 · 逻辑
|
|
141
138
|
|
|
142
|
-
-
|
|
143
|
-
- 结构前后一致;同一事实多处同值
|
|
139
|
+
- 单边结论旁配反方证据;结构前后一致;同一事实多处同值
|
|
144
140
|
|
|
145
141
|
### 关 3 · 文字(去 AI 味)
|
|
146
142
|
|
|
@@ -153,17 +149,17 @@ python3 scripts/scan_ai_flavor.py <包>/公众号稿.md # ≥85(人话)
|
|
|
153
149
|
- **口语化 ≠ 有人味**:删社交垫词(元叙述、空转过渡、姿态句)
|
|
154
150
|
- 判据:**这句话删掉之后,读者少知道了什么?**
|
|
155
151
|
|
|
156
|
-
详见
|
|
152
|
+
详见 `references/writing-quality.md`。
|
|
157
153
|
|
|
158
154
|
## 排版要点(写稿时)
|
|
159
155
|
|
|
160
|
-
- 开头 150 字内钩子;单段 ≤110 字;列表项 ≤70 字
|
|
161
|
-
- 二级标题不手写序号(排版层自动生成);容器:`::: stat|pull|note|tip|warn|danger|dialogue`
|
|
162
|
-
- **`::: stat` 内必须是 `数值 | 说明` 管道行**,否则静默丢弃
|
|
163
|
-
- 评测稿:**图承担数据,正文只解读**;健康密度 **300–450 字/图**
|
|
164
|
-
- 个股用词红线:禁用 买入/推荐/目标价…;文末投资声明
|
|
156
|
+
- 开头 150 字内钩子;单段 ≤110 字;列表项 ≤70 字
|
|
157
|
+
- 二级标题不手写序号(排版层自动生成);容器:`::: stat|pull|note|tip|warn|danger|dialogue`
|
|
158
|
+
- **`::: stat` 内必须是 `数值 | 说明` 管道行**,否则静默丢弃
|
|
159
|
+
- 评测稿:**图承担数据,正文只解读**;健康密度 **300–450 字/图**
|
|
160
|
+
- 个股用词红线:禁用 买入/推荐/目标价…;文末投资声明
|
|
165
161
|
|
|
166
|
-
|
|
162
|
+
更多:`references/typography-rules.md` · `references/wechat-constraints.md`。
|
|
167
163
|
|
|
168
164
|
## 排版与导出(必读)
|
|
169
165
|
|
|
@@ -176,24 +172,26 @@ python3 scripts/md2wechat.py \
|
|
|
176
172
|
|
|
177
173
|
1. **永远 `--embed-images`**,否则粘贴丢图(相对路径被序列化成 file://)
|
|
178
174
|
2. **图片 basename 铁律**:正文引用名 = `images/` 目标名;禁止两套同名图共处
|
|
179
|
-
3.
|
|
175
|
+
3. 行内图片(段落里的 ``)同样走图片管线:复制到 `images/`、进上传清单、可被内嵌
|
|
176
|
+
4. 外链三种形态:默认 `footnote`(正文上标 `[n]` + 文末「参考链接」);`--link-mode inline`(文字正常、URL 灰小字);`--link-mode note`(整块灰小字,标签与 URL 同降)
|
|
177
|
+
5. 合规自检出现 `✗` 改生成器,不要手改 HTML
|
|
180
178
|
|
|
181
|
-
|
|
179
|
+
坑清单:`references/known-pits.md`。
|
|
182
180
|
|
|
183
181
|
## 主题
|
|
184
182
|
|
|
185
|
-
| 文件 | 风格 |
|
|
183
|
+
| 文件 | 风格 | 适用(= 各主题 genre 声明) |
|
|
186
184
|
|------|------|------|
|
|
187
|
-
| `assets/themes/minimal-ink.json`(默认) | 黑白灰 + 砖红 |
|
|
188
|
-
| `assets/themes/tech-blue.json` | 科技蓝 |
|
|
189
|
-
| `assets/themes/newsprint.json` | 报纸衬线 |
|
|
190
|
-
| `assets/themes/graphite.json` | 石墨克制 |
|
|
191
|
-
| `assets/themes/amber-review.json` | 琥珀评测 |
|
|
185
|
+
| `assets/themes/minimal-ink.json`(默认) | 黑白灰 + 砖红 | 观点 / 深度分析 / 随笔 |
|
|
186
|
+
| `assets/themes/tech-blue.json` | 科技蓝 | 教程 / 实操 / 工具测评 |
|
|
187
|
+
| `assets/themes/newsprint.json` | 报纸衬线 | 复盘 / 特稿 / 行业观察 / 长文 |
|
|
188
|
+
| `assets/themes/graphite.json` | 石墨克制 | 技术说明 / 专业评论 / 方法 / 原理 |
|
|
189
|
+
| `assets/themes/amber-review.json` | 琥珀评测 | 评测 / 模型评测 / 数据对比 / 榜单 / 速览 |
|
|
192
190
|
|
|
193
|
-
`md2wechat.py --list-themes` 看全部;`--theme genre:评测` 可按题材自动选。
|
|
194
|
-
渲染规格见
|
|
191
|
+
`md2wechat.py --list-themes` 看全部;`--theme genre:评测` 可按题材自动选。
|
|
192
|
+
渲染规格见 `references/element-spec.md` · 主题映射见 `references/theme-map.md`。
|
|
195
193
|
|
|
196
|
-
**平台红线速查**(详见
|
|
194
|
+
**平台红线速查**(详见 `references/wechat-constraints.md`):禁 `div`/`pre`/`h1`/`figure`/`thead`/flex/float/gradient/shadow;表格 `table-layout` 不写 fixed;列数 ≥4 转卡片。
|
|
197
195
|
|
|
198
196
|
## 与 Desktop「公众号创作」
|
|
199
197
|
|
|
@@ -202,7 +200,7 @@ python3 scripts/md2wechat.py \
|
|
|
202
200
|
## 外部依赖
|
|
203
201
|
|
|
204
202
|
以下技能**不在本仓库**(一般随用户侧 workbuddy 环境提供);缺失时对应路由能力不可用,
|
|
205
|
-
|
|
203
|
+
本仓库脚本功能不受影响:
|
|
206
204
|
|
|
207
205
|
- `humanizer-zh`:中文去 AI 味的保真边界(「只去 AI 味不排版」路径用)。
|
|
208
206
|
- `qu-aiwei-zh`:中文去 AI 味扫描定位;本仓库 `scan_ai_flavor.py` 与其同源,
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| `### 标题` | `<h3 style="16px/600">` | S | |
|
|
23
23
|
| `#### 标题` | `<h4 style="15px/600">` | S | |
|
|
24
24
|
| 段落 | `<p style="margin:0 0 {para_gap};line-height:{line_height};letter-spacing:0.5px;text-align:left;word-break:break-word">` | S | `text-align` 只允许 left/center/right |
|
|
25
|
-
| `---` | `<
|
|
25
|
+
| `---` | 嵌套 `<section>`:外层 `margin:32px 0`,内层 `<section style="width:12%;height:2px;background:accent;margin:0 auto">` | S | 宽度用百分比,块级 `margin:0 auto` 居中,**不用 `display:inline-block`**:那是生成器自己的输出,用户无从修复,inline-block 会在合规自检里留下一条洗不掉的 WARN |
|
|
26
26
|
| `> 引用` | `<section>` + `background:surface` + `border-left:3px solid accent` | S | **不用 `<blockquote>`**:微信有原生引用样式会覆盖我们的配色 |
|
|
27
27
|
| `- 项` / `1. 项` | `<ul>`/`<ol>` + `<li>`,支持嵌套 | S | 圆点颜色取 accent |
|
|
28
28
|
| ```` ```lang ```` | `<section background:code_bg>` → 语言标签 `<section>` → 代码体 `<section style="white-space:pre-wrap;word-break:break-all">` | S | **不用 `<pre>`**;详见「代码块」 |
|
|
@@ -61,12 +61,11 @@ JSON 示例行宽压到 ~55 字符;真实节选注明「节选」,字段值
|
|
|
61
61
|
|
|
62
62
|
## 10. qu-aiwei 误报别改坏
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
- 专有名词「复盘」→ 不改;动词套话 → 改
|
|
64
|
+
「排比三段式」可能误报数据变化(从 A 到 B)→ **保留**;专有名词「复盘」→ 不改。
|
|
66
65
|
|
|
67
66
|
## 11. 满分仍「太 AI」
|
|
68
67
|
|
|
69
|
-
词面 100 分只证明无套话。再查四症状:段末金句癖 / 节奏过分整齐 / 没有「我」与场景 /
|
|
68
|
+
词面 100 分只证明无套话。再查四症状:段末金句癖 / 节奏过分整齐 / 没有「我」与场景 / 报告体标注。改写手法见 `writing-quality.md`。
|
|
70
69
|
|
|
71
70
|
## 12. 加「人味」用力过猛
|
|
72
71
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
2. **段落切分**:单段 ≤ 110 字(约 4 行手机屏)。长段按语义断点拆开,不要机械等分。
|
|
9
9
|
3. **小标题不手写序号**:写稿时保持二级标题为纯文本,序号由排版层按 `h2_style` 自动生成(规则见 `element-spec.md`「章节编号」)。主题换编号样式时无需手改,读者仍能感知进度。
|
|
10
10
|
4. **列表项 ≤ 70 字**:超长列表项改成「加粗小标题 + 短说明」的段落组。
|
|
11
|
-
5.
|
|
11
|
+
5. **重点加粗**:`加粗`是全篇最强的视觉锚点(锚点层),只留给结论句和关键数据,**全文 ≤5 处**(`lint-wechat.py` 会判);其余关键词标记改用 `++下划线++`(标记层,每段 1–3 个)。层级纪律见 `element-spec.md`「视觉层级」。
|
|
12
12
|
6. **长句拆短**:单句 > 45 字且有逗号堆叠时,拆成两句。
|
|
13
13
|
7. **图注统一**:`*▲ 图 N:说明*`,图注要说出「看什么」,不要只重复图片名。
|
|
14
14
|
8. **外链处理**:保留可点性无意义,改为「来源:XXX(URL)」的灰色小字或直接写机构名。
|
|
@@ -86,9 +86,9 @@ python3 scripts/md2wechat.py --input <包>/公众号稿.md --out-dir <包> \
|
|
|
86
86
|
--asset-names "00-封面.jpg=01-cover.jpg,…" # 仓库约定 ASCII 图名
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
仓库图路径约定:`notes/<slug>.md` 引用 `../assets/images/<slug>/NN-name.png`。
|
|
90
|
-
脚本只降级转换 + 写 notes + 搬图;**不自动改** README 索引 / `docs/公众号映射.md` / frontmatter(防索引漂移)。手工完成后再把 `target_file` 改实际路径。
|
|
91
|
-
3. 提醒:外链只能进「阅读原文」;图已 base64 内嵌,占位符按清单补传
|
|
89
|
+
仓库图路径约定:`notes/<slug>.md` 引用 `../assets/images/<slug>/NN-name.png`。
|
|
90
|
+
脚本只降级转换 + 写 notes + 搬图;**不自动改** README 索引 / `docs/公众号映射.md` / frontmatter(防索引漂移)。手工完成后再把 `target_file` 改实际路径。
|
|
91
|
+
3. 提醒:外链只能进「阅读原文」;图已 base64 内嵌,占位符按清单补传
|
|
92
92
|
4. 需要进交付层时:`save-output` 拷贝终稿到 `88-交付/`(`YYYY-MM-DD-描述.ext`)
|
|
93
93
|
|
|
94
94
|
## Desktop
|
|
@@ -76,51 +76,27 @@
|
|
|
76
76
|
python3 scripts/scan_ai_flavor.py <稿>.md # 技能自带,与 qu-aiwei-zh 同源
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
**删套话**:值得注意 / 值得记录 / 值得单独强调 / 本质上 / 事实上 / 意味着 / 由此可见 / 不难看出 / 换句话说 / 换言之 / 殊途同归 / 显而易见 / 众所周知 / 更进一步说 → 改成直述(说细节是什么,而不是"值得记住")。
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
改成直述。例:「最值得个人记住的其实是复盘里的一个细节」→「对个人最有参考价值的其实是复盘里的一个细节」→ 更好的是直接说细节是什么。
|
|
84
|
-
|
|
85
|
-
### 删黑话
|
|
86
|
-
|
|
87
|
-
护城河、生态位、闭环、打法、颗粒度、赋能、沉淀、赛道、倒逼、组合拳、卡位、底层逻辑
|
|
88
|
-
|
|
89
|
-
换法:护城河→优势;闭环→这一轮/整条链;打法→做法;赛道→方向;沉淀→积累/形成。
|
|
81
|
+
**删黑话**:护城河→优势;生态位→定位;闭环→这一轮/整条链;打法→做法;赛道→方向;沉淀→积累/形成;赋能→给;颗粒度→粒度;倒逼→促使;组合拳→一套做法;卡位→占位;底层逻辑→深层原因。
|
|
90
82
|
|
|
91
83
|
**不要误伤专业用法**:「口径」(官方口径/社区口径)、「对齐」(alignment)、「收敛」(数学语义)都是正常的。
|
|
92
84
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
`**能搬走的数据,才是真正属于你的数据。**` → `能搬走的数据,才是真正属于你的数据。`
|
|
96
|
-
|
|
97
|
-
删完套话却满篇加粗金句,等于从「AI 体」变成「新闻通稿」——同样没人味。
|
|
85
|
+
**降调段末金句**:删完套话却满篇加粗金句,等于从「AI 体」变成「新闻通稿」——同样没人味。
|
|
98
86
|
|
|
99
|
-
|
|
87
|
+
**保留的东西**:有信息量的「不是 A 而是 B」反转保留;三段排比内容扎实可留,硬凑的砍到两项或四项。
|
|
100
88
|
|
|
101
|
-
|
|
102
|
-
- **三段排比若内容扎实可留**,硬凑的才砍到两项或四项
|
|
103
|
-
|
|
104
|
-
### 扫描器的两个误报(别照着改坏)
|
|
105
|
-
|
|
106
|
-
`qu-aiwei-zh` 会把两类东西误判成 AI 味,改之前先自己看一遍原文:
|
|
107
|
-
|
|
108
|
-
- **「排比三段式」误报数据陈述**:`从 15 个精简到 2 个,准确率从 80% 升到…`、`从发布、被审计、更正到上线` 是时间/数据变化,不是修辞排比,**保留**。
|
|
109
|
-
- **「复盘」误报专有名词**:「37signals 退出云复盘」里的「复盘」是标题/专名,不改;只有「我们来复盘一下」这种动词套话才改。
|
|
110
|
-
|
|
111
|
-
判断优先级:**先看语义是不是真排比/真套话,再决定删不删**,不要按扫描器命中的字面动手。
|
|
89
|
+
**扫描器的两个误报(别照着改坏)**:「排比三段式」误报数据陈述(`从 15 个精简到 2 个,准确率从 80% 升到…`、`从发布、被审计、更正到上线` 是时间/数据变化,**保留**);「复盘」误报专有名词(「37signals 退出云复盘」是专名不改,只有「我们来复盘一下」这种动词套话才改)。**先看语义是不是真排比/真套话,再决定删不删**。
|
|
112
90
|
|
|
113
91
|
### 加人味(只加表达,不加事实)
|
|
114
92
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
⚠️ 这一段说的是**表达方式**。原文没有第一人称、没有数字时,不许靠这一条去补——那正好踩中 `humanizer-zh` 的优先级第 1 条。加声音的手段是句长节奏、设问、括号自注,配合删掉元叙述和教学腔。`humanizer-zh` 里写着同一句话:「用户要求增强个人风格时,用表达方式实现,不编故事。」
|
|
93
|
+
有「我」、有具体场景、有具体数字与人名、有不确定性表达(「其实」「不过」「还在想」)、句子长短交替、有真实细节而不是「很多人」「大多数」。手段是句长节奏、设问、括号自注,配合删掉元叙述和教学腔。
|
|
118
94
|
|
|
119
|
-
|
|
95
|
+
原文没有第一人称、没有数字时,不许靠这一条去补——那正好踩中 `humanizer-zh` 的优先级第 1 条。英文文本才走 `humanizer`:它的取向是 **Add soul**(主动注入个性),与中文改稿的**保真优先**方向相反,别套过来。
|
|
120
96
|
|
|
121
97
|
### 工具纪律
|
|
122
98
|
|
|
123
|
-
|
|
99
|
+
**并行编辑同一文件会互相覆盖**——同一文件的多处修改必须走**单个串行脚本**,改完立刻复核关键字段是否落盘。
|
|
124
100
|
|
|
125
101
|
## 四、改稿红线
|
|
126
102
|
|