易海排版技能包(正文版式 + 品牌头尾)
> 读者是模型,不是人。 读完按 §0 → §6 顺序执行,不要跳步。
> 适用账号:易海工程AI(订阅号)。其他账号不要用(风格库不通用)。
> 本包管两件事:① 正文排版(文字 → 合规 HTML)② 套品牌头尾(固定格式资产)。
> 不写稿、不做封面、不推送。
§0 你的第一个动作:先问用户两件事(禁止跳过)
在排版之前必须问。 用户明确说了就直接用;跳过 / 说"都行" / 没说 → 用默认值,
并向用户说明一句即可,不必等确认。
0.1 第一件:排版风格(4 选 1,默认第 1)
| 序号 | 风格 | 主题 ID | 一句话长相 | 什么时候用 |
|---|---|---|---|---|
| 1 | 统一极简 | theme-unified-minimal |
白底,标题带浅蓝底色块 + 左侧 4px 蓝竖条,开头有点题色块 | ★ 默认。除下面几种题材外的绝大多数文章 |
| 2 | 浅蓝科技风 | theme-lightblue-tech |
浅蓝卡片、能力卡、状态条、对比表 | 产品介绍、技术说明、操作指南(要素多、需要卡片承载) |
| 3 | 原生极简·资讯风 | theme-plain-news |
纯白无卡片、蓝标题、纯段落直排 | 政策解读、行业快讯、名人短稿(要快、要像资讯) |
| 4 | 橙黄娱乐风 | theme-orange-entertainment |
暖橙标题 + 金黄下划线、仅 2 处底色块 | 名人趣闻、娱乐热点、吃瓜(要活泼) |
0.2 提问话术(可直接复制发给用户)
排版用哪种?(不说的话默认第 1 种)
1 统一极简 —— 白底,标题带浅蓝色块+左竖条,开头有一句「点题色块」 ★默认
2 浅蓝科技风 —— 浅蓝卡片/对比表,信息密度高
3 原生极简·资讯风 —— 纯白纯段落,最像行业快讯
4 橙黄娱乐风 —— 暖橙+金黄,适合娱乐热点
▸ 也可以在「统一极简」基础上自己描述想要的微调,我先拆要点跟你确认再排。
▸ 无论哪种,两条底线不变:内容顶到屏幕两边;正文字号 16px 为主(15–17px)。
0.3 第二件:署名三人名(每次必问,不得沿用上次)
品牌尾块里有固定三行署名,顺序=编辑 / 校对 / 审核:
署名还是「雨函(编辑)/ Jerry(校对)/ 阿良(审核)」吗?要换请直接给三个名字。
| 情况 | 你的动作 |
|---|---|
| 用户给了三个人名 | 传 --credits "名1,名2,名3" |
| 用户说"照旧/沿用" | 用默认 雨函,Jerry,阿良,并在汇报里写明 |
| 用户没提 | 按默认三人名做,汇报时点出来让用户复核 |
> ❌ 禁止默默沿用上次而不说明——人名是每篇都要过目的项。
> (脚本层面强制:--credits 与 --keep-credits 二者必传其一,都不传会 exit 2。)
0.4 明确禁止
- ❌ 未问排版风格就直接排版(用户跳过则默认风格 1,要说明一句)
- ❌ 署名三人名不问就用(跳过时必须说明"按默认雨函/Jerry/阿良")
- ❌ 一篇文章混用两套风格配色
- ❌ 交付未经校验的 HTML(必须 ERROR=0、半角标点 WARNING=0)
- ❌ 把样式写成外部
<style>、class、id、float、position(微信会全部过滤) - ❌ 文字节点不用
<span leaf="">包裹(最高频致命错误) - ❌ 改品牌头尾的配色/文字/链接(它们是账号视觉资产,见 §4,只换署名人名)
§1 产物规格(缺一不可)
| 产物 | 规格 |
|---|---|
| 正文 HTML | 纯 <section>…</section> 片段,无 <!DOCTYPE>/<html>/<head>/<body> 外壳;<section> 开合差值 = 0 |
| 品牌头尾 | 已套上(fix_rewrap.py 输出 diff=0);头部 banner GIF + 尾部蓝线/署名/三链接/星标 GIF 齐全 |
| 校验 | validate_gzh_html.py:ERROR=0 且 半角标点 WARNING=0 |
| 预览页 | xxx_预览.html(浏览器打开可「复制到公众号」),图片 loaded == total |
| 边界 | 实测所有 P/H2/IMG 落在 L=20 / R=370(390 视口模拟微信容器) |
> 本包的完整交付 = 正文 + 品牌头尾。 套完头尾后的 HTML 可直接交给推送包推草稿箱。
> 若只需看排版效果、暂不套头尾,正文根容器用 padding:0 0 56px(零负 margin)
> ——这与套头尾后的写法一致,套上后不会变形。
§2 微信平台的硬限制(违反即失效)
| 类别 | 规定 |
|---|---|
| ❌ 禁止标签 | <style> <script> <div>、<ul> <ol> <li> |
| ❌ 禁止属性 | class / id、position:fixed/absolute/sticky、float、@media、@keyframes、display:grid、CSS 变量 var(--x)、外部字体 |
| ✅ 必须 | 所有样式内联写在 style 里 |
| ✅ 必须 | 所有文字节点用 <span leaf="">文字</span> 包裹 |
| ✅ 必须 | 中文标点用全角(,。!?:;""''()——……);例外:代码块/URL/英文标识符保持原样 |
| ✅ 可用 | display:flex(有限)、linear-gradient、border-radius、box-shadow、<section>/<p>/<span>/<strong>/<h2>/<img>/<table> |
列表标签特别说明:微信会把每个 <li> 拆两行并重新计数(5 条能编成 1~10)。
一律改用 <p> + 手工标记(无序「• 」、有序「1. 」)。
2.1 全局容器两种合法写法(二选一)
<!-- A. 纯正文稿件(无品牌头尾)→ 负 margin 顶满屏幕 -->
<section style="background-color:#FFFFFF;margin:0 -16px;padding:0 0 1px 0;box-sizing:border-box;width:auto;">
<!-- B. 套品牌头尾(本账号绝大多数情况)→ 零负 margin,改用 padding -->
<section style="padding:0 0 56px;box-sizing:border-box;">
> width 必须写 auto(写 100% 会因负边距横向溢出)。
> 对齐铁律:品牌头尾资产自身没有左右内边距(落在 L=20);正文根容器若加 margin:0 -16px,
> 会比头尾各宽 16px → 观感「两边不对齐」。套头尾时必须用 B。
> 校验器已改为两种版式二选一,不再单一要求负 margin。
2.2 基础约束底线(所有风格通用)
| 约束项 | 取值 |
|---|---|
| 正文字号 | 16px 为主,全部落 15–17px;标题 ≤ 24px,一级章节 18–20px;表格 14px |
| 左右留白 | 两侧不留白,内容顶到屏幕两边。禁止在全局容器/正文段落加左右 padding;仅"带底色/竖线的卡片类"可保留左右 ≤ 12px |
| 行高 | 1.75–1.9 |
| 段落间距 | 14–16px(段段统一) |
| 单段长度 | ≤ 4 行(移动端),超长必须拆 |
| 字面色 | 深灰(#2B2B2B / #3E3E3E 一类),不用纯黑 #000 |
| 关键词下划线 | border-bottom:2px solid <风格色>;font-weight:600;,每段 1~3 处 |
> 判定口诀:两侧零留白、字号 16 为主(15–17)、行高 1.75+、卡片内边距 ≤12px、单段 ≤4 行、不用纯黑。
> 任一条不满足即不合格。
2.3 下划线关键词必须嵌套在 leaf 里(高频 WARNING)
<!-- ✅ 正确 -->
<span leaf="">前半句<span style="border-bottom:2px solid #A8C4DE;font-weight:600;">关键词</span>后半句</span>
<!-- ❌ 错误:三个 span 并列,中间那个不在 leaf 内 -->
<span leaf="">前半句</span><span style="border-bottom:2px solid #A8C4DE;font-weight:600;">关键词</span><span leaf="">后半句</span>
§3 四种风格与组件库
> 排版前必须先读对应主题文件:references/themes/theme-<id>.md,里面有完整组件代码,照抄。
| 序号 | 风格 | 主题文件 | 主色/点缀 | 色块允许范围 |
|---|---|---|---|---|
| 1 | 统一极简(★默认) | theme-unified-minimal.md |
#0A4C86 / 琥珀 #7A5A00 / 绛红 #9F1239 |
仅 h2 标题色块 + 开头点题块;正文零底色零卡片 |
| 2 | 浅蓝科技风 | theme-lightblue-tech.md |
#0B5FA5 / #0EA5E9 / 浅蓝 #EAF3FB |
能力卡、状态条、对比表(卡片类) |
| 3 | 原生极简·资讯风 | theme-plain-news.md |
#3DAAD6 / #1E7FA8 |
禁止卡片、色块;纯段落 |
| 4 | 橙黄娱乐风 | theme-orange-entertainment.md |
#E85D04 / 金黄 #F59E0B |
浅橙底仅限吃瓜引导卡与热点标签行(≤2 处) |
关键词下划线(各风格不同,别混用):风格1 #0A4C86|风格2 #7DD3FC|风格3 #9FD8EC|风格4 #FFC078
3.1 ★ 围一主题:统一极简的骨架(默认风格)
一行话:白底直排,色块只出现在「开头点题块」和「章节标题」上。
[标签行 ■ 一句话导读] ← 无底色,仅颜色+字距
[开头点题块] ← ★ 浅蓝底 #EDF4FB + 4px 主色左竖条(全篇唯一)
正文段落(16px / 1.9)
[01 章节标题] ← 浅蓝底 #EDF4FB + 4px 主色左竖条
正文段落…
[02 章节标题] …
· · · ← 分隔符(居中,琥珀色,字距 6px)
[结语] ← 与章节标题同款
两个提问 + 「评论区聊聊。」
「我是工程AI团队,AI建筑领域的创业者。」
点题块(本风格标配,2026-10-19 新增):位置固定在正文最开头(标签行之后、第一个章节标题之前),
一句到两句,不展开。流量款放最刺人的判断(爆论),关注款放这篇交付的价值承诺。
完整代码见 references/themes/theme-unified-minimal.md 的「3d. 开头点题块」。
3.2 全风格通用的视觉禁令
| ❌ 禁止 | ✅ 替代 | 原因 |
|---|---|---|
| 正文开头的封面卡 / Hero | 直接从 01 章节开始(点题块不算 Hero) | 与草稿标题重复 |
| 蓝色实心按钮(CTA 块) | 左侧色条 + 浅色底的文字引导卡 | 按钮会被误认为可点击 |
| 「点击进入天工先问」蓝色按钮图 | 永远不放 | 已废弃 |
| 结语写文艺标题 | 统一写「结语」 | 账号要求 |
| 深蓝底、反白文字 | 白底 + 彩色点缀 | 深色版已否决 |
| 一套文章混用两套风格配色 | 只用选定风格的变量表 | 视觉一致性 |
固定文案(不得改写):
| 位置 | 文案 |
|---|---|
| 结语标题 | 「结语」(英文标签 ∞ / SUMMARY) |
| 作者签名 | 「我是工程AI团队,AI建筑领域的创业者。」 |
3.3 用户自带风格 / 自定义风格(必须确认,不得静默套用)
| 用户给什么 | 你怎么做 |
|---|---|
| 直接说风格名/参考文章 | 先复述你的理解(主色/底色/字重/组件密度),确认后再排 |
| 截图 / 竞品链接 | 先拆解再确认:报出提取到的主色、底色、字号、留白、组件特征,让用户确认"是不是这个感觉" |
| 只给感觉词("高级一点""像杂志") | 给 2~3 个具体方案(附推荐顺序),用户选定后再排 |
| 要求混搭两套风格 | 明确告知一篇文章只用一套;确需变体则先出样张,确认后固化为新主题文件 |
> ❌ 禁止不确认就凭理解排完全篇;❌ 禁止把临时要求静默写成新默认。
> ✅ 无论多自由,§2.2 基础约束底线 + §3.2 视觉禁令都不可突破。
§4 品牌头尾(固定格式,每篇必套)
品牌头尾是账号视觉资产,与正文风格无关:4 种风格(及用户自定义风格)统一套用同一份头尾,
不要改配色、不要增删元素、不要改链接——只换署名人名。
4.1 头尾长什么样(这就是"固定格式")
头部块(assets/品牌头尾/_ref_head_only.html)——无可见文字,纯图形装饰 + 一张 GIF:
| 元素 | 规格 |
|---|---|
| ① 顶部 banner GIF | 1 张,data-w=568(点名字加关注横幅),居中显示 |
| ② 蓝色竖线 | rgb(95,156,239),1px 宽 × 36px 高 |
| ③ 蓝色横线 | rgb(95,156,239),1px 高,满宽 |
| ④ 黄色方块 | rgb(250,210,45),8×8px 装饰点 |
尾部块(assets/品牌头尾/_ref_tail_only.html)——有固定文字,格式不可动:
① 蓝色横线(1px,满宽)
② 三行署名(居中,15px,颜色 rgb(68,60,60))
编辑 |雨函
校对 |Jerry
审核丨阿良
③ 三行历史文章链接(居中,一行并排,颜色 rgb(87,107,149))
更多AI场景 | 全民营销 | 工程AI事业团队产品与服务手册
④ 加星标 GIF(1 张,imgfileid=100004564)
> ⚠️ 署名格式铁律:编辑、校对与竖线「|」之间有一个半角空格;审核用全角「丨」,两侧无空格。
> 线上实测渲染即如此——竖线前的空隙是真实空格,竖线后没有空格;审核行两侧的大空隙只是
> 「丨」字自带边距,不要"修正"它。fix_rewrap --credits 只替换人名、原样保留空格,
> 不要手写署名行。
4.2 尾部三个历史文章链接(不要改动、不要增删)
| 链接文字 | href |
|---|---|
| 更多AI场景 | …mid=2247488216&idx=1&sn=c80021bb649ef4007a857c9d873f8405… |
| 全民营销 | …mid=2247488428&idx=1&sn=9d516db558fc55a55e5d3fab69fd86f2… |
| 工程AI事业团队产品与服务手册 | …mid=2247490062&idx=1&sn=c660b0938467ec14145fe3093f857c06… |
> 完整 URL 见 _ref_tail_only.html(__biz=MzY5NDEzMjU5Ng==)。
> 三个链接以线上草稿逐字核对过。若未来需替换:先从线上最新草稿实抓 <a> 原文,再改尾块文件,
> 不要手写 URL。
4.3 套用公式与执行命令
新文件 = HEAD + 正文 + "</section>" × 3 + TAIL
中间必须补 3 个闭合标签:头部块末尾嵌套深度 6(<section> 比 </section> 多 6),
尾部块起点深度 3(少 3),补 3 个正好对齐。
$PY "$SK/scripts/fix_rewrap.py" --dir <文章目录> \
--head "$SK/assets/品牌头尾/_ref_head_only.html" \
--tail "$SK/assets/品牌头尾/_ref_tail_only.html" \
--credits "雨函,Jerry,阿良"
| 参数 | 说明 |
|---|---|
--credits "A,B,C" |
§0.3 确认的三人名,顺序=编辑,校对,审核 |
--keep-credits |
仅当用户明确说"沿用参考尾块现有人名"时才可加 |
--dry-run |
只检查,不写盘 |
--no-backup |
不生成 .bak 备份 |
| 末尾追加文件名 | 省略则处理 --dir 下所有 .html |
--credits与--keep-credits都不传 → 脚本直接 exit 2。这是有意设计:人名每次必须确认。- 脚本自动完成:剥旧头尾 → 清理微信原生冗余 → 替换署名人名 → 套新头尾 → 校验平衡 → 查叠加。
- 幂等:重复跑同一文件不会叠出两层。
clean 会清掉(微信编辑器冗余,与渲染无关):class="…"、data-page-node-id /
data-pm-slice / data-nest-level、1px 占位 <svg viewbox="0 0 1 1">、<mp-style-type>。
> ⚠️ 保留不动:data-src / data-imgfileid / data-type / data-w / data-ratio / data-aistatus
> ——这些是图片必需属性,清掉图就不显示(微信正文图存的是 data-src)。
> ⚠️ 清理规则一律按结构匹配,不要写成精确字符串(微信加的 data-* 属性随版本变化)。
4.4 判定标准
输出 [OK] <文件名> 首次套用/重装完成(diff=0, …) 才算通过。出现 FAIL 一律不得交付:
| 报错 | 含义与处理 |
|---|---|
<section> 不平衡,差值 -6 |
本地文件还套着旧版头尾,新尾块剥不掉。以线上最新草稿为准,不要强改本地快照;需重推就从草稿箱拉最新正文再套 |
| 是完整 HTML 文档 | 带 <!DOCTYPE>/<html> 外壳,是预览页不是推文产物,不要对它套头尾 |
| 头块×N / 尾块×N 疑似叠加 | 匹配失败导致重复套用,停止操作并检查头尾文件是否被改动 |
| 未指定署名人名(exit 2) | 回到 §0.3,向用户要三个名字 |
> ⚠️ 正文被重写过时必须复核作者签名:套完头尾后
> grep -c "我是工程AI团队,AI建筑领域的创业者。" <文件> 应为 1。
> 重写正文极易把这句签名弄丢。
4.5 头尾 banner 图要居中(★ 容器 text-align:center + 图 max-width:100%)
<!-- 头块 -->
<section style="text-align: center;"><span leaf=""><img style="max-width:100%;height:auto;" … /></span></section>
<!-- 尾块 -->
<section style="text-align: center;" nodeleaf=""><img style="max-width:100%;height:auto;" … /></section>
两个要点缺一个就出问题:① 父容器必须有 text-align: center;(居中的来源);
② img 必须带 max-width:100%;height:auto;(电脑端保持原始 568px 居中,手机端不溢出)。
| 写法 | 电脑端(容器 677px) | 手机端(390px) | 结论 |
|---|---|---|---|
容器 text-align:center + 图 max-width:100% |
568px 居中,左右各留白 ~55px | 自适应不溢出 | ✅ 正确 |
图 width:100%(撑满) |
677px 撑满,与装饰卡齐平 | 撑满 | ❌ 不是居中,用户否决过 |
容器无 text-align + 图无宽度样式 |
568px 左对齐 → 右侧留空、看着"偏" | 靠微信默认样式才正常 | ❌ 电脑端偏 |
4.6 ★ 头尾资产的已知病理(2026-10-16 修复,勿回退)
_ref_head_only.html 曾有三处缺陷,同时造成"整篇蓝底 + 两边不齐":
| # | 病理 | 修复 |
|---|---|---|
| 1 | 淡蓝装饰卡 rgba(95,156,239,0.06);padding:7px;width:100% 的 <section> 未闭合,把整篇正文包了进去 → 实测浅蓝区 430×3680(整篇高) |
改为 background-color:rgb(255,255,255);padding:0px |
| 2 | 同层另一块 flex:0 0 auto;padding:0 10px; → 头图比正文缩进 17px |
改为 flex:0 0 auto;padding:0px |
| 3 | 正文根容器 margin:0 -16px → 比头尾各宽 16px |
正文改 padding:0 0 56px(零负 margin) |
> 备份 .orig1016 存于 D:/中建三局/公众号易海工程/_技能拆分备份_20261019/安装目录_原版_20261019/assets/品牌头尾/。
> 那份 .orig 只是留档对照,已被修复的版本才是正确版本,不要拿它覆盖在用的头尾。
> 头尾资产任何改动都要同步工作区镜像 + 安装目录两处,改完必须用 fix_rewrap.py 重套并跑 _chk.py 复核
> (头尾自身 1px 竖条 + 8px 黄方块是固定装饰,不算不齐)。
§5 交付前必跑校验
# SK = 本 SKILL.md 所在目录。两个安装位置,用你实际加载的那个:
# 工作区镜像(唯一可信源):D:/中建三局/公众号易海工程/易海排版技能包
# 安装目录(供 agent 调用):C:/Users/mi/.workbuddy/skills/易海排版技能包
SK="<本 SKILL.md 所在目录>"
PY="C:/Users/mi/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
# ① 合规校验(硬门禁:ERROR=0 且 半角标点 WARNING=0)——对**已套头尾**的文件跑
$PY "$SK/scripts/validate_gzh_html.py" <你的.html>
# ② 边界/底色/字号实测(Playwright 390 视口 + 左右 20px)
$PY "$SK/scripts/_chk.py" <你的.html>
# 期望:左边界集合=[20] 右边界集合=[370] 大块非白底色 = 0 或仅预期色块
# ③ 生成人工预览页(浏览器可「复制到公众号」)
$PY "$SK/scripts/wrap_preview.py" <你的.html>
5.1 _chk.py 期望输出
左边界集合=[20] 右边界集合=[370] ← 对齐通过
--- 大块有底色元素(>60x16)---
rgb(255, 255, 255) ×N ← 只有纯白
H2 ... fs=17px / P ... fs=16px / P ... fs=15px
> L:20 R:370 之外若出现 L:28 R:29(1×36px)或 L:20 R:28(8×8px)属品牌头装饰,正常。
> 统一极简下出现 5–7 处 rgb(237,244,251)(#EDF4FB)是标题色块 + 点题块,属预期。
5.2 预览页的两个坑(实测)
| 现象 | 原因 | 解法 |
|---|---|---|
| 品牌头尾 GIF 空白 | 品牌头尾是微信懒加载写法(只有 data-src 无 src),file:// 下不加载 |
生成预览时把 data-src 同步补一份 src |
| 内联后 GIF 仍 broken | base64 MIME 写死成 image/png |
MIME 按扩展名判(.gif→image/gif) |
| 远程图全部空白 | 外链在 file:// 下不加载 |
预览先把图下载到本地再 base64 内联 |
> ⚠️ 资产自检:预览页外壳依赖 assets/preview-template.html,跑之前先确认存在。
> 缺失时从任意 xxx_预览.html 反推重建:取第一个 <section 之前为前缀、
> 最后一个 </section> 之后为后缀,<title> 换成 {{TITLE}} · 公众号排版预览,
> 正文位置换成 <!--GZH_CONTENT-->。
§6 与另外两个技能包的衔接
| 技能包 | 关系 |
|---|---|
| 易海内容技能包 | 先写内容(定引流款/关注款、写稿、起标题),本包只负责把内容排版成 HTML 并套上品牌头尾 |
| 易海推送技能包 | 它接手本包产出的成品 HTML(头尾已套),只做生成封面 → 推草稿箱 → 验证 |
- 本包产出的 HTML 就是成品:正文 + 品牌头尾 + 署名齐全,复制进公众号编辑器即可发文。
- 推送包不再做任何正文/头尾加工,它只负责封面与推送链路。
- 三链接、署名格式属于"固定格式",由本包
fix_rewrap.py --credits落定,推送包不得再改。 - 若用户只要"看看效果",本包产出 + 预览页即可交付。
6.1 向用户汇报格式
✅ 排版完成(<风格名>)
- 文件:<xxx.html>(<字符数> 字符,`<section>` 开合 diff=0)
- 品牌头尾:已套上 ✅(署名:<编辑> / <校对> / <审核>)
- 校验:validate ERROR=0 / WARNING=0 | _chk 边界 L=20 R=370 ✅
- 色块统计:<标题色块 N 处 + 点题块 1 处>(统一极简)
- 预览页:<xxx_预览.html>
下一步:需要我继续生成封面并推送草稿箱吗?(调用「易海推送技能包」)