用户提到以下任一意图时调用:
.docx。.docx,必要时顺带导出 PDF。tencent-docx 做通用专业美化(研报/论文/公文/合同)。tencent-docx;如果明确要杂志感,再走本技能。用户给出的四类参考图,本 SKILL 用不同模板/参数逼近:
| 参考图 | 风格关键词 | 本 SKILL 对应方案 |
|---|---|---|
| 英文报纸头版(红刊头 + 大图 + 多栏) | 新闻纸、强对比、红色强调 | business 预设 + 单/双栏 + 大标题 + 图片环绕 |
| 中文地产报纸(多文拼版 + 信息框) | 多文章混排、信息卡片、红头 | business 预设 + 多节分栏 + 侧边栏 box |
| 现代网格杂志(青绿 + 图表 + 引文) | 模块化、数据图、强调色块 | business 预设 + 自定义强调色 + 引文框 |
| 软质书页杂志(暖色 + 装饰 + 侧栏) | 文艺、装饰边框、温和排版 | literary 预设 + 侧边栏 + 暖色背景 |
使用 python-docx 程序化修改 .docx。分栏、首字下沉、图片环绕、段落底纹/边框等已封装进脚本,不用每次手写 OOXML。
依赖安装(必须隔离):
# 在隔离 venv 中安装,禁止全局 pip
& "C:\Users\DELL\.workbuddy\binaries\python\versions\3.13.12\python.exe" -m venv "C:\Users\DELL\.workbuddy\binaries\python\envs\default"
& "C:\Users\DELL\.workbuddy\binaries\python\envs\default\Scripts\python.exe" -m pip install python-docx
Read 或 python-docx 解析,确认标题/正文结构。assets/templates/literary_style.jsonassets/templates/literary_essay_style.jsonassets/templates/premium_essay_style.jsonassets/templates/business_style.json & "C:\Users\DELL\.workbuddy\binaries\python\envs\default\Scripts\python.exe" `
"C:\Users\DELL\.workbuddy\skills\hsf-word-magazine\scripts\magazine_typeset.py" `
-i "C:\path\input.docx" `
-s "C:\Users\DELL\.workbuddy\skills\hsf-word-magazine\assets\templates\literary_style.json" `
-o "C:\path\output.docx"
output_qa.json。present_files 把 .docx(和 PDF,如已导出)交给用户。脚本按「字数 + 图片数」自动选择版式:
| 类型 | 字数 | 图片数 | 版式策略 |
|---|---|---|---|
| 封面/短文 | < 1000 | 任意 | 单栏;标题超大;图片通栏或半栏 |
| 中长文 | 1000–3000 | ≥ 0 | 双栏;标题通栏;图片可跨栏 |
| 超长文 | ≥ 3000 | 任意 | 双栏 + 侧边栏,或三栏;收紧留白 |
若用户明确指定版式(如"双栏"),优先用用户指定。
两套预设的配色严格套用 gzh-design 已验证的设计系统(来源:~/.workbuddy/skills/gzh-design/references/theme-red-white.md、theme-olive-journal.md)。新增风格时照这套配对逻辑抄,不要自己琢磨色值。
每套风格定义五层色 + 墨色/正文色,全部写进 JSON colors(命名色键,经 resolve_color 解析):
| 色键 | 角色 | business(红白编辑) | literary(橄榄手记调) |
|---|---|---|---|
primary | 主色:只做锚点(装饰线/竖条/下划线) | DC2626 正红 | ED7B2F 强调橙 |
primary_dark | 主色深:金句块文字 | 991B1B 暗红 | 同 ink |
primary_bg | 主色浅底:引文框/侧栏底纹 | FEF2F2 极淡红 | EEEFE9 浅橄榄灰 |
marker | 关键词下划线色 | FECACA 淡粉 | ED7B2F 橙 |
ink | 标题色(近黑) | 1C1917 | 23251D 墨黑 |
body | 正文色(深灰) | 374151 | 4D4F46 暖灰 |
secondary | 图注/次要文字 | 9CA3AF | 65675E |
line | 分隔线 | E5E7EB | BFC1B7 橄榄灰 |
line),只有 H2 用主色竖条(橄榄手记的克制分节语言)。emphasis_underline.color),对应 gzh-design"每段 1~3 处淡粉/橙色下划线"的扫读标记。secondary,不用浅强调色(旧版 D4A574 压米白底对比不足的教训)。JSON 的 styles.* 支持 border_bottom/top/left_color + _width_pt(样式级,如 Title 红线);JSON 未声明边框时脚本会清除 Word 模板默认边框(如 Title 自带蓝线)。
| 预设 | 用途 | 关键差异 |
|---|---|---|
literary_style.json | 文艺/书籍/柔和 | 橄榄手记配色、双栏、首字下沉、占位图 |
literary_essay_style.json | 纯文字随笔 | 同上,无占位图、引文降频 |
premium_essay_style.json | 精品杂志长文 | 深蓝金、封面页、大编号、指定金句、双栏 |
premium_doc_style.json | 结构化产品文档 | 深蓝金单栏(表格友好)、v0.6.0 全组件(判定卡/进度条/标签组/分隔线/窄列) |
business_style.json | 商务/报纸/硬朗 | 红白编辑配色、三栏 |
| 项目 | 参数 |
|---|---|
| 栏宽 | 约 10 字符(≈ 10.7 cm / 双栏) |
| 页边距 | 上下 2 cm,左右 2.5 cm |
| 装饰线 | H1 底部分隔线 1pt 橄榄灰;H2 左竖条 3pt 强调橙 |
| 标题字体 | 宋体 / 思源宋体(Mac 回退:Songti SC / STSong) |
| 正文字体 | 仿宋(Mac 回退:STFangsong / Fangsong SC) |
| 标题/正文色 | 墨黑 #23251D / 暖灰 #4D4F46 |
| 强调色 | 橙 #ED7B2F(只做 H2 竖条、下划线、金句边框);底纹浅橄榄 #EEEFE9 |
| 图注 | 中灰 #65675E |
| 项目 | 参数 |
|---|---|
| 栏宽 | 约 15 字符(≈ 5.3 cm / 三栏) |
| 页边距 | 上下 2 cm,左右 2 cm |
| 装饰线 | Title/H1 底部红线 3pt;H2 左竖条 3pt 红 |
| 标题字体 | 黑体 / 思源黑体(Mac 回退:Heiti SC / PingFang SC) |
| 正文字体 | 微软雅黑 / 苹方 |
| 标题/正文色 | 近黑 #1C1917 / 深灰 #374151 |
| 强调色 | 正红 #DC2626(只做装饰线、竖条、下划线、金句边框);金句字暗红 #991B1B |
| 图注 | 中灰 #9CA3AF |
精确字号、段距、行距见对应 JSON 预设文件。
magazine_typeset.py
-i, --input 源 docx 路径(必填)
-s, --style 风格 JSON 路径(必填)
-o, --output 输出 docx 路径(必填)
--layout 强制版式:short / medium / long
--drop-cap 首字下沉行数,默认 3,0 表示关闭
--pull-quotes 是否插入引文框,默认 true
--page-numbers 是否加页码,默认 true
--strict 校验 ERROR>0 时退出码为 1(CI/批量用)
{
"name": "literary",
"page": { "width_cm": 21.0, "height_cm": 29.7,
"margin_top_cm": 2.0, "margin_bottom_cm": 2.0,
"margin_left_cm": 2.5, "margin_right_cm": 2.5 },
"columns": { "short": 1, "medium": 2, "long": 2, "long_sidebar": true },
"colors": { "ink": "23251D", "body": "4D4F46", "secondary": "65675E",
"primary": "ED7B2F", "primary_bg": "EEEFE9",
"marker": "ED7B2F", "line": "BFC1B7" },
"fonts": { "heading": "宋体", "heading_fallback": ["SimSun", "STSong", "Songti SC"],
"body": "仿宋", "body_fallback": ["FangSong", "STFangsong", "Fangsong SC"] },
"styles": {
…(完整代码见技能源码)
字段说明:
placeholders[].after:在该文本片段首次出现的段落后插入;为空或匹配不到 → 追加到文末。填你文档里真实存在的标题/小标题文字。width_ratio:占位图占栏宽比例(默认取 image.ratio)。aspect:宽/高比(1.5 = 横向框,1.0 = 方形)。label:图注文字,自动套 Caption 样式。{
"cover_page": { // 封面页:1x1表格画布铺满首页,正文从第2页起
"enabled": true,
"title": "2022 赚钱建议", // 超粗大标题
"subtitle": "生财有术 × 逆熵增者", // 细体副标题
"quote": "赚钱是认知与人品的变现", // 底部金句(衬线反差)
"quote_author": "",
"background": "1A365D", // 封面底色(支持 colors key 或 HEX)
"title_color": "FFFFFF", "subtitle_color": "A0AEC0",
"quote_color": "F6E05E", "accent_line": "B7791F", // 顶部装饰线颜色
"title_size_pt": 44, "subtitle_size_pt": 13, "quote_size_pt": 15
},
…(完整代码见技能源码)
{
"tag_group": { // 标签组 chips:Tag Group 样式段("标签1|标签2|…")
"enabled": true,
"label": "六模块", // 金色小标签前缀
"label_color": "B7791F", "tag_color": "1A365D", "tag_bg": "EDF2F7"
},
"checklist_cards": { // 红绿判定卡:Checklist Item 样式段("✗/✓ …")
"enabled": true,
"fail_mark": "✗", "fail_color": "C53030", "fail_bg": "FFF5F5",
"pass_mark": "✓", "pass_color": "2F855A", "pass_bg": "F0FFF4"
},
"flow_steps": { // 步骤进度条:Flow Step 段("STEP n|标题")+ Flow End 收尾
…(完整代码见技能源码)
内容层协作模式(v0.6.0 固化):复杂版式锚点用两段式——① 转换脚本(一次性,随文档写在桌面)在重建内容时给特殊段落打样式名锚点(Tag Group / Checklist Item / Flow Step / Flow End / Section Divider),空文档需先 add_style 创建这些样式;② 排版层 magazine_typeset.py 按样式名识别,统一写入 OOXML 直接格式。转换脚本不含任何格式逻辑,排版层不含任何内容判断。
执行顺序注意:designated_quotes 在通用 pull_quotes 之前跑;要完全掌控引文位置时把 pull_quotes.enabled 设为 false。cover_page 在主流程最后插入(元素移到文档最前),不影响前面所有段落索引;封面页自动启用"首页不同"隐藏页码。
脚本内部已封装:
set_section_columns(section, n, space_cm, sidebar_ratio):分栏 + 栏间距,可选双栏+侧边栏。apply_drop_cap(paragraph, lines=3, distance_cm=0.1):首字下沉。rewrap_document_images(doc, wrap_type, max_width_cm, ratio):遍历内联图片,先按栏宽等比缩放,再改成四周型/紧密型环绕。resize_inline_shape_to_width(inline_shape, max_width_cm, ratio):把图片显示宽度限制为栏宽×ratio,等比缩放高度。apply_caption_style(doc, style):给图注段落统一套样式(按样式名或文本正则识别)。apply_emphasis_underline(doc, marker_hex):正文加粗词加强调色下划线(标记层)。set_style_borders(style, cfg, colors):样式级段落边框(标题装饰线);无声明时清除模板默认边框。ensure_paragraph_style(doc, name):样式不存在时自动创建(修掉了 Pull Quote 样式静默丢失的 bug)。make_pull_quote / make_sidebar:引文框、侧边栏底纹边框。add_page_number_footer(section):页脚加页码。make_placeholder_png(path, w, h, rgb):用 zlib 写纯色占位 PNG(无第三方图像库依赖)。insert_placeholders(doc, style, body_col_w_cm, content_w_cm):按 JSON placeholders 在指定段落后插灰色占位图 + 图注,浮动环绕、按栏宽自适应。ensure_section_type(section, type_val):正文节显式声明 w:type=continuous(v0.3.1 修复:OOXML 缺省按 nextPage 处理,正文节不声明会从新页开始,标题区独占一页大片空白)。add_section_break_after(paragraph, section_type, template_sectPr):分节符,提供 template 时复制 pgSz/pgMar(防新节按默认纸张渲染)。build_cover_page(doc, style):封面页(v0.3.0)。1x1 表格当底色画布铺满首页,行高 90% 防溢出;超粗标题+细体副标题+衬线金句+装饰线;金句用撑杆空行下推到封面下部;分页用 pageBreakBefore 挂在文档原第一段(v0.3.1 修复:额外分页段落自身溢出会产生整页空白页);末尾执行避免打乱段落索引;自动启用首页不同页脚。apply_heading_number_combo(doc, style):H1 编号放大(v0.3.0)。行首编号拆成大号彩色 run + 标题 run。extract_designated_quotes(doc, style):指定金句抽取(v0.3.0)。命中段落原地转 Pull Quote + 装饰引号。apply_number_emphasis(doc, style):数字强调(v0.3.0)。正则命中数字拆 run 加粗上品牌色,每段限 max_per_paragraph 处。apply_list_marker(doc, style):清单侧边条(v0.3.0)。①-⑤ 开头段落加左竖线+底色+加粗。apply_table_cards(doc, style):表格卡片化(v0.4.0)。表头深底白字+隔行浅底+0.5pt 弱化边框+单元格呼吸边距;rows≥2 且 cols≥2 才算数据表。apply_template_cards(doc, style):输出模板卡片(v0.4.0)。start_marker(默认 "## ")开头的 Code Block 段作标题条(深底白字),后续 Code Block 归入卡片体(浅底+侧框+底框),做成"报告单"式样。harden_heading_direct_format(doc, style):标题直接格式硬化(v0.5.0)。把样式级标题格式(颜色/字号/边框/底纹)逐段落复制为直接格式——弱渲染器只认直接格式,不读 styles.xml,否则 H1 装饰线/H2 色块在预览里消失。make_list_cards(doc, style):清单卡片化(v0.5.0)。①-⑤ 标记段落逐条独立卡片(浅底+左粗色条+段距),替代共享侧边条,方便逐一扫视比对。make_dialogue_bubbles(doc, style):对话气泡(v0.5.0)。"用户:/AI:"开头段落交替配色(用户灰底/AI 品牌色底+左色条+缩进错位),发言人标签加粗上色,适合对话实录/案例侧栏。add_end_mark(doc, style):结束符(v0.5.0)。文末单段收口:居中符号(默认 ■■■)+段级顶边框细线,闭合阅读感。紧凑单段设计,防孤悬成空白页。make_tag_chips(doc, style):标签组 chips(v0.6.0)。Tag Group 样式段落("标签1|标签2|…")重建为关键词组:金色标签前缀 + 逐词条加粗墨色 + 浅底左色条段落。用于"定义正文 vs 关键词组"两个视觉层次拆分。make_checklist_cards(doc, style):判定卡(v0.6.0)。Checklist Item 样式段落("✗/✓ …")渲染成独立红绿判定卡:✗ 红(C53030/FFF5F5)、✓ 绿(2F855A/F0FFF4),同色左侧条。用于速查标准/红线清单。make_flow_steps(doc, style):步骤进度条(v0.6.0)。Flow Step 段落("STEP n|标题")渲染成金色 STEP 徽标 + 墨色标题 + 右制表位 ●○○○○ 进度刻度;Flow End 段落渲染为全满刻度收尾线。apply_section_dividers(doc, style):章节分隔(v0.6.0)。Section Divider 空段渲染为居中弱化点线(默认 "· · · · ·"),章间统一装饰,与结束符同一家族。apply_table_cards 增强(v0.6.0):narrow_columns 配置——表头含指定子串的列收窄为等宽字体(Consolas)+缩 1pt+弱化色,用于"诊断后接谁"这类路径/技术列。示例:"narrow_columns": [{"header_contains": "诊断后接谁", "col": 2, "font": "Consolas", "color": "4A5568"}]。make_dialogue_bubbles 增强(v0.6.0):对话内续行 Code Block 合并进气泡——跟随上一条底色+同色侧边条,AI 多行回复观感为一个气泡块(此前续行底色轮换错乱、无侧条)。add_style 创建(空文档默认没有自定义样式)。styles.*.shading 现在真实生效(此前被静默丢弃);atLeast 替代 exact 行高(exact 在部分预览器塌缩);封面支持 version_line 收口行、top_spacer_lines/bottom_spacer_lines 撑杆(弱渲染器忽略行高时仍能撑起近整页封面)。keep_prefix_label)。用户给一份已有图片的 .docx,脚本会自动:
栏宽 × image.ratio(默认 0.96),等比缩放高度;原图本来就小则不动。这样三栏里 16cm 的图会自动收到 ~5cm,不再压字。styles.Caption 的字号/颜色/对齐/段距。局限:图片位置仍留在源文档原段落处(不会智能重排到栏顶/跨栏)。无图时可用下方占位图组件补出版式骨架。
输出 *_qa.json,包含:
body_column_width_cm)validate_typeset 的 ERROR / WARNING 数(ERROR 必拦)"Word 文档杂志化排版技能。将已有 .docx 内容按杂志/报刊风格重新排版:自动判断内容类型、套用文艺/商务/精品杂志模板(配色抄自 gzhdesign 设计系统)、封面页(深底+标题+金句)、H1大编号组合标题
用户提到以下任一意图时调用: "Word 杂志化排版" "把文档排成杂志/报刊风格" "分栏 / 首字下沉 / 图文混排" "Word 排版美化,杂志感" "报纸风格 / 杂志风格 / 期刊风格"
输出 qajson,包含: [ ] 字数与图片数统计 [ ] 自动判定的版式类型 [ ] 应用的风格预设名 [ ] 分栏数是否生效 [ ] 首字下沉是否生效 [ ] 图片环绕方式统计(resized / converte