sci-manuscript-formatter — 英文 SCI 稿件一键格式化
解决什么痛点
每投一个 SCI 期刊就要手动改一遍格式(参考文献样式、引文编号、章节名、摘要结构、关键词、图/表题注、字体行距、标题页、cover letter……),重复且易错。本技能输入 「期刊名 + 稿件 .docx(+ 可选 .bib/.ris)」,一次性把稿件与该刊规范对齐,产出投稿配套文件与「需人工核对」清单。
何时调用
- 「按 XX 期刊格式帮我改稿 / 投 XX 期刊 / 参考文献转成 XX 样式 / 帮我生成 cover letter 和 highlights」
- 用户准备向英文 SCI 期刊投稿,需要把现有稿件快速套成某刊模板。
一键执行(唯一入口)
PY=<python3,需已安装 python-docx>
SKILL=<本技能目录>
$PY $SKILL/scripts/run.py "<期刊名>" <稿件.docx> [<文献.bib|.ris>] [输出目录] [meta.json]
示例:
$PY $SKILL/scripts/run.py "Journal of Ethnopharmacology" 稿件.docx refs.bib
$PY $SKILL/scripts/run.py "Phytomedicine" 稿件.docx /tmp/out meta.json
输出目录默认 <稿件名>_<期刊>_formatted/,含:
- <稿件名>_<期刊>.docx —— 格式化稿件
- cover_letter.md / highlights.md / graphical_abstract.md / credit_statement.md
- formatting_report.md —— 务必交给用户审阅「需人工核对」项
> 参数按扩展名识别:.json→meta,.bib/.ris→文献,其余→输出目录。顺序任意。
已内置期刊(references/journals.yaml,11 刊)
| 期刊 | 出版社 | 参考文献样式 | 行内引文 | 摘要 |
|---|---|---|---|---|
| Journal of Ethnopharmacology | Elsevier | Vancouver 顺序编号 | [n] | 结构化(Background/Aim/Methods/Results/Conclusions) |
| Sleep Medicine | Elsevier | Vancouver 顺序编号 | [n] | 非结构化 |
| Phytomedicine | Elsevier | Vancouver 顺序编号 | [n] | 结构化(Background/Purpose/Methods/Results/Conclusion) |
| Autophagy | Taylor & Francis | Vancouver(max 6 作者) | [n] | 非结构化 |
| Blood | ASH | Vancouver 上标 | 上标 | 非结构化 |
| International Journal of Nursing Studies | Elsevier | Vancouver(max 6) | [n] | 结构化 8 节 / 400 词 |
| Journal of Advanced Nursing | Wiley | Harvard | 作者-年 | 结构化 6 节(Aim/Design/…/Impact) |
| BMC Nursing | BMC/Springer Nature | Vancouver | [n] | 结构化 4 节;Arial 11pt |
| Nursing Open | Wiley | Harvard | 作者-年 | 非结构化 |
| Emergency Nurse | RCNi | RCNi 专有(字母序不编号) | 作者-年 | 结构化 5 节 / 150 词 |
| Nurse Education Today | Elsevier | Elsevier name-date(year_paren: false) | (Author, Year) | 结构化 6 节 |
期刊自动扩充(v1.2.0):
# AI 代理抓好作者指南后(最可靠):
$PY $SKILL/scripts/fetch_journal.py "<期刊名>" --html 指南页面.html
# 指定 URL 直接抓取:
$PY $SKILL/scripts/fetch_journal.py "<期刊名>" --url https://...
# 无内容来源时尝试自动检索(DuckDuckGo + 出版社域名白名单):
$PY $SKILL/scripts/fetch_journal.py "<期刊名>"
- 持久化写入
references/journals_user.yaml(用户扩展库,内置库永不自动改写),条目带
_meta(spec_source / source_url / fetched_at / conflicts),后续请求直接离线复用。 - 已有条目重新抓取需
--force,覆盖前自动 diff 并备份(保留最近 3 份)。 - 检索失败或字段冲突:字段置 null(校验跳过)或降级出版社家族默认桩,报告强制告警,绝不臆造数值。
- 匹配规则:ISSN > 精确/别名 > 模糊(模糊只列候选需确认,不自动命中)。
meta.json 字段(可选,用于填充标题页与配套文件)
manuscript_title / authors / corr / corr_email / funding / ethical / coi / running_title / highlights / ga_caption / credit_roles / suggested_reviewers
参考文献来源优先级
.bib/.ris(最准)→ 直接渲染- 稿内嵌入纯文本 → 最佳努力解析(Vancouver 样式),报告标「请逐条核对」
- 均无 → 报告提醒补文献后重跑
底层引擎(纯标准库,零 pip 依赖,仅需 python-docx 处理 .docx)
references/reflib.py:parse_bibtex/parse_ris/parse_plain+render_segments(Vancouver/Harvard)+renumber_inline_numeric(支持多引文与区间折叠)+ 自带 YAML 子集解析器scripts/transform_docx.py:章节归一、摘要/关键词校验、图表题注重排、排版套用、标题页块scripts/build_package.py:cover letter / highlights / graphical abstract / CRediTscripts/run.py:编排入口
红线 / 局限(务必如实告知用户)
- 不替用户承诺学术内容:只改格式,不动研究结论、数据、图表本身。
- 占位符必须人工补全:
[[...]](单位全称、日期、伦理号等)。 - 纯文本文献解析仅供参考:字段可能不全,须逐条核对作者/题名/刊名/年卷期页。
- 结构化摘要需人工拆分:单段摘要不会自动切小节,仅提示。
- 图表相对位置:脚本只改题注文字,表题在表上方、图题在图下方需在 Word 中确认。
- 最终须人工终校:输出是「草稿级合规」,投稿前请用户按期刊稿约终校一遍。
- ⚠️ 已知缺陷(2026-09-23 实测,徐佩稿/Blood):① 稿内嵌入 APA 作者-年格式文献时,纯文本解析+Vancouver 渲染会产出重复片段+年份截断的乱码条目,不可直接交付——需人工重建参考文献或先转 .bib/.ris;② 行内引文重编号按「首现顺序」映射,若源稿文献列表并非首现排序或存在悬空引文(正文编号 > 列表条数),映射会错位——遇到此类稿件应保留源稿编号仅做样式转换并告警,投稿前由作者补齐文献后再重排。
- ③ 未收录期刊自动检索在离线/无网或白名单未命中时返回 URLError,降级为出版社家族默认桩且可能完全错配——实测
Aging Cell被错配为publisher: Elsevier / ref.style: vancouver,其真相是Wiley / 作者-年(Harvard)。凡未收录刊,务必先用 WebFetch 抓官方稿约核实 publisher 与 ref.style,再跑run.py,并把references/journals_user.yaml里的错配桩改成核实值(否则报告会谎称已套用而实际规范是错的)。
典型流程
- 确认期刊是否收录;未收录先
onboard_journal.py建桩并请用户补全规范。 - 确认参考文献形式(
.bib/.ris优先;内嵌则提示解析局限)。 - 运行
run.py生成格式化稿件 + 配套 + 报告。 - 将
formatting_report.md的「需人工核对」逐条转达用户,提醒补全占位符。 - 改某刊规范直接编辑
journals.yaml对应条目,无需改代码。