@topmindspace/tms-skills 0.3.0 → 0.3.5
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 +186 -0
- package/README.en.md +10 -70
- package/README.md +11 -69
- 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 +12 -8
- package/topmind-cover/README.md +13 -9
- package/topmind-cover/SKILL.md +33 -21
- package/topmind-cover/assets/examples/README.md +16 -19
- 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 +322 -143
- 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 +125 -42
- 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
- package/topmind-cover/assets/examples/big-poster-wechat.png +0 -0
- package/topmind-cover/assets/examples/big-poster.png +0 -0
- package/topmind-cover/assets/examples/cyber-glitch-wechat.png +0 -0
- package/topmind-cover/assets/examples/cyber-glitch.png +0 -0
- package/topmind-cover/assets/examples/guochao-wechat.png +0 -0
- package/topmind-cover/assets/examples/guochao.png +0 -0
- package/topmind-cover/assets/examples/tech-future-wechat.png +0 -0
- package/topmind-cover/assets/examples/tech-future.png +0 -0
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
公众号文章全生命周期:交付包、审校改写、质量三关、状态同步、微信内联排版与发布清单。
|
|
6
6
|
|
|
7
|
+
- 版本:**v0.1.0**(与 `@topmindspace/tms-skills@0.3.5` 同 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
|
|