摄影采风路书制作
Overview
本技能封装了摄影采风路书的完整制作与修订流程,包括从零生成全新 DOCX 路书、PDF 内容修改、门票优惠政策搜集与插入、AI 风光图片生成、摄影要点编写,以及对已有 DOCX 路书的内容级编辑修订。样式规范以《宁甘内青疆摄影采风》路书为严格基准、示例内容数据取自《晋东北摄影采风》(150 段落 / 7 表格 / 13 图);V1.1.0 排版规范与范文见 D:/AI工作区/山西摄影采风路书.docx(路书 docx 体积大,不内置进技能目录,以免占用 C 盘;技能目录仅保留轻量模板与资源)。
核心约定
- 输出目录(用户自定义):在
roadbook_content.py的CONFIG["output"]中填写你想要的绝对路径(例如D:/AI工作区/路书.docx)。作者机默认示例为D:/AI工作区/,请改成你自己的路径——生成器支持任意盘符,不限定 D 盘。 - 输出格式:DOCX 格式(为主),PDF 仅作辅助预览
- 配色规范:橙色主色(#C55A11)、棕色辅色(#8B4513)、深灰正文(#333333)、橙色日标题(#E46C0A)
- 字体:微软雅黑(全文统一,实测基准文档 525 处 run 均为微软雅黑)
- 行程标题格式:
D1:9月14日(周一) 长沙→银川·镇北堡(50km),宿银川市(括号内用半角(),且须在一行内写完) - 门票政策框:1x1 表格,橙色边框(#C55A11)、米色背景(#FFF7E0);标题 10pt 粗橙、条目 9pt 深灰
技能文件清单
| 文件 | 作用 | 备注 |
|---|---|---|
SKILL.md |
本技能全部方法论与版面规范 | 核心,AI 读取后照此执行 |
scripts/generate_roadbook.py |
DOCX 生成器:读 roadbook_content.py 按版面规范出 DOCX |
模式 A / 模式 C 使用 |
scripts/pdf_insert_ticket_boxes.py |
PDF 修订工具:删图 + 插门票框 | 模式 B 使用,与生成器独立 |
examples/sample_roadbook_content.py |
数据文件模板,复制改名即可用 | 跑通流程的样例(轻量,内置) |
| 大范文 docx(山西/晋东北) | 不内置进技能目录,已移至 D:/AI工作区/ |
路书成品体积大,放 D 盘避免 C 盘随技能增多而膨胀 |
references/门票政策参考.md |
北疆主要景点门票政策真实样例(2024–2025 整理) | 仅供参考,实际以景区公告为准;可自行替换为目标路线数据 |
references/appendix_standard.py |
标准附录组件(固化,非临时数据):注意 标题段前 28.7pt / 正文段后 27pt(2×行距)的默认间距常量,以及 AIRPORT_CAR_INSPECTION(在机场验收租车的要求 5 条标准文案) |
生成器已内置为默认值;任何自驾租车路书均应从本文件取用,不手抄 |
> 注意:本技能的样式规范(字体大小 / 段落缩进 / 行距)以《宁甘内青疆摄影采风》路书为严格基准,示例内容数据取自《晋东北摄影采风》;references/门票政策参考.md 与 PDF 工具内置的是北疆样例数据——两者都是「示例」,使用时请替换为你自己路线的真实内容。
模板选择(可切换)
本技能内置多套版式模板。每次制作 / 修订路书前,先确认用哪一套(默认:标准版)。用户也可在指令中直接指定模板,例如:
- 「帮我做一份 XX 路书 用精简版模板」
- 「把这份路书 改成标准版」
- 「切换成精简版重新生成」
> 模板只改变「视觉密度与信息量」(字号、配色、是否画门票框、是否单列背景介绍),不改变核心约定:输出目录 CONFIG["output"]、输出 DOCX、每日内容的语义顺序、中文引号规则。新增模板只需在「版面风格基准」节末尾追加一套参数即可。
| 模板 | 适用场景 | 与标准版差异 | 页数约为标准版 |
|---|---|---|---|
| 标准版(默认) | 完整路书、印刷/珍藏 | 《宁甘内青疆》样式基准,含背景介绍+门票框+摄影要点+AI图 | 100% |
| 精简版 | 快速浏览、手机阅读、发群 | 合并背景介绍、去掉米色门票框(改行内一行)、整体字号略降 | 60–70% |
版面风格基准(样式以《宁甘内青疆摄影采风》为严格基准,示例数据取自《晋东北摄影采风》)
生成或修订新路书时须对齐以下参数(直接照抄,避免走形)。全文档微软雅黑,正文色 #333333。
| 元素 | 字号 | 颜色 | 粗体 | 缩进 / 行距 | 备注 |
|---|---|---|---|---|---|
| 封面顶部风光图 | — | — | — | 整宽 banner,位于主标题之前 | 由 CONFIG["cover_image"] 指定图片路径 |
| 封面主标题 | 36pt | #C55A11 | 是 | 居中 | |
| 封面副标题 | 26pt | #8B4513 | 是 | 居中 | |
日标题 D1:… |
15pt | #E46C0A | 是 | 无缩进;自动压缩字距+横向缩放到一行;括号内用半角 () |
|
| 小节标题「行程描述」 | 12pt | #8B4513 | 是 | 首行缩进 2 字符 | |
| 景点背景介绍标题「📖 ×× · 背景介绍」 | 12pt | #8B4513 | 是 | 首行缩进 2 字符 | |
| 摄影要点标题「📷 摄影要求与注意事项」 | 11pt | #C55A11 | 是 | 首行缩进 2 字符 | |
| 行程描述 / 背景介绍 / 前言·温馨提示 / 附录叙述正文 | 10.5pt | #333333 | 否 | 首行缩进 21pt(2 字符),1.3 倍行距 | |
| 摄影要点条目 | 10.0pt | #333333 | 否 | 首行缩进 2 字符,1.2 倍行距 | 可带 📷 等 emoji 分项 |
| 门票政策框 | 标题 10pt #C55A11 粗 / 条目 9pt #333333 | — | — | 1x1 表格,橙边(#C55A11)米底(#FFF7E0) | 含票价/免票/半价/预约 |
| 景点风光图片 | — | — | — | 居中内嵌;宽 img_width 英寸(默认 5.8),超高按 img_max_height_in 等比压矮(只压不放大) |
AI 生成 |
| 行程总览表 | 表头 8–10pt 白粗 / 表体 7.5–9.5pt #333333 | — | — | 整表 keep_together 不拆;表头/表体字号与单元格边距可配压矮 |
由 FOREWORD 的 table 类型项提供 |
每日条目顺序(已定稿,务必遵循):
1. 封面顶部风光图 → 封面主/副标题、分隔线、路线、元信息
2. 日标题(D1:日期(周) 出发→到达(里程),宿地点,括号内半角 ())
3. 行程描述(12pt #8B4513 标题「行程描述」首行缩进 2 字 + 10.5pt 正文,首行缩进 21pt / 1.3 倍行距)
4. 景点背景介绍(12pt #8B4513 标题「📖 ×× · 背景介绍」+ 10.5pt 正文,首行缩进 21pt / 1.3 倍行距)
5. 景点风光图片(AI 生成,内嵌,居中)
6. 门票政策框(1x1 表格,橙边米底,含票价/免票/半价/预约)
7. 摄影要点(11pt #C55A11 标题「📷 摄影要求与注意事项」版标题 + 10.0pt 条目)
排版硬性要求(V1.1.0 起强制,与《山西摄影采风路书》定稿一致)
- 封面顶部须有整宽风光 banner 图:在
roadbook_content.py的CONFIG["cover_image"]填图片路径,生成器自动以大标题之前的整宽 banner 插入。 - 日标题必须在一行内写完:生成器按可用宽度自动施加负字距(日期段额外压缩),仍超则叠加横向缩放;标题内括号统一用半角
()。 - 小标题与紧跟正文首行禁止跨页拆分:行程描述 / 📖 背景介绍 / 📷 摄影要求 / 温馨提示 / 规则区各标题均设
keep_with_next,与下方首行绑定。 - 所有表格禁止跨页拆分:每张表开启
cantSplit+ 行间keep_with_next+keep_together,整表要么留本页、要么整体下移。 - 除日标题外,所有小标题统一首行缩进 2 字符:前言 / 行程描述 / 📖 背景介绍 / 📷 摄影要求与注意事项 / 温馨提示 / 注意 / 本次自驾游的有关规则和要求 / 自驾游免责协议书 / 摄影装备分类等小标题均首行缩进 2 字;日标题(D1…)不缩进。由
CONFIG["subheading_indent_chars"]覆盖(默认 2,单位字符数)。 - 正文统一缩进规则:行程描述、背景介绍、前言·温馨提示、附录叙述正文、摄影要点条目均为首行缩进 2 字符;行程描述/背景介绍/前言·温馨提示/附录叙述正文 10.5pt / #333333 / 1.3 倍行距;摄影要点条目 10.0pt / #333333 / 1.2 倍行距。
- 逐项可覆盖的
CONFIG键(写进roadbook_content.py的CONFIG顶层即可,无需改生成器): subheading_indent_chars:小标题按字符缩进数(默认 2;如需对齐《山西》范本那种"背景介绍/摄影要求不缩进"的样式,可设为 0 或仅对特定项用indent_chars: 0)。clause_indent:规则条款(clause 类型)首行缩进 pt 值(默认 0 对齐《山西》;藏东偏好 21≈2 字)。table_head_size/table_body_size:行程总览等表格的表头 / 表体字号(默认 10 / 9.5;压矮用 8 / 7.5)。overview_cell_margin:行程总览表单元格边距(twips,默认 15)。space_scale:所有「标题↔标题 / 标题↔正文」段间距统一缩放系数(默认 1.0=不压缩;<1 收紧,用于消除大段空白)。覆盖键:day_*、section_*、travel_*、photo_title_*、body_space_after、bullet_space_after。img_width/img_max_height_in:景点图宽(英寸,默认 5.8)/ 最高高度(英寸)。插入后若超高,add_image_fit()等比缩小——只压矮、绝不放大。ticket_line_spacing/ticket_space_after/ticket_cell_margin:门票框内正文行距(默认 1.0)/ 行后距(默认 1)/ 单元格边距(twips,默认 20;压矮用 15)。- 实现要点:
set_indent_chars()在写入w:firstLineChars(按字符缩进)前会清掉冲突的w:firstLine(pt)属性,避免部分阅读器(如 Tencent Docs 预览)不按 2 字渲染。 - 页边距 2.5cm(70.85pt),正文区宽度由此推算。
- 图片高度控制(只压不放大):章节景点图按
img_width(英寸)插入,若插入后高度超过img_max_height_in(英寸),生成器add_image_fit()等比缩小——只压矮、绝不放大。避免图片过高把后续内容顶到下一页、形成大于半页的空白。覆盖:CONFIG["img_width"]/CONFIG["img_max_height_in"]。 - 标题/正文间距可压缩(消除大空白):统一用
space_scale(默认 1.0=不压缩;<1 收紧)缩放所有「标题↔标题、标题↔正文」段间距,用于消除大段空白而无需逐段手调。覆盖:CONFIG["space_scale"]。 - 门票框可压缩:
ticket_line_spacing(框内正文行距)、ticket_space_after(框内行后距)、ticket_cell_margin(单元格边距 twips,压矮用 15)均可覆盖,用于压低门票框整体高度。 - 行程总览大表压矮且不拆:该表开启
keep_together(整表不跨页拆分,符合「行程总览不要被拆分」要求);表头/表体字号由table_head_size/table_body_size压小(如 8/7.5)、单元格边距同步压小,使其与前言挤进同一页而不拆。 - 强制分页(不管前面留多大空白都另起一页):在 FOREWORD/APPENDIX 内容列表里插入
{"type": "page_break"},其后内容强制从新页开始(典型:把「规则与要求」及以后整体推到新页)。详见下节「附录区内容类型与结构」。 - 「注意」小节固化默认间距(V1.1.0 强化,源自浙南路书多轮迭代确认):生成器对
h2文本为「注意」的标题自动套用段前距NOTE_HEADING_BEFORE_PT = 28.7pt(与上方内容间距,≈ 原 7.7pt 经两轮翻倍的舒适值);对其后紧跟的body正文自动套用段后距NOTE_BODY_SPACE_AFTER_PT = 27pt(= 2 × 正文行距 10.5pt×1.3)。数据层可显式写before/space_after覆盖;常量定义见references/appendix_standard.py。此间距是技能默认,不是某份路书的临时数据——新建路书无需重复书写即可获得该版式。 - 「在机场验收租车的要求」为标准必含组件(V1.1.0 强化):自驾租车路书的「本次自驾游的有关规则和要求」之后必须包含此 5 条验收条款;文案为技能内置正典(
references/appendix_standard.py的AIRPORT_CAR_INSPECTION),任何路书均从此取用、不得遗漏或私自改写(此前曾因漏加被用户指出)。生成器与示例模板均已内置。
> 历史修订记录:早期版本曾将「景点介绍」置于「行程描述」之前,后在《晋东北摄影采风》编辑中调整为上方顺序(行程描述先行),此后作为定稿标准。此后 V1.1.0 又固化了「图片只压不放大 / 空白压缩 / 强制分页 / 附录区推荐结构」等规则(源自浙南路书多轮迭代经验)。
附录区内容类型与结构(推荐顺序)
APPENDIX_CONTENT(以及 FOREWORD_CONTENT)是 item 列表,按 "type" 区分样式。type 取值:
| type | 样式 | 说明 |
|---|---|---|
h1 |
14pt 粗 棕(#8B4513) | 大标题(如「自驾游免责协议书」「摄影装备建议清单」);可带 "size" 改字号 |
h2 |
12pt 粗 棕,首行缩进 2 字 | 小节标题(如「注意」「在机场验收租车的要求」);可带 "size"、"before"/"after"(段前/段后距 pt,浮点) |
cat |
11pt 粗 橙(#C55A11) | 清单分类标题 |
clause |
10.5pt #333333,1.3 倍行距 | 编号条款(1、2、3…);首行缩进由 clause_indent 控;可带 "space_after" |
body |
10.5pt #333333,1.3 倍行距,首行缩进 2 字 | 叙述正文;可带 "space_after"(pt)调段后留白 |
item |
10.0pt #333333,1.3 倍行距 | 清单条目(如摄影装备分项) |
image |
— | 内嵌图片,需 "image": "图片key" |
table |
— | 多列表格(如行程总览),"data" 为二维数组 |
space |
— | 空一行 |
page_break |
— | 强制分页:其后内容另起一页(不论前面留多大空白) |
> 每个 item 均可用 "before" / "after"(段前/段后距,单位 pt,浮点)微调间距——这是迭代微调版面(如「某标题与上方距离加倍」)的标准手段,无需改生成器;显式值会覆盖 space_scale 的全局缩放。
> 例外(已固化默认):h2 文本为「注意」时,生成器默认 before = 28.7pt、其紧跟 body 默认 space_after = 27pt(2× 行距);仅在确需偏离时才显式写 before / space_after 覆盖,常量定义见 references/appendix_standard.py。
推荐附录顺序(V1.1.0 定稿,源自浙南迭代经验):
摄影装备建议清单(h1+ 若干item)—— 置于最前,便于出行前对照准备注意(h2,带"size": 15)+ 一句正文(body)。间距已固化:标题段前 28.7pt、正文段后 27pt(= 2× 正文行距),由生成器默认套用,无需在数据中显式写before/space_after{"type": "page_break"}—— 把其后「规则与要求」及全部内容推到新页(仅在用户要求独立成页时加)本次自驾游的有关规则和要求(h1+ 若干clause)在机场验收租车的要求(标准必含组件,h2+ 5 条clause)—— 文案见references/appendix_standard.py的AIRPORT_CAR_INSPECTION,从正典取用,不得遗漏或改写自驾游免责协议书(h1,带"size": 15+ 若干clause)
> 顺序可因用户要求调整(本路书曾按用户指令把「摄影装备建议清单」从文末提前到「注意」之前)。免责书、AA 制规则等行程特有条款请按用户提供的真实文本录入;而「在机场验收租车的要求」为技能内置标准组件(见 references/appendix_standard.py),属于通用规范、已固化,不视为"用户临时数据"。
精简版参数(蓝本:标准版按比例压缩)
| 元素 | 字号 | 颜色 | 粗体 | 备注 |
|---|---|---|---|---|
| 封面主标题 | 30pt | #C55A11 | 是 | 比标准版小 |
| 封面副标题 | 20pt | #C55A11 | 是 | 去掉棕色辅色 |
日标题 D1:… |
15pt | #C55A11 | 是 | 单一橙色,非双色 |
| 小节标题(行程与景点) | 11pt | #C55A11 | 是 | 合并「行程描述」+「背景介绍」 |
| 摄影要点标题 | 10.5pt | #C55A11 | 是 | |
| 正文 | 10pt | #333333 | 否 | |
| 摄影要点条目 | 9.5pt | #333333 | 否 | |
| 门票(行内一行) | 9.5pt | #8B4513 | 否 | 不再画框,景点正文后一行「门票:票价/免票/半价/预约」 |
精简版每日顺序:
1. 日标题
2. 行程与景点(11pt #C55A11 标题「行程与景点」+ 10pt 正文,合并原行程描述与背景介绍)
3. 景点风光图片(AI 生成内嵌,尺寸可略小)
4. 门票(行内一行,含票价/免票/半价/预约)
5. 摄影要点(10.5pt #C55A11 标题 + 9.5pt 条目)
> 精简版参数与顺序均为合理默认值,可按用户反馈随时调整;调整时直接改本节表格,无需动生成逻辑。
标准工作流程
> ?? 模板确认(每个模式开工前必做):先确认本次使用哪套模板——标准版(默认)或精简版。若用户指令中已指定(如「用精简版模板」)则直接采用;否则默认标准版,不必反复追问。选定后,全文统一按该模板的「版面风格基准」参数执行。
模式A:从零生成全新 DOCX 路书(推荐)
Step 1:确认行程信息
- 出发/返回城市、日期、天数
- 每日行程安排(景点、住宿、里程)
- 参考已有路书模板提取格式规范
Step 2:生成景点风光图片
使用 ImageGen 工具为每个主要景点生成 AI 风光图片:
- 提示词格式:Aerial view of [景点英文名] in [省份], China. [景色描述]. Golden hour lighting, professional landscape photography, high detail, 4K
- 每个景点生成 1 张,封面可生成 1 张全景拼图
- 图片保存为 PNG 格式,命名包含景点拼音
Step 3:搜集门票政策
通过 WebSearch 搜集各景点门票优惠政策(同模式 B 的 Step 2)
Step 4:编写内容数据文件
创建 roadbook_content.py,结构:
DAILY_CONTENT = [
{
"title": "D1:日期(周) 景点(里程),宿地点",
"travel_desc": "当日行程描述(置于景点介绍之前)",
"spots": [
{
"name": "景点名",
"image": "image_key", # 对应IMAGES字典
"intro": "景点背景介绍(200-300字)",
"ticket": {
"title": "景点名 · 门票优惠政策",
"lines": ["参考票价:...", "【免票】...", "【半价】...", "※ ..."]
}
}
],
"photo_notes": ["摄影要点1", "摄影要点2", ...]
}
]
APPENDIX_CONTENT = [
{"type": "title", "text": "附录标题", "color": "main", "size": 14},
{"type": "body", "text": "正文内容", "color": "body", "size": 10.5},
{"type": "space"},
]
Step 5:运行生成脚本
python generate_roadbook.py
脚本使用 python-docx 生成 DOCX,包含:封面→行程总览→行程总表→每日行程(行程描述 → 景点背景介绍 → 图片 → 门票政策框 → 摄影要点)→附录。生成器须严格套用「版面风格基准」中的字号/颜色/字体参数。
Step 6:验证与交付
- 检查段落数、表格数、图片数(参照基准:约 150 段 / 7 表 / 13 图,按天数等比)
- 抽查内容质量(门票政策、摄影要点完整性)
- 移动到
CONFIG["output"]指定的目录后交付
模式B:修改已有 PDF 路书
Step 1:确认源文件与任务类型
读取原始路书(DOCX 或 PDF),确认总页数/章节结构、需修改的页面位置、图片分布。
Step 2:搜集门票政策
通过 WebSearch/WebFetch 搜集各景点门票优惠政策(票价、免票/半价人群、预约要求)。详见 references/门票政策参考.md。
Step 3:执行 PDF 修改
使用 scripts/pdf_insert_ticket_boxes.py(北疆门票框工具,与 DOCX 生成器相互独立):
1. 删除指定页图片(add_redact_annot + apply_redactions)
2. 在景点介绍页底部插入带边框的门票政策文本框(橙边 #C55A11、米底 #FFF7B0、7.5 号字体)
Step 4:验证与交付
- 验证图片已删除(
get_images()返回空) - 验证门票政策文本已写入(搜索关键词)
- 预览 PDF 确认视觉效果后交付
模式C:编辑修订已有 DOCX 路书内容(用户的迭代经验)
当需要对已生成的 DOCX 路书做内容级修改(调整每日顺序、增删景点介绍、更新门票政策、修正文案)时,走此流程,而非重新从零生成:
Step 1:定位内容数据文件
找到生成该路书所用的 roadbook_content.py(DAILY_CONTENT 结构)。所有内容修改都在数据层完成,不要直接手改 DOCX。
Step 2:按定稿顺序调整条目
- 调整每日顺序 → 改
DAILY_CONTENT列表顺序; - 调整某天内元素顺序 → 改该 day 的
travel_desc / spots / photo_notes字段与 spot 内intro / image / ticket顺序; - 严格遵循「每日条目顺序」:行程描述 → 背景介绍 → 图片 → 门票框 → 摄影要点。
Step 3:修复中文引号 ASCII 冲突(关键)
编辑中文文案极易触发 Python SyntaxError(见下方「中文引号 ASCII 坑」)。改完用正则或单引号替换法过一遍。
Step 4:重新生成并落盘
python generate_roadbook.py
将生成的 DOCX 保存到 CONFIG["output"] 指定的目录(任意盘符均可,不限定 D 盘)。
Step 5:交付前自检
按文末「交付前自检清单」逐项核对(顺序、字号、字体、门票框、占位符、落盘路径)。
常用 Python 代码片段
删除 PDF 中的图片
import pymupdf
doc = pymupdf.open(pdf_path)
page = doc[page_index] # 0-based
images = page.get_images(full=True)
for img in images:
rects = page.get_image_rects(img[0])
for rect in rects:
page.add_redact_annot(rect)
page.apply_redactions()
doc.save(output_path)
插入带边框的文本框
import pymupdf
doc = pymupdf.open(pdf_path)
page = doc[page_index]
rect = pymupdf.Rect(20, page.rect.height - 180, page.rect.width - 20, page.rect.height - 20)
shape = page.new_shape()
shape.draw_rect(rect)
shape.finish(color=(0.773, 0.353, 0.067), fill=(1.0, 0.976, 0.941), width=1.5)
shape.commit()
inner = pymupdf.Rect(rect.x0 + 8, rect.y0 + 6, rect.x1 - 8, rect.y1 - 4)
page.insert_textbox(inner, text_content, fontsize=7.5, fontname="china-ss",
color=(0.2, 0.1, 0.0), align=0)
doc.save(output_path)
景点页面分布参考
基于北疆路书(10 天行程,共 27 页):
- 第3页:D1 第一天(出发日)
- 第5页:D2 乌伦古湖介绍
- 第8页:D3 五彩滩介绍
- 第10页:D4 白哈巴介绍
- 第12-13页:D5 喀纳斯湖+观鱼台介绍
- 第15-16页:D6 神仙湾/月亮湾/卧龙湾介绍
- 第18页:D7-D8 禾木村介绍
- 第20页:D8 禾木木桥介绍
常见任务
- 删除某天图片:定位该天行程页 → 找到图片 xref → 使用 redact 覆盖
- 增加门票政策:在各景点介绍页底部插入文本框 → 格式统一为「标题+票价+免票+半价+预约提示」
- 批量修改多页:遍历页面列表逐一处理
- 编辑修订 DOCX 内容:改
roadbook_content.py→ 修中文引号 → 重生成 → 落盘到CONFIG["output"]指定目录 → 自检
交付前自检清单
> 先确认本次使用的模板(标准版 / 精简版),再按对应参数核对(标准版见「版面风格基准」上半节,精简版见同节末尾)。
- [ ] 文件已保存到
CONFIG["output"]指定的输出目录(任意盘符均可) - [ ] 段落数/表格数/图片数符合预期(基准约 150 段 / 7 表 / 13 图,按天数等比)
- [ ] 每日顺序正确:行程描述 → 背景介绍 → 图片 → 门票框 → 摄影要点
- [ ] 日标题 15pt #E46C0A;小节标题 12pt #8B4513;摄影要点标题 11pt #C55A11;正文 10.5pt #333333;字体全微软雅黑
- [ ] 缩进核对:除日标题外所有小标题(前言/行程描述/📖背景介绍/📷摄影要求/注意/规则/免责协议书/装备分类)均首行缩进 2 字;日标题不缩进
- [ ] 门票政策框:橙边(#C55A11)米底(#FFF7E0),含票价/免票/半价/预约
- [ ] 抽查 2-3 个景点:门票政策与摄影要点完整、无占位符/乱码
- [ ] 中文引号无
SyntaxError(见下方注意事项) - [ ] (按需)若用户要求「规则区另起一页」:确认 APPENDIX_CONTENT 中「本次自驾游的有关规则和要求」之前有
{"type": "page_break"},其后内容确在新页(分页所致的大空白属预期,非排版错误) - [ ] (按需)图片高度:
img_max_height_in生效、所有图只压不放大,无大于半页的跳页空白(可用布局估算器复测)
重要注意事项
Python 字符串中的中文引号问题(关键!)
在 roadbook_content.py 等内容数据文件中,严禁在双引号字符串值内使用 ASCII 双引号(")作为中文引号。这会导致 Python 解析器将内部引号误认为字符串终止符,后续中文内容(如 em-dash ——)出现在字符串外部,触发 SyntaxError: invalid character。
错误写法:
"intro": "博物馆常设展览包括"朔色长天——宁夏通史陈列"等" # 语法错误!
正确写法(三选一):
# 方案1:使用中文引号字符(U+201C / U+201D)
"intro": "博物馆常设展览包括\u201c朔色长天——宁夏通史陈列\u201d等"
# 方案2:使用单引号代替中文引号
"intro": "博物馆常设展览包括'朔色长天——宁夏通史陈列'等"
# 方案3:转义内部双引号
"intro": "博物馆常设展览包括\"朔色长天——宁夏通史陈列\"等"
推荐方案2(单引号),最简单且不易出错。编辑修订(模式 C)改完文案后务必过一遍此项。
DOCX 生成关键格式参数
| 元素 | 字号 | 颜色 | 粗体 |
|---|---|---|---|
| 封面主标题 | 36pt | #C55A11 | 是 |
| 封面副标题 | 26pt | #8B4513 | 是 |
| 日标题 | 15pt | #E46C0A | 是 |
| 小节标题(行程描述/背景介绍) | 12pt | #8B4513 | 是 |
| 摄影要点标题 | 11pt | #C55A11 | 是 |
| 正文 | 10.5pt | #333333 | 否 |
| 摄影要点条目 | 10pt | #333333 | 否 |
| 门票政策框内容 | 9pt | #333333 | 否 |
| 表格表头 | 10pt | #FFFFFF | 是 |
图片生成提示
- 封面:全景拼图风格,包含行程代表性景观
- 景点:航拍视角或广角风光,黄金时段光线
- 统一风格关键词:
professional landscape photography, high detail, 4K - 图片宽度:封面 5.5 英寸,景点 5.8 英寸