写技术报告最耗时的不是内容,是排版。字体、三线表、图题位置、目录识别、图片被裁、WPS 报缺字体,每一项都能让人来回改一整晚
这篇是给棒电源机组那份技术报告定稿后写下的规范,把踩过的坑固化成可执行规则。照着做,一次成稿
适用:核电、电气专业技术报告、专题学习报告、组内汇报材料 版本:2026-10-30 定稿(棒电源机组报告实践后固化)
一、动笔前的三件事
- 先列提纲给委托方确认,再写正文
- 明确读者:组内分享 / 科室存档 / 上报,决定深度与篇幅
- 参数必须可追溯:电压、电流、容量、时间必须有图纸、规程或实测来源
禁止表述:约为、大幅、相关、正常范围内、按规程操作(一句话带过)
二、结构
封面 → 目录 → 第1章 引言 → 第2章 系统组成与技术原理 → 2 到 4 个专题章 → 结论 → 参考文献
- 不设摘要、关键词、致谢
- 章标题格式:
第1章 引言(阿拉伯数字,不是"一、“或"第一章”) - 篇幅:9 到 11 页 A4(含封面与目录)
- 图 3 到 5 张,表 2 到 3 张,编号按章:
图2-1、表2-1
三、版面参数
| 项目 | 规定 |
|---|---|
| 纸张 | A4,上下边距 2.5 cm,左 3.0 cm,右 2.5 cm |
| 一级标题 | 黑体 三号 16 pt,居中,另起页 |
| 二级标题 | 黑体 四号 14 pt,左对齐 |
| 三级标题 | 黑体 小四 12 pt,左对齐 |
| 正文 | 宋体 小四 12 pt,行距 1.5,首行缩进 2 字符,西文 Times New Roman |
| 图题 | 宋体 五号 10.5 pt,居中,在图下方 |
| 表题 | 宋体 五号 10.5 pt,居中,在表上方 |
| 页眉页脚 | 一律不要 |
| 封面 | 题名、副题、编制人员、审核人员、编制单位、编制日期 |
封面信息行用制表位对齐,标签等长(编制人员 / 审核人员 / 编制单位 / 编制日期),冒号才能对齐成一列
四、标题与目录
两个硬要求,做错就出问题
- 标题段落不要套 Heading 样式
Word 与 WPS 会给 Heading 样式加段落标记(小黑方块),关了"显示编辑标记"也还在
正确做法:用正文样式,只给段落设置大纲级别
outlineLvl(一级 0,二级 1) - 目录用两遍构建的静态目录 第一遍生成、转 PDF、抓各章真实页码,第二遍回填带点线引导和页码的目录 比 TOC 域可靠,WPS 打开即完整,不用右键更新域
五、表格
三线表,只有三条横线
- 顶线、底线:1.5 磅
- 栏目线(表头下):0.75 磅
- 无竖线,无行间横线
- 表内五号宋体,表头加粗居中
python-docx 实现要点
# 整表先全部去掉边框
for edge in ('top','bottom','left','right','insideH','insideV'):
el = OxmlElement(f'w:{edge}'); el.set(qn('w:val'),'none')
# 再逐格加线(sz 单位是 1/8 磅)
表头每格:top=12, bottom=6
末行每格:bottom=12
注意:t.style = 'Table Normal' 会 KeyError,python-docx 里没有这个样式名,不要设 style
六、插图
图的内容规则
- 图内不放标题,标题由图题负责,否则重复
- 线色统一墨蓝黑
#1F2933,设备白底深框,功能区用浅色底(四色以内) - 连线走正交折线,箭头用实心三角,线名压在线上并加白底
- 时序与曲线类图用真坐标轴:刻度、单位、网格虚线、阶段标注 ①②③
- 黑白打印要能分辨,靠线型与填充,不靠颜色
- 虚线框标注"旋转部分"时,必须把该部分所有部件都框进去
图的尺寸规则
| 图类型 | 最小宽度 |
|---|---|
| 原理图、框图、接线图 | 12 cm |
| 时序图、曲线图 | 11 cm |
低于 10 cm 时图内字相当于 6 pt,打印看不清,宁可加内容或减字数,不要压图
出图与自检
按最终印刷尺寸出图:figsize = (w * 0.78, h * 0.78),输出 600 dpi PNG
三类自检必须为 0
- 文字溢出:文字包围盒超出方框 94%
- 图元越界:图形元素超出
xlim / ylim(越界就是被裁掉,图会缺块) - 贴边:图片四周 3 px 内有暗像素
同时导出 SVG(rcParams['svg.fonttype']='none'),文字保持可编辑,供后续修改
七、字体
只用三种:宋体、黑体、Times New Roman
python-docx 默认模板会残留以下字体声明,正文根本不用,但 WPS 会报"缺失字体"
Courier(在 fontTable、styles 里)MS 明朝(日文明朝体,在 theme1.xml 与 fontTable 里)Calibri、Cambria(主题字体)
交付前必须清理:重写 fontTable 只留三种字体,主题 major/minor 字体一并替换,空的 ea / cs 补宋体
清理后自检输出应为"残留非常用字体:无"
八、分页与规避排版缺陷
- 章标题用段落属性"段前分页",不要插手动分页符(排满时会多出空白页)
- 二级标题、三级标题、图片段落设"与下段同页",避免标题孤悬在页底
- 每页文字量自检,低于 180 字的正文页就是缺陷页
- 消除孤行页的顺序:先查"与下段同页" → 再补写内容把该页填满 → 最后才缩图
- 补写内容只能写原理层、判据层内容,不编具体数值
九、交付前自检清单
# 转 PDF
libreoffice --headless --convert-to pdf --outdir /tmp 报告.docx
# 页数
python3 -c "import re;print(len(re.findall(rb'/Type\s*/Page[^s]', open('/tmp/报告.pdf','rb').read())))"
# 每页字数(低于 180 的正文页要处理)
for i in $(seq 1 13); do
echo -n "第${i}页 "; pdftotext -f $i -l $i /tmp/报告.pdf - | tr -d '[:space:]' | wc -m
done
# 渲染抽查
pdftoppm -r 120 -png /tmp/报告.pdf /tmp/pages/p
然后看图确认四件事:图内字是否清楚、有无字压线、箭头是否指空、虚线框范围与说明是否一致
十、常见坑
| 现象 | 原因 | 处理 |
|---|---|---|
| 标题左侧出现小黑方块 | 套了 Heading 样式 | 改正文样式加大纲级别 |
| WPS 提示缺字体 | 模板残留 Courier、MS 明朝 | 清理 fontTable 与主题字体 |
| 目录是空的 | 标题没设大纲级别 | 设 outlineLvl |
| 图片缺一块 | 画布范围设小,图元被裁 | 查越界自检,改 xlim 或改图宽 |
| 章节末页只有两三行 | 内容差几行溢出 | 补写内容或收紧措辞,别压图 |
| 多出空白页 | 手动分页符遇上排满的页 | 改用段前分页 |
| 三线表出现竖线 | tblBorders 未完全清除 | 六个边全部设 none 再逐格加线 |
十一、工具
| 文件 | 作用 |
|---|---|
report_style.py | 排版引擎:标题、正文、图题、三线表、封面、目录 |
gen_figs.py | 出图脚本,含文字溢出与越界自检,同时输出 PNG 与 SVG |
build_report.py | 正文骨架,正文内容在这个文件里 |
build_toc.py | 两遍构建,回填带页码的静态目录 |
strip_hf.py | 彻底删除页眉页脚部件 |
fix_fonts.py | 清理残留字体声明 |
fit_layout.py | 图宽诊断,只在排查孤行页时用,不要直接采信结果 |
技能包位置:~/.hermes/skills/productivity/cn-technical-report-docx/
共享副本:~/AI-memory/skills/cn-technical-report-docx/
十二、交付
- 成品:
~/成果/赫梅斯/<核电|电气|其他>/<YYYY-MM>_第N期_<题名>.docx - 同时给 PDF(字体已嵌入,移动端看这个)
- 图源文件单独一个目录:SVG + 出图脚本 + README,便于后续改图
- 正文要点归档到 Notion「技术学习归档」
