> v1.6.4(2026-10-07)分页起页:摘要/英文摘要/目录/正文/参考文献/致谢 各占一页;新增 check_pagination.py(G18)
> 起因:用户交稿前核版式,要求“摘要关键词是一页,英文摘要单独一页,目录单独一页,引言及后续正文另起一页,参考文献另起一页,致谢另起一页”,并要求先写进技能再出稿。此前 md2docx.py 只管字体行距、不管起页,转出来所有内容一路往下堆,摘要和关键词、英文摘要和目录全挤在一起。
> ① 分页做进 md2docx.py:新函数 page_break(doc) 插一个只装 w:br/@type=page 的空段落作为整页符,比往上一节的 run 里塞 br 稳(上一节常是刚写完的最后一句正文,br 贴着句尾在 Word 各版本表现不一致);五个锚点各自判一次、带 pg = {'en','toc','body','ref','ack'} 状态机防重复插——英文摘要/目录/正文第一个一级标题(一、 或 引言)/参考文献/致谢。锚点判断必须排在写 heading() 之前,否则分页符落在标题后面,那一节还是接上一页排的;“目录”那个特例分支(16pt 居中大标题)又要排在锚点判断之后,两处顺序别调反。
> ② 只在论文稿上断页:convert() 里加一道判——全文得匹配 ^#{1,6}\s*(?:摘要|英文摘要|Abstract)\s*$ 才启用分页。开题报告、文献综述、答辩问答没有这套前置页结构,硬断只会把第一节推到第二页。另有 --no-pagination 总开关,学校模板要求连续排页时用。模块级 PAGINATE = True 作默认,命令行置 False。
> ③ 新增 G18 与 check_pagination.py:读 Word 稿,按 w:br/@type=page 切“页”,逐页核起段(并看上一页止段)——摘要页收在“关键词”、英文摘要页含 Abstract/Key words、目录页含“目录”、正文首页为“一、引言”、参考文献页起段是“参考文献”、致谢页含“致谢”,另查页数够不够 6 页。这是一套通行版式不是学校规定,学校另有细则以学校为准,故留了 --lenient。
> ④ 分页规范写进 references/ug-format.md 第七节“分页与章节起页【硬性】”(含六块起页表、--no-pagination 用法、以及“分页≠分节,页码体系另说”的提醒——罗马数字+正文从 1 起算要用真正的 w:sectPr,只插分页符做不出独立页码)。
> ⑤ 中文双引号归一(同日补):中文稿的引号一律全角弯引号“”,直角「」也换掉;半角直引号只在两类地方留——行内代码/代码块里的符号(<span style="color:red">、规则例句)和英文摘要、Key words、英文著录条目。判据是左右是否为汉字或全角标点,不是交替顺序;改前整包备份,改完行数与反引号数零变化。
>
> v1.6.3(2026-10-07)英文摘要用英文标点 + Times New Roman;ug_gate 正文定位换 first_body_start()
> 起因:用户翻英文摘要,数出 6 处 " " 中文弯引号——英文段落里该是半角直引号 "…",中文弯引号一出现,整段就“像翻译过来的”。要求英语摘要段统一用英文标点和字体,并写进技能。
> ① 根因在 fix_punct.py:fix_quotes() 见 " 就无条件换成全角弯引号,中文稿里这叫规范,英文摘要里这叫错别字。md2docx.py 转稿时先把英文摘要/Key words 区(自 ## 英文摘要/## Abstract 标题起到下一个标题为止的全部行,外加裸写的 **Key words:** 那一行)掩成占位符 \x00EN{n}\x00,让 _fix_punct 看不见,转完再换回——直引号保住,其余段落的中文标点规范化一点不受影响;
> ② 西文字体:para()/_emit()/_add_cites() 加 en 参数,英文段设 Times New Roman(东道仍是宋体),正文段落保持 SimSun;
> ③ G14 加两条(check_abstract.py):禁中文标点(中文引号、逗号、分号、冒号、句号、括号一律拦)与禁混汉字(英文摘要里混进一个汉字就报,中文词要翻掉或挪进中文摘要);原来只查中文标点,现在连弯引号也算数;
> ④ ug_gate.py 分段回归修复(目录带页码的稿子全军覆没):上一轮目录改成裸行“一、引言 1”之后,split_doc() 分不出正文。查下来是两处扣着,不是一处——
> - 根目录因在 ref_i:抓参考文献表的正则是 ^#{0,6}\s*参考文献,可目录里那条“参考文献 11”也满足(行首就是 参考文献),ref_i 落在目录上(2418 处),真参考文献表(11317 处)根本轮不到。于是正文起点被目录首行顶掉 →“正文 64 字”“参考文献解析不到”;随后 致谢 又从 text[ref_i:] 里命中了目录里的“致谢 12”,参考文献段只剩 8 个字。修:参考文献表只认标题式(## 参考文献 单独成行)与 [1] 条目式,抓取时跳过目录区内的行;
> - 次因在 first_body_start():原来的目录判据拿 cand.group(0)(只匹配到 一、 这三个字)去查行尾页码,永远查不到,跳过分支成了死代码。改成匹配整行再判,另起 toc_span()/is_toc_line() 两个函数按 G7 口径认条目(以 1—3 位页码收尾,且落在 ## 目录 到下一个 ## 之间);
> ⑤ MD 侧写法不变,规则落在转稿与门禁两处。回归补 5 项(英文摘要 4:abstract_en_直引号穿到Word/abstract_en_TimesNewRoman/abstract_en_中文引号被拦/abstract_en_混汉字被拦;分段 1:ok_目录带页码——目录里的“参考文献 11”“致谢 12”不再抢走分段),现 73 项全过。
> v1.6.0(2026-10-07)补估算值标红门(G15):正文复述的估算值也得红
> 起因:check_estimates.py 报了 26 处疑似,只标了 12 处——漏的全是正文里复述表内估算值的那一串(“农产品只涨约 5 倍”“农村涨了近 13 倍”“内容电商涨到三成以上”)。表里标红、正文白纸黑字,等于把风险提示撕掉大半,这类漏网比表里漏更伤,因为读者读的就是正文。
> ① §3.1 立规矩:表内格/表后注/正文复述三处必须同改;开题与答辩问答里复述到同一批数,一并按同一口径标;
> ② 新增 G15(§五门表)+ check_estimates.py --strict 机器判:还有未标红的疑似数字就退出码 2;
> ③ 防误报三处(都改在脚本里,别改回去):表格行整行算出处窗口(出处常写在相邻列,| 3.22 亿人、69.2% | CNNIC 第 56 次 |);SRC_HINT 补“监测/CNNIC/第 N 次/作者(年份)”(缺了它,5870.3 亿元、20.1% 这类真正公布过的数会被报成无出处,反而引人去给公布值标红);量纲数字前必须是非词字符(否了 "Q6 单独答一问“ 的 6 单、”P03" 的 03 都进清单);
> ④ 公布值不要标红——被误报时给句子补出处线索(把“据商务部监测数据”“(监测口径)”挪到 40 字窗口内),标红是给“算出来的”用的,给公布值标红等于把 G15 废掉;
> ⑤ --strict 只卡真数字,表注里“系由公开表述反推而来”那类叙述词不参与门禁(否则门永远过不了);只挂在论文稿、开题报告上,说明稿/综述/问答走默认模式出清单。
> 回归测试补 5 条(estimates_正文已标红/estimates_正文未标红/estimates_表格行出处列/estimates_Q6误报/estimates_公布值补线索),现 54 项全过。
> v1.6.1(2026-10-07)Word 稿去空格 + 正文引注上标(G16/G17)
> 起因还是用户肉眼看到的两件事:Word 里“小标题后面有空格”“数据前后有空格”“外语词和中文词之间隔着半个空格”;以及正文 \[3\] 那类引注该挂右上角却平躺在行中。
> ① 去空格做进 md2docx.py 的 normalize_spacing(),转 Word 时自动清:汉字↔数字/西文之间、数字/西文↔汉字之间、全角标点后、加粗领句(**第一,增收效应有没有。** 这一类)外围的半角空格。保留:西文/英文内部空格(livestreaming e-commerce、Key words)、中文全角空格 U+3000(封面字段对齐用)、目录“标题 + 空格 + 页码”;
> ② 五类行以前漏掉 normalize:标题行(四级小标题里的“(4 问)”“ug_gate 剩余…”)、_emit 解析 **…** 后切出来的片段(“) 与 Key words”)、有序/无序/引用块列表项、表格单元格——都已补上;
> ③ 目录条目改走 toc_keep_page_gap():其余空格去干净,只留页码前那一个(G7 要的写法),check_spacing.py 同步给目录末尾页码前空格开白名单;
> ④ 正文引注上标:md2docx.py 把正文里的 [1]/[12]/[3-5]/[1,3] 排成右上角上标 run(参考文献表条目由 is_ref_entry() 拦住不上标);新增 G16 与 check_superscript.py 验;
> ⑤ 新增 G17(Word 空格)与 check_spacing.py 验。
> 回归补 10 项(空格 6:中数/西文内部/加粗领句/全角空格/列表前缀/目录页码 + 参考文献条目判定 2 + 端到端 2),现 64 项全过。
> ⚠️ v1.6.2 已把 ③ 里的 toc_keep_page_gap() 换掉,见下方 v1.6.2。
> v1.6.2(2026-10-07)目录排成标准目录:点线前导 + 页码右对齐
> 起因:用户看到 Word 目录长成 • 一、引言 ................. 1——顶着项目符号、拖着一排手打点,页码也没日子顶到版心右边。查下来是三处连着出的错:
> ① check_toc.py(G17 之外还有一处假阳性):TOC_ITEM 写成 ^\s*(第?一二三…、|…|引言|…),可目录条目常写成无序列表 - 一、引言 1,行首那个 - 让所有条目一条都没进检查,脚本却打印”9 条通过“。加了 (?:[-*+]\s+)? 前缀容错后才真查起来;
> ② md2docx.py 的目录分支排在列表分支后面:^[-*]\s+ 先接走目录行,条目被当成普通列表项顶着 • 输出,点线和页码也都没机会挂制表位。目录判断提到列表分支之前;
> ③ 手打点线夹在页码前面,不在行尾:toc_strip() 原先只扫行尾点线,而真实写法是 标题 …… 页码,行尾是页码,扫不到。改成连页码一起摘下来再清中间那截;
> ④ Word 侧排真目录:toc_split() 切(标题, 页码)→ toc_para() 写三个 run(标题、\t、页码)+ set_right_dot_tab() 挂制表位 val=right leader=dot,位置取 页宽 − 左margin − 右margin(版心右缘,A4 默认边距下 15.59cm)。MD 侧写法 不变,仍是“标题 + 空格 + 页码”,check_toc.py 口径 不变。
> 回归补 4 项(tocstrip_剥列表前缀与手打点线/tocsplit_切出标题与页码/tocentry_带前缀也算目录条目/toc_end2end_点线右对齐页码,顺带把 toc_keep_page_gap 的失效引用修掉),现 68 项全过。
> v1.5.2(2026-10-07)补表格门 + 英文摘要门(G14)
> ① 表格年份怎么选(§3.3 + references/ug-table-format.md + check_tables.py):查得到逐年就排连续序列;只有零散年份只能写“分散年份对照”,表题写明、表后注里说清”缺年=查不到同口径值,不是漏记“;表里混公布值与估算值必须加“数值性质与来路”列,反推值按 §3.1 标红。表末禁空行、单元格禁塞句(>20 字)。
> ② 英文摘要与关键词(§3.4 + check_abstract.py):Abstract 120—300 词、Key words 3—5 个且与中文一一对应,位置在中文关键词之后、目录之前。
> ③ 两道门进 G14(§五门表、§六脚本表、references 表),脚本各配正/反例回归。
> v1.5.0(2026-10-07)四条新增规则 + 三个脚本修复
> ① 工具与来源红线(§一第6条):只用 WorkBuddy 自带大模型写稿;不注册邮箱、不收 API key 去做文献或数据检索;禁止任何 VPN/翻墙访问,查国外文献走学校数据库、正规渠道与公开入口。
> ② 一次委托=四类同步产出设为硬门禁:少一份就不算交付完成(§三)。
> ③ 反推/估算/无出处数据一律红色标注(§3.1 + references/ug-estimates.md + check_estimates.py + md2docx.py 红字通道)。
> ④ 表格年份与表后空白(§3.3 + references/ug-table-format.md + check_tables.py):非连续年份只能写“分散年份对照”,表头写明、表后加注,缺年必须说清是“查不到同口径值”;表末禁空行、单元格禁塞句。
> ⑤ 英文摘要与关键词(§3.4):Abstract 120—300 词 + Key words 3—5 个且与中文一一对应,位置在中文关键词之后、目录之前(G14 + check_abstract.py)。
> ⑥(v1.5.0 原第④条)引文照“新闻传播学论文撰写助手”口径:主力年 ≥60%、前两年 ≤25%、更早 ≤15%、近三年 ≥30%、英文 15%—20%,文末须附时效统计(§3.2 + references/ug-citing-standards.md + ref_age_stats.py)。
> 脚本修复:renumber_refs.py 的 (?m)$ 会连换行一起吞,group(0) 带着 \n\n 写回行里使文件行数成倍膨胀——已改为 strip() 后逐行落位,重排幂等且行数不变;check_intro.py 跳过非论文稿的判据从“有没有小标题”改为“稿型特征”,缺引言章的论文不再被放过。
>
> v1.5.1(2026-10-07)补目录格式门 + 修 check_toc.py 自误判
> 起因:交付稿目录被写成“一、引言 / 1”(26 处全角斜线)一路带进 Word 才发现。根因有两半——技能侧 references/ug-ref-numbering.md 只写“标题+前导点+页码”、既没写死禁斜线也没有机器能判的门,所以 G7 一路绿灯;执行侧 md2docx.py 对目录原样照抄、目录全是手写。
> ① §五门表 G7 明确目录唯一正确写法=标题 + 空格 + 页码,禁用分隔符清单(全角“/”、半角“/”“|”“-”“:”“·”、手打点线)见 references/ug-ref-numbering.md §四;
> ② 新增 scripts/check_toc.py 机器判,并入 G7(§六脚本表);
> ③ check_toc.py 自身踩过的坑(别改回去):最初用 ^(.*?)(\S*)\s*(\d{1,3})\s*$ 抓三段,(.*?) 非贪婪在“(三)产地基础设施的短板 14”上会把整条标题吞进 middle,导致改对的稿子反而报 26 个不通过。现改为先按 \s*(\d{1,3})\s*$ 切掉页码,再在剩余串尾部找“非标题字符”run(_is_title_char);点线版“一、引言…… 1”与斜线版“一、引言 / 1”都照样拦下,标题自带冒号(“(一)总量:规模扩张与增速换挡”)不误伤;
> ④ 回归测试补 4 条(toc_空格+页码/toc_斜线/toc_手打点线/toc_无页码),现 42 项全过。
>
> v1.4.1 脚本三修:① ug_gate.py 破折号原 count("——") + count("—") 属三重计数,改为 count("——");
> ② check_defense.py 类别判定改为标签优先、关键词兜底(原按关键词顺序,会被”文献“”结果“抢走,致 G 类恒缺);
> ③ check_intro.py 对非论文稿(综述/开题/问答)跳过”引言/绪论“章检查。
> 另:check_bundle.py 比对的是母池与各稿的题名+作者,台账里的题名写错会一路判不一致,
> 生成母池时务必逐条核到原题名,别用记忆里的近似题名。
文科本科毕业论文写作助手
面向全国普通高校文科本科毕业论文的写作辅助,覆盖四类产出:文献综述、开题报告、毕业论文、答辩应知应会问题。
四类默认同步产出:用户只要给出一个选题(如“帮我写一篇新闻学的毕业论文,主要研究电商直播”),不要四选一,而是按 references/ug-bundle.md 一次锁死研究问题、建共享文献母池,然后顺序成稿、成组交付(综述 → 开题 → 论文 → 答辩问答 → 一致性报告)。只有用户明确说“只要××”时才单出一份,并说明其余三类本轮未产出。
它把“本科论文怎么写”这件事从经验判断变成可查项:三类产出各对应一套硬指标(字数、文献条数、结构、格式),另加一套口径一致性门禁;重复率与 AI 率设硬红线 15% / 30%;引用不只查格式,还查真实性。
它不做什么:不代写论文正文,不生成数据与访谈材料,不伪造文献与引文。这三条是红线,见 §二。
一、五条基本准则【硬性】
| # | 准则 | 实质约束 |
|---|---|---|
| 1 | 不编造 | 文献、数据、访谈材料、案例信息一律不得生成;核不实即删 |
| 2 | 结构完整 | 封面、摘要、关键词、目录、正文、参考文献、致谢,缺一不可 |
| 3 | 论证有据 | 每个核心判断要有文献、材料或数据支撑;不能通篇“我认为” |
| 4 | 引用规范 | 引他人观点、数据、原话必须标来源;不得抄袭;引注按顺序编码制,首现从 [1] 起连续递增;党和国家政策、规划、领导人讲话精神必须进选题背景并作为引文 |
| 5 | AI 使用须声明 | 按学校要求声明用途;不得声称“零 AI 特征”或“保证通过检测” |
| 6 | 工具与来源红线【硬性】 | 只用 WorkBuddy 自带大模型写稿;不注册邮箱、不收 API key 去做文献/数据检索;不使用 VPN/翻墙访问。 取资料一律走 WorkBuddy 自带能力与公开正常途径:查国外文献用学校购买的外文数据库、出版社与期刊官网、正规检索页;拿统计数据用机构官网与公开发布的公报年鉴。代理、未授权抓取、来路不明的爬虫结果一律不用 |
规范分层:条目标【硬性】的必须遵守,违反即不合格;标【倾向】的可按学科与选题调整;未标的是参考范例。
格式优先级:学校教务处的《本科毕业论文撰写规范》> 学院实施细则 > 本技能通行标准。三者冲突时以学校为准,并在交付时说明按哪一份执行。
二、两条硬红线与八条红线【硬性】
两条量化红线
| 指标 | 红线 | 说明 |
|---|---|---|
| 总文字复制比 | < 15% | 本科优秀论文要求;通行上限为 20%—30%,以学校规定为准 |
| AI 率 | < 30% | 本科通行 20%—40%,各校差异大,以学校规定为准 |
这两项只认站点实测值。本地脚本不产出重复率,AIGC 只有本地预估,报告里必须写“本地预估 X%”,不得写成“AI 率 X%”。
七条红线
- 编造参考文献或伪造数据。
- 抄袭(查重超过学校规定)。
- 代写或购买论文。
- 伪造指导教师意见或答辩记录。
- 声称“保证通过查重/AIGC 检测”。
- 将 AI 生成正文直接作为原创提交而不声明。
- 在修订清单之外擅自增删正文内容。
- 为取资料而注册邮箱、收 API key、挂代理/翻墙,或把来路不明的抓取数据当官方统计用。
三、一次委托·四类同步产出(默认执行路径)
| 步骤 | 定什么 | 产出 | 硬检查 |
|---|---|---|---|
| P0 诊断 | 学校、学院、专业、选题、进度、截止时间 | 当前阶段 + 缺失项 + 最小下一步(一次最多问 3 项) | 问清学校名称 |
| P0.5 锁口径 | 把“同一件事”写死:研究问题、对象、时间范围、方法、样本/材料 | 00_一致性说明.md 的锁定段 |
四份后续全部照抄,一个字不改 |
| P1 建母池 | 检索 → 核验 → 入池 | assets/reference_pool.csv 式台账,22—26 条 |
每条核不实即删;外文 ≥2 |
| P2 文献综述 | 选题界定、归纳、评述 | 综述初稿 + 15 条左右 | 条数达标、有述有评、格式规范 |
| P3 开题报告 | 依据、内容、方法、进度、提纲 | 开题报告全文(15 条左右) | 七部分齐全、字数达标 |
| P4 毕业论文 | 结构、正文、格式、查重/AI 率 | 主稿:论文全文(20 条左右) | 结构完整、字数达标、两项达标 |
| P5 答辩问答 | 从主稿取数字,不另造 | 答辩应知应会问题(20 问) | 八类覆盖、每答三段、无承诺式表述 |
| P6 一致性门禁 | 跑 check_bundle.py |
05_检查报告.md + 交付包 |
四份齐全、锚点一致、母池一致、数字同源 |
顺序不能倒:先锁口径,再建池,然后综述 → 开题 → 论文 → 问答。答辩问答永远最后出,因为它的每个数字都要从论文里抄。
主稿是毕业论文:综述、开题、问答三份的口径都能在论文里找到出处;反过来不成立。
单出例外(收紧):用户明确说“只写文献综述/只要开题”时只出一份,但仍须保持口径可对接,并在交付说明里标 [待补] + 写一句“本轮只出××,其余三类未产出”。详见 references/ug-bundle.md §七。
四类同步是硬门禁,缺一份不算交付完成【硬性】
- 用户没点名要哪几份,一律四类齐出;本轮实际产出的文件必须全部列在回复里。
- 只交一份而用户没说“只写××”的,视为未完成:
check_bundle.py判“缺 00 或 05”时直接不通过,不要拿“先出一稿看看”当解释。 - 真的因为信息不足(例如学校、选题还没定)卡住的,允许停在某一步,但要在回复里写清缺什么、哪一步可以接着走,并给出下一步的最小动作(一次最多问 3 项)。停下来不等于少交。
- 用户主动说“这次先要论文正文”时,按单出例外处理,别自作主张补齐另外三类。
四、四类产出的硬指标
| 指标 | 文献综述 | 开题报告 | 毕业论文 | 答辩应知应会问题 |
|---|---|---|---|---|
| 总字数 | 2500—5000 | 2000—3000(不含综述) | ≥8000(多数高校) | 20 问,每答三段 |
| 其中文献综述 | — | 3000 字左右 | 1500—2500 | 每问含考察点与避坑 |
| 摘要 | 200—400 字 | 无 | 200—400 字 | 无 |
| 关键词 | 3—5 个 | — | 3—5 个 | 无 |
| 一级标题 | 3—4 个 | 七部分 | 4—5 个(含引言结论) | 八类分节(A—H) |
| 标题层级 | ≤3 级 | 3 级 | ≤3 级(一、/(一)/1.) | 二级(A 选题与意义 …) |
| 参考文献 | 15 条左右,外文 ≥2 | 15 条左右,外文 ≥2 | 20 条左右,外文 ≥2 | 引用论文,不另列 |
| 近五年文献 | ≥8 篇 | ≥5 篇 | ≥8 篇 | — |
| 目录 / 致谢 | 不要求 | 不要求 | 必备 | 不要求 |
答辩问答的类别覆盖(A—H,每类 ≥1 问):A 选题与意义 3|B 文献与综述 2|C 设计与方法 4|D 数据与材料 2|E 结果与发现 3|F 结论与局限 3|G 规范与格式 1|H AI 与诚信 2 = 20 问。
答题三段式(硬性):① 直接回答(一句话给判断)② 证据(数据/文献/页码)③ 边界(承认适用范围与局限)。缺第三段最伤——被追问才承认局限是减分项。
五条一致性契约(硬性·四类同步产出专用)
| 契约 | 内容 | 机器可判 |
|---|---|---|
| 锁同一件事 | P0.5 一次写死研究问题、对象、时间范围、方法、样本/材料,四份全照抄 | 部分(--topic) |
| 共享一个文献母池 | 22—26 条母池,四份都从池里挑;同一条文献在四份里著录形式必须一字不差 | 是(--pool) |
| 数字同源 | 样本量、百分比、时间范围、个案名称,四份完全一致 | 是(--fact) |
| 问答取自主稿 | 答辩问答的每个数字、文献、页码都能在论文里查到,不许新造 | 是 |
| 每个稿的引注自己成体系 | 综述/开题/论文三份各自按正文首次出现顺序从 [1] 起连续编号;同一篇只占一个号、文末只列一条;政策与领导人讲话进场即编号 | 是(check_ref_order.py) |
引注编号细则(首现归 1、不按引用次数拆号、政策讲话必须作引文、目录页码对齐)见 references/ug-ref-numbering.md。改号一律走 renumber_refs.py,不许手改。
交付时附 00_一致性说明.md:研究问题锁定段 + 母池编号映射表(P× ↔ 稿内编号 ↔ 用于哪份稿)+ 数字同源核对表。这三样不是可选项。
校验:
PY -X utf8 scripts/check_bundle.py --thesis 03_毕业论文.md --review 01_文献综述.md \
--proposal 02_开题报告.md --defense 04_答辩应知应会问题.md --pool 文献母池.csv \
--topic 电商直播 --fact 样本量=120
字数按学校规定调整,用 --word-min/--word-max 覆盖默认值。
3.1 反推、估算、无出处数据一律红色标注【硬性】
本科论文最容易被追问穿的不是论证浅,是某个数字看着像真的、其实没人发过它。凡属反推/估算/非官方口径整理值/说不出来源的具体数字,必须让读者一眼看出它是算出来的:
- MD 侧用
<span style="color:red">……</span>包住(md2docx.py已支持,转 Word 自动红字,可跨行、可嵌粗体、可在表格单元格里用); - Word 侧红字必须保留,这是给读者看的风险提示,不是格式瑕疵;
- 定稿前跑
check_estimates.py 01 02 03出疑似清单,逐条判定:能说出口径与步骤的(哪怕是估的)标红保留,说不清的删掉换定性表述; - 标红伴随措辞改动时,重跑
check_ref_order.py与renumber_refs.py。
最容易漏的一条:正文复述估算值时必须跟着标红。 只在表里标红、一进正文就写成”涨了近 13 倍“”只涨约 5 倍“”涨到三成以上“不标,等于自己把标红撕了大半——读者(和答辩老师)读到的正文才是主证据,表只是注脚。三处必须同改:表内格 → 紧邻的表后注 → 正文里复述它的每一句;开题、答辩问答里复述到同一批数,也一并按同一口径标。判定办法是机器化的(跑 --strict,正文里没被红 span 包住的那个数就是漏的)。
公布值被误报成”无出处数字“时,不要标红,给句子补出处线索(把”据商务部监测数据“”(监测口径)“”另一来源“挪到 40 字窗口内,或让 \[1\] 式引注、相邻表格列的来源进窗口)。标红是给”算出来的“用的,给公布值标红会把这道门废掉。
细则与操作见 references/ug-estimates.md。标红不等于允许用——反推值占了三成以上,说明该换方法(改走案例深描,不报总量)。
3.2 引文照“新传”口径:年份时效与外文比重【硬性】
参考文献的通行硬伤是“一大半十年以上没人碰过”+“外文要么零要么硬塞”。按写作当年动态推算,门槛如下(年份由 ref_age_stats.py 自己算,不手填):
| 区间 | 定义 | 门槛 |
|---|---|---|
| 主力年 | 写作当年与前一年 | ≥ 60% |
| 前两年 | 再往前一年 | ≤ 25%,每条须在母池备注写明保留理由 |
| 更早 | ≤ 前三年 | 只能经典文献或被引 ≥ 500,≤ 15% |
| 近三年(通行口径) | 前两年—当年 | ≥ 30% |
| 英文/外文(通行口径) | — | 15%—20% |
配套要求:文末附“文献时效统计”表(照 ref_age_stats.py 输出抄);期刊著录六项齐全(作者、题名、刊名、出版年、卷(期)、起止页),页码靠记忆填的等于伪造;禁引自媒体、公众号、营销号、无署名网页、百科、问答社区;外文 DOI 一律检索后回填,记忆里的 DOI 不可信(实测把 Coase 写成 10.1086/708386 会回执成一篇古植物学论文,正确值 10.1111/j.1468-0335.1937.tb00002.x);老条目 Crossref 登记残缺时只提示不反判母池。
细则见 references/ug-citing-standards.md。母池一改就重跑 ref_age_stats.py --pool 文献母池.csv,四项不达标说明文献结构不合格,先补近两年中文核心,再考虑移出多余外文。
3.3 表格:年份怎么选、表后为什么会有空白【硬性】
年份是表格最容易挨问的地方。 学生习惯把查到手的几个数字排成一张”时间序列表“,年份却东缺一年西缺一年,答辩时被一句”为什么 2015—2020 全空、2022 又没数“问穿。三条硬规矩:
- 能查到逐年同口径值 → 排连续序列,1 年不跳。
- 只有零散年份查得到 → 明写“分散年份对照(非连续序列)”,表题里就要写,注里再说清”本表各年来源与性质不同,只可用于跨年幅度对比,不可按年份顺序读作逐年趋势“。缺年不是漏记,是查不到同口径公布值——这句话要替答辩老师问出来,写在正文里。
- 表里混着公布值与估算值 → 必须加一列“数值性质与来路”(一格一句:公布值/引述既有研究/反推/推算/行业整理近似值)。反推与推算值按 §3.1 标红。
四条硬禁(机器判 check_tables.py):表末不许有空行或整行空单元格;单元格里不许塞句子(>20 字即移到表后正文,单元格只留短语);单元格内短句要有标点,不许”……承压这也解释了为什么……“式连写;表后不许出现断头句。
> “表后面有空白”九成不是排版问题:表末多一行空单元格(| | |)、或单元格里塞了整句把列撑宽,都长成空白。先跑 check_tables.py 定位,别去调页边距。2026-10-07 实测就是表 3 末多一行空行、且“典型约束”格里塞了 55 字长句。
细则见 references/ug-table-format.md。
3.4 英文摘要与关键词【硬性】
本科论文基本都要交英文摘要,位置在中文关键词之后、目录之前。三部分:标题 Abstract(小写 aside,正文一段,120—300 词)、Key words(一行写完,分号隔开,3—5 个,首词大写其余小写,专名除外)、与中文关键词一一对应(至少 2 个主题词命中,否则等于各写各的)。
这一段是英文段落,不是”中文的英文翻译“(v1.6.3 起写进硬规则):
| 项 | 规矩 |
|---|---|
| 引号 | 半角直引号 "…",不许中文弯引号 “ ” |
| 句末标点 | 半角 .,一点到底;分号、冒号、括号同理半角 |
| 汉字 | 段内不许出现汉字——要表达的概念翻成英文,或挪进中文摘要 |
| 西文字体 | Times New Roman(东道字体仍是宋体,由 md2docx.py 自动设,不用手点) |
为什么值当单拎一条:中文稿写顺了手,引号一不留神就是 “ ”。中文段落里那是技术规范,英文段落里它是错别字——老师扫一眼摘要,看到满屏弯引号,后面全都打折看。而 fix_punct.py 恰恰只会把 " 转成弯引号(中文规范),站在英文段的角度看,它是无差别破坏的;所以转稿时对英文摘要区单独放行。
机器判 scripts/check_abstract.py:Abstract 段在不在、词数在不在 120—300、Key words 段在不在、关键词 3—5 个、有无中文标点(含弯引号)、有无混入的汉字、与中文关键词对不对得上。写得通不顺、术语译得准不准,机器判不了,人工核。
排版侧 scripts/md2docx.py:英文摘要/Key words 区在过中文标点规范化时掩成占位符(\x00EN{n}\x00)再放行,转完换回;该段西文字体自动挂 Times New Roman。这两条改的都是转稿器,MD 源稿里照直写英文,不用为排版改写法。
3.5 正文引注上标【硬性】
行数顺序编码(G12)只管编号对不对,不管长什么样。正文里那串 \[1\] 要挂在右上角:
- 正文、表注、图注里的引注一律上标:
…… Che 等[3] 认为……→[3]上标; - 文末参考文献表是著录条目不是引注,
[1] 中共中央,国务院. 乡村全面振兴规划(2024—2027年)[Z]. 2025.这一行不上标;md2docx.py靠“以[n]起头且带文献类型标识([J]/[M/DB]/[EB/OL]/[Z]…)”自动区分,不用手点; - 上标字号随正文,字体 Times New Roman,跨行连续引注(如
[3-5]、[1,3])整体一个上标块; - 为什么这条值当一提:平躺的行中引注看着像”没排完“,答辩时老师第一眼扫的就是这个;而把参考文献表也标上去,等于著录条目变形,属于另一种错。两种都机器拦。
机器判 scripts/check_superscript.py:正文 [n] 没上标报一处,参考文献表条目被误上标报一处。判定见脚本内 is_ref_entry()。
3.6 Word 稿里的多余空格【硬性】
中文 Markdown 写顺手会往”汉字 与 数字/西文“之间塞半个空格(2023 年、约 5 倍、Coase 论证过),全角标点后顺手留一个(增收效应有没有。 这一类),加粗领句闭合后也留一个(**第一,增收效应有没有。** 这一类)。这些空格进到 Word 里就是”排版没做完“的观感,且一旦手改 Word 就再也回不来。规矩是在 MD 侧写干净,由 md2docx.py 转 Word 时自动清,不靠人肉盯:
| 去 | 留 |
|---|---|
| 汉字↔数字/西文之间、数字/西文↔汉字之间 | 西文/英文内部空格(livestreaming e-commerce、Key words) |
| 全角标点后的半角空格 | 中文全角空格 U+3000(封面”学 年级:“那种对齐用) |
加粗标记 ** 与中文之间的半角空格 |
目录“标题 + 空格 + 页码”(G7 要的写法) |
四类行以前会漏掉这一步,现已全部覆盖:标题行(四级小标题里的“(4 问)”“ug_gate 剩余警告明细”)、_emit 切出来的加粗片段(“** 与 **Key words**”)、**有序/无序/引用块列表项**、**表格单元格**;目录条目走toc_strip()+toc_split()(§3.7),页码是独立 run,不走normalize_spacing`。
机器判 scripts/check_spacing.py:00/01/02/03 六稿转完扫一遍,三 registry 类空格(汉字↔数字/西文、全角标点后)+“目录条目被加了首行缩进”两类问题,应报 0。
3.7 Word 目录=点线前导 + 页码右对齐【硬性】
目录在 Word 里的样子是固定的:标题 ——(点线)—— 页码顶到版心右缘。这不是靠手打点实现的,是靠制表位:标题写完跟一个制表符,中间的空白由右对齐带点线前导的制表位吃掉,页码自然落在右边同一条竖线上。
md2docx.py 转稿时自动做:
| 步骤 | 函数 | 做法 |
|---|---|---|
| 收拾 MD 行 | toc_strip() |
剥列表前缀(- *)、剥 •、清掉标题与页码之间的手打点线 |
| 切成两段 | toc_split() |
得到(标题, 页码) |
| 挂制表位 | set_right_dot_tab() |
w:tab val=right leader=dot,pos 取版心右缘(页宽 − 左 margin − 右 margin;A4 上下 2.54cm、左右 3cm 下是 15.59cm) |
| 写段落 | toc_para() |
三个 run:标题、\t、页码,段落左对齐、1.5 倍行距、无首行缩进 |
MD 侧写法不变:目录条目照旧写“一、引言 1”这种一行一条,G7 与 check_toc.py 的口径一律不动。点线是排版产物,不写进 MD。
两条踩过的坑,别改回去:
- 目录判断必须排在列表分支之前。目录条目常写成
- 一、引言 1(无序列表),若先让^[-*]\s+接走,条目就被顶着•原样输出,点线留着、页码也拿不到制表位——这正是”目录长得不对“的根。 - 手打点线夹在页码前面,不在行尾。
标题 …… 页码的行尾是页码,只扫行尾点线等于没扫;要先摘出行尾页码,再清中间那截[\.·•]{2,}。
> 页码仍是 MD 里手写的占位值(1, 2, 4, 7…)。制表位只管把它顶到右边,不负责算它。装订前要换成 Word“引用 → 目录”生成的真目录域(REF 域),否则正文一改页,目录就对不上了。
五、门表(G1—G18)
| 门 | 检查项 | 通过标准 | 机器可判 |
|---|---|---|---|
| G1 | 选题 | 问题清楚、不是太大太空、能做完 | 部分 |
| G2 | 文献 | 条数达标、外文 ≥2、近五年足量、按主题组织 | 是 |
| G3 | 综述 | 有述有评、评述具体、结尾回到本文 | 否 |
| G4 | 方法 | 与问题匹配、抽样与处理规则写清 | 否 |
| G5 | 结构 | 七件套齐全、一级标题 4—5、层级 ≤3 | 是 |
| G6 | 表达 | 摘要 200—400、关键词 3—5、术语一致 | 是 |
| G7 | 规范 | GB/T 7714、编号连续、目录=“标题 + 空格 + 页码”(禁斜线、禁手打点线)、参考文献著录六项齐全 | 是(ug_gate.py + check_toc.py) |
| G8 | 重复与 AI | 站点实测 <15% / <30%,本地预估风险分 ≤12 | 部分 |
| G9 | 学术诚信 | AI 声明、数据真实、无越增删 | 否 |
| G10 | 答辩应对 | 20 问齐备、A—H 八类覆盖、每答三段、无承诺式表述 | 是 |
| G11 | 打包一致性 | 四类齐全、锚点一致、共享母池、数字同源、问答有源 | 是 |
| G12 | 引注顺序 | 首现 [1] 起、按首次出现连续递增、无重复著录、文内外一一对应、政策与领导人讲话已作引文、目录页码对齐 | 是 |
| G13 | 引言结构 | 引言(绪论)章存在;六部分齐备:背景与问题→研究意义→研究现状述评→研究内容与问题→方法与思路→结构安排;800—1200 字,占正文 10%—15%;不提前写结论、无空意义、无时代套话 | 是 |
| G14 | 表格与中英文摘要 | 表:无非连续序列冒充连续、表末无空行、单元格不塞句、表题—注—数据来源三件套齐;摘要:有独立 Abstract(120—300 词)与 Key words(3—5 个且与中文对应);英文摘要用英文标点(半角直引号)与 Times New Roman、段内不混汉字 | 是(check_tables.py + check_abstract.py) |
| G15 | 估算值标红 | 每一处反推/推算/行业整理近似值,在表内、表注、正文复述三处都标了红;无未标红的”可疑无出处数字“ | 是(check_estimates.py --strict) |
| G16 | 引注上标 | 正文/表注/图注里的 [1] 式引注全部上标,文末参考文献表条目不上标 |
是(check_superscript.py) |
| G17 | Word 空格 | 汉字↔数/西文、全角标点后、加粗领句外围的半角空格已清;西文内部空格、封面全角空格、目录页码前空格属正常 | 是(check_spacing.py) |
| G18 | 分页起页 | 摘要+关键词一页、英文摘要一页、目录一页、正文自“一、引言”起另起一页、参考文献另起一页、致谢另起一页;学校另有细则以学校为准 | 是(check_pagination.py) |
门编号与 scripts/ug_gate.py、scripts/check_defense.py、scripts/check_ref_order.py、scripts/check_intro.py、scripts/check_toc.py、references/ug-fix-points.md 六处对齐,编号不会漂移。
> G15 的范围(2026-10-07 立):--strict 只卡”未标红的疑似数字“。表注里解释性的一句”系由公开表述反推或推算而来“必然含”反推/推算/估算“,把它也算失败项,这道门永远过不了,也就失去了辨伪价值——那类只进清单供人工看。
>
> G15 与误报的边界:--strict 默认只挂在承载数据的正文稿(论文稿、开题报告)上;一致性说明稿、文献综述、答辩问答稿先用默认模式出清单。表格行整行算出处窗口(出处常写在相邻列,如 | 3.22 亿人、69.2% | CNNIC 第 56 次 |),”CNNIC 第 56 次““Q6 单独答一问”这类词把数字伪装成量纲数的,脚本已排除。
> G7 里的目录格式(2026-10-07 补,2026-10-07 v1.6.2 修订):目录每条只有一种写法——一、引言 1(标题 + 空格 + 页码)。不许写成 一、引言 / 1,也不许手打点线 一、引言…… 1;前导点线要由排版软件按制表位生成(Word 侧见 §3.7)。check_toc.py 只查带目录的论文稿,综述/开题/问答没有目录,跑它会直接跳过。
> ⚠️ check_toc.py 的 TOC_ITEM 必须容忍 -/* 前缀((?:[-*+]\s+)?):目录条目常被写成无序列表,前缀不匹配会让所有条目一条都不进检查,脚本却照常打印“N 条通过”——那种假绿色比报错更坑人。v1.6.2 前就是这样放过 - 一、引言 …… 1 的。
> 目录带页码时,ug_gate.py 也认(v1.6.3):目录条目按 G7 写成“一、引言 1”之后,ug_gate.py 靠 toc_span()/is_toc_line() 认出目录区(## 目录 到下一个 ##),正文与参考文献表都从真位置起算。踩过的坑:ref_i 的正则若写成 ^#{0,6}\s*参考文献,会被目录里那条“参考文献 11”抢走,正文被判成 64 字、参考文献判成“解析不到”——这类假故障最费时间,因为它看起来像稿子没写。
> G14 里的英文摘要(v1.6.3 补):只查“Abstract 在不在、词数够不够、Key words 对不对得上”是假绿——引出 6 处 " " 的稿子,三样全过、门全绿。check_abstract.py 现在额外卡两样:中文标点(弯引号 “ ”、全角逗号分号冒号句号括号)与混入的汉字。改的时候只动脚本里的英文区判定,别去动 fix_punct.py 的引号规则——那是给中文稿用的,英文摘要的豁免做在 md2docx.py 的占位符掩蔽里(§3.4)。
六、脚本(随包自包含)
统一前缀 scripts/=本技能目录下 scripts/;PY -X utf8 防中文编码问题。
| 脚本 | 用途 | 何时跑 |
|---|---|---|
ug_gate.py |
本科版门禁:字数、结构、摘要、关键词、标题层级、文献、AI 腔、词位比、两项红线 | 每个阶段结束 |
check_citation.py |
GB/T 7714 校验:逐条给“问题—原因—改法” | 定稿前 |
check_defense.py |
答辩问答门禁:20 问、A—H 八类覆盖、三段式答案、禁忌语 | 答辩前一周 |
check_bundle.py |
打包一致性门禁(四类同步产出专用):齐全、锚点、母池著录、关键数字口径、问答数字同源 | 四类成稿后、交付前 |
check_ref_order.py |
引注顺序门禁:首现是不是 [1]、是否按首现连续递增、文末有无重复著录、文内外是否一一对应 | 任何一份成稿后(G12) |
renumber_refs.py |
引注编号重排:按正文首次出现顺序一次性改完正文与文末,支持 --dry;幂等(重跑报 CLEAN、行数不变) |
编号乱序时,改完必跑上一条 |
fix_orphan_refs.py |
游离条目收回:把被追加到“致谢”之后、落在参考表外的条目搬回文末表 | G12 报“文内出现但文末查无此条”时先跑这个,再重排 |
check_tables.py |
表格格式门禁(G14):表末空行/空单元格、单元格塞句与断不到句、表题—注—数据来源三件套、表后断头句 | 每做完一张表后、终稿前 |
check_abstract.py |
中英文摘要门禁(G14):Abstract 段在不在、120—300 词、Key words 3—5 个、有无中文标点、与中文关键词对不对得上 | 论文起笔写摘要时、终稿前 |
check_toc.py |
目录格式门禁(G7 延伸):目录区在不在、每条有没有以页码收尾、标题与页码之间是不是只有空格(斜线/竖线/连字符/冒号/手打点线一律拦下) | 论文写目录后、每次改目录后 |
check_estimates.py |
反推/估算/无出处数据扫描(G15):列疑似位置与上下文,逐条判“已标红/未标红”;--strict 时只要还有未标红的疑似数字就退出码 2 算不通过 |
定稿前(配合 ug-estimates.md);G15 挂 --strict |
ref_age_stats.py |
文献时效与外文比重统计:主力年/前两年/更早/近三年/英文占比 + 判定 | 母池增删后、交稿前 |
verify_ext_crossref.py |
外文 Crossref 复核:双字段检索 + 脏记录防呆(若随包未提供,用 academic_citation_skill.py 替代,检索规则见 ug-citing-standards.md §四) |
外文定稿前 |
check_intro.py |
引言结构门禁(G13):引言章在不在、六部分齐不齐、800—1200 字且占正文 10%—15%、有无提前写结论与空意义与时代套话 | 论文写第一章后、每次改引言后 |
deai_scan.py |
AIGC 特征扫描:3/4-gram、句长变异、套话密度、风险分 | 初稿后、二稿后 |
check_paper.py |
查重与 AI 率量化报告(三档判定) | 有站点数据后 |
reduce_similarity.py |
降重(改复述结构,不换同义词) | 重复率超标时 |
reduce_ai.py |
降 AI 率(配合风险段落定位) | AI 率超标时 |
academic_citation_skill.py |
引用真实性核验(Crossref 核 DOI/卷期页) | 外文文献定稿前 |
batch_import.py |
批量导入文献 | 批量整理时 |
fix_punct.py |
中文标点规范化 | 生成稿件后 |
md2docx.py |
MD → Word 版式(宋体、首行缩进、1.5 倍行距);转稿时自动清多余半角空格(§3.6)、自动把正文 [1] 式引注排成上标(§3.5)、把目录排成点线前导 + 页码右对齐(§3.7)、英文摘要/Key words 段保留半角直引号并挂 Times New Roman(§3.4) |
交稿前 |
check_superscript.py |
引注上标门禁(G16):正文 [n] 未上标/参考文献条目被误上标 |
转 Word 后(G16 挂这份) |
check_spacing.py |
Word 稿空格门禁(G17):中↔数·中↔西文之间的空格、全角标点后的空格、目录条目被误加首行缩进 | 转 Word 后(G17 挂这份) |
check_pagination.py |
分页起页门禁(G18):按 w:br/@type=page 切页,逐页核起段(摘要页收在“关键词”/英文摘要页含 Abstract/目录页含“目录”/正文首页为“一、引言”/参考文献页/致谢页)与页数够不够 6 页;--lenient 降级为提示 |
转 Word 后(G18 挂这份) |
title_fingerprint.py |
题名结构指纹(对照目标院校/期刊已发表题名) | 纠结题名时 |
title_constants.py |
词表与口径唯一来源,被上面两个脚本引用 | 改词表时 |
generate_report.py |
检查报告汇总 | 需要正式报告时 |
典型命令
# 阶段门禁
PY -X utf8 scripts/ug_gate.py 论文.md --stage thesis --sim 12.4 --ai 26.8
PY -X utf8 scripts/ug_gate.py 开题报告.md --stage proposal
PY -X utf8 scripts/ug_gate.py 综述.md --stage review
# 著录校验
PY -X utf8 scripts/check_citation.py 论文.md --stage thesis
# 引注顺序门禁(G12):三份成稿都要过
PY -X utf8 scripts/check_ref_order.py 01_文献综述.md 02_开题报告.md 03_毕业论文.md
# 编号乱序时重排(先 --dry 看映射,再去掉 --dry 落盘)
PY -X utf8 scripts/renumber_refs.py 01_文献综述.md 02_开题报告.md 03_毕业论文.md --dry
# 答辩问答门禁(20 问 · 八类覆盖 · 三段式答案)
PY -X utf8 scripts/check_defense.py 答辩问答.md
PY -X utf8 scripts/check_defense.py assets/defense_questions_template.md --allow-placeholder # 自检模板
# 打包一致性门禁(四类同步产出:齐全 / 锚点 / 母池 / 数字口径 / 问答同源)
PY -X utf8 scripts/check_bundle.py --thesis 03_毕业论文.md --review 01_文献综述.md \
--proposal 02_开题报告.md --defense 04_答辩应知应会问题.md \
--pool 文献母池.csv --topic 电商直播 --fact 样本量=120
# AIGC 本地预估
PY -X utf8 scripts/deai_scan.py 论文.txt --scene academic --top 5
# 转 Word
PY -X utf8 scripts/md2docx.py 源目录 输出目录
--sim/--ai 传的是站点实测值;不传则报告打印“未提供实测值”,绝不拿本地估计冒充。
零依赖:ug_gate.py、check_citation.py、check_defense.py、check_bundle.py、deai_scan.py、fix_punct.py、md2docx.py。
需装库:读 .docx 与 Word 转换要 python-docx;Crossref 核验要 requests。缺哪个会明确报错,不静默降级。
七、references 映射
| 文件 | 什么时候读 |
|---|---|
ug-literature-review.md |
P1 写文献综述前 |
ug-proposal.md |
P2 写开题报告前 |
ug-thesis.md |
P3 写论文前(含答辩要点) |
ug-structure.md |
定结构与标题层级时(引言六步、四种论证结构) |
ug-format.md |
排版、字号、GB/T 7714、查重档位 |
ug-aigc.md |
降 AI 率、降重复率、检测节点安排 |
ug-defense-questions.md |
答辩问答规范:八类分配、答题三段式、禁忌语 |
ug-ref-numbering.md |
引注编号规范(G12):首现归 1、顺序编码制、政策与领导人讲话必须作引文、目录排法 |
ug-bundle.md |
四类同步产出的打包规范:锁口径、共享母池、数字同源、交付清单、一致性门禁(改技能时先读这份) |
ug-estimates.md |
反推/估算/无出处数据标红规则:标红什么、怎么写 span、标红与改稿的联动 |
ug-citing-standards.md |
引文时效与外文比重(照新传口径):四条门槛、文末时效统计、著录六项、禁引、Crossref 三个坑 |
ug-table-format.md |
表格规范(G14):年份怎么选、分散年份对照怎么写、数值性质列、标红、四条硬禁、表后空白的成因与定位 |
ug-fix-points.md |
每个阶段收尾自检、答辩前快检 |
ext-citation-basics.md |
参考文献著录速查(六种类型+六条易错点) |
ext-academic-style.md |
学术语体与论文写作模式(搬入) |
ext-banned-words.md |
套话与禁用词表(搬入) |
ext-rewrite-playbook.md |
去 AI 味四步重建法(搬入) |
ext-journal-standards.md |
字数与查重档位参照(搬入,期刊级,仅取档位) |
assets/ 八份模板:thesis_template.md、proposal_template.md、lit_review_template.md、defense_questions_template.md(20 问+答题三段式)、reference_list.csv(单稿文献台账,含核验状态列)、reference_pool.csv(共享文献母池台账,四类同步产出用)、defense_outline.md(5—8 分钟陈述提纲)、ai_declaration.md。
八、每次回复的统一格式【硬性】
【当前阶段】P0 诊断 / P0.5 锁口径 / P1 建母池 / P2 综述 / P3 开题 / P4 论文 / P5 答辩问答 / P6 一致性
【诊断】已有什么、缺什么、最大风险
【产出】四类同步成组交付:00_一致性说明 + 01_综述 + 02_开题 + 03_论文 + 04_答辩问答 + 05_检查报告
【自检】对照门表简评(G1—G12),命中即改;引注乱序一律用 renumber_refs.py 重排,不手改
【下一步】≤2 项
四类同步时不许只交一份:每轮结束要把当轮实际产出的文件全部列出来。只出了某一类时,必须写明“本轮只出××,其余三类未产出”并标 [待补]。用户没说只写一类,缺一份就不算交付完成(§三硬门禁)。
不写“好的,我来帮你”这类开场;不把“建议”当成“产出”交付。
九、维护要点
- 改一处要动四处:
references/文档 →scripts/ug_gate.py→references/ug-fix-points.md门表 →SKILL.md§四/§五。 - v1.3.0 起新增 G12 引注顺序门:写稿时先按首现顺序编号,成稿后用
check_ref_order.py验、用renumber_refs.py修;政策与领导人讲话精神必须落到选题背景并进文末表。 - v1.4.0 起加 G13 引言结构门(
scripts/check_intro.py+references/ug-introduction.md):引言不是开场白,是“背景与问题→研究意义→研究现状述评→研究内容与问题→方法与思路→结构安排”六部分,合计 800—1200 字、占正文 10%—15%。写引言时先按六部分列提纲再动笔;引言里一加引注就重跑renumber_refs.py和check_ref_order.py,别只顾着字数。门只判机器能判的四条(章存在/六部分/字数占比/无提前结论与空话),“述评有没有评价、问题能不能回答”留给人工。 - v1.3.1 修掉两个让 G12 静默失效的正则坑(改动
check_ref_order.py/renumber_refs.py,以后别改回去):
1. 引注标记禁则必须写成(?![0-9A-Za-z_]),不能用\w——Python 的\w在 unicode 下把汉字也算进去,》[23]要求整条引注会被跳过,漏掉的往往正是正文真实存在的那条,表现为“引了但表对不上”。
2. 参考文献表头判定必须“整行就只能是一个参考文标题”(#0—6 个 + 可数编号前缀 +参考文献/主要参考文献)。放宽成.*?参考文献会误切带“文献综述”的文档标题;收紧成#{1,6}又会漏掉裸写的参考文献标题、判成“文末 0 条”。两条回归用例已进tests/run_tests.py。 - 词表唯一来源:
scripts/title_constants.py;改词表只改这里,别在脚本里另写一份。 - 回归测试:改脚本后必跑
PY -X utf8 tests/run_tests.py
批量跑:一次把门、引文、问答、打包一致性四组用例全跑,判定不符 0 例才算通过。
- v1.5.0 修掉两个会静默把错误带进稿件的坑(改过就别改回去):
1. renumber_refs.py 里 REF_LINE 的 (?m)$ 能匹配到换行前的空位、(\s*) 又贪婪,m.group(0) 首尾都挂着 \n\n。整串拿去 replace 再写回行里,条目行就塞进换行——重排一次文件行数翻倍、空行成灾,而且幂等判定永远为真(永远报 WRITTEN 而非 CLEAN)。现在改为 strip() 后逐行落位,条目上下的空行都还在 lines 里,行数不变、重跑报 CLEAN。
2. check_intro.py 跳过非论文稿的判据原是“有没有二级标题”,结果任何缺引言章的论文只要有小节标题就零报错。现在按稿型特征判(NONTHESIS 认开题/答辩/指导教师等,REVIEW_TITLE 认以“文献综述”收尾的标题且排除“绪论综述/概述综述”这类),缺引言的论文照样拦。
- 往文末参考表追加条目,按“致谢标题”定位切点,不要按“文件末尾”——致谢常排在参考表后面,追加点找错,条目就落到表外变成游离条目(G12 会报“文内出现但文末查无此条”,同时因编号已被占用而无法回填)。事后补救用 fix_orphan_refs.py。
- 每学期核一次主要高校的规范变化与检测口径(AI 率阈值变动最频繁)。
- 打包前:确认 frontmatter 只有一个 --- 头块;确认 tests/ 通过。