Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Typeset a finished academic Markdown manuscript into submission-ready and publication-preview outputs — WITHOUT altering any number, citation, or claim. Produces four artifacts: submission DOCX (pandoc + APA-7 reference-docx), submission PDF (LaTeX apa7 man: double-spaced, line-numbered, tables/figures end-placed), published-look preview PDF (apa7 jou two-column), and the clean Markdown. Fidelity is a hard script gate (exit 2, no --warn-only): every output is token-compared against its source an
.claude/skills/o0000-code-manuscript-typeset/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 160% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 366% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -3% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 528% | 0% |
把一篇已定稿的学术 Markdown 手稿排成投稿版 / 发表预览版的通用排版 Skill。它不做内容写作——内容属别的 Skill;它做的是版式变换:md → 投稿 docx / 投稿 PDF / 发表预览 PDF / 干净 md 四件,附忠实性声明、占位符清单、剥离报告。上游任意写作 Skill(元分析 L12、系统综述、empirical-imrad-writing 等)成稿后产一份 typeset_request.yaml 调用它;也有独立触发场景("把这篇稿子排成投稿版")。
> 第一可执行入口:§4 输入契约(typeset_request.yaml)+ §9 CLI。完整字段 schema 见 references/MANUSCRIPT-INPUT-CONTRACT.md,CLI 权威汇总见 README.md。
排版层不得改动任何数字、引用或 claim——一个都不行。 这不是一句承诺,是一条脚本断言:每件产物落盘前必过 fidelity_check——源(strip 后的 md)与产物(去 LaTeX 宏的 tex / 去 XML 的 docx 文本)逐 token 比对,两条硬门(退出码 2,该件不落、整体阻断,无 --warn-only):①任何在产物里出现、源里没有的数 → fail——忠实渲染从不凭空造数(实测 EXTRA=0),故任何注入或改动(含纯整数计数:研究数、PRISMA 记录数、千分位样本量、表格单元格计数)必现形;②任何载荷性数字或 DOI 缺失 → fail——载荷=数据形数值(效应量/CI/p 值/%/τ²/权重)+ 标签绑定关系(k= / N= / p< …,含关系符,比较符翻转 p<.001→p>.001 也拦)+ DOI。诚实边界(唯一未硬拦的方向):仅"纯删除"一个格式层合法重排的裸整数(参考文献页码 / DOI 内嵌年份 / 引擎另渲的标题计数,源里有产物合法省略)呈报供复核、不硬拦——改动永远拦,只有这类裸整数的静默删除落复核(详见 references/FIDELITY-DISCIPLINE.md §2/§4c)。
排版是版式变换,不是内容再加工。凡涉及改动数字 / 引用 / claim 的"优化"(顺手改个措辞、"修正"一个看着不对的数、自动翻译一句),一律不属于本 Skill 的职责边界——那是上游写作/核验 Skill 的事。实战范式一句话:"No verified number, citation, or claim was altered." 本 Skill 把它从"靠 agent 自觉 + 一句声明"升级为机器强制门,这是相对实战的核心增量。
名值绑定边界(诚实,不假装覆盖):fidelity_check 的逐字比对天然覆盖"排版层改了正文的数"——改了必被抓。但它对'输入件本身名值已错'无能为力:若上游表格里 "Costa 的 0.77" 被错标成 "Abbott et al.",两侧看到的是同一份(错的)绑定,判等放行。这类"名字配错了数据"是版式检查与数字比对之外的第三类检查,超出排版层职责。凡交付物含 study 名↔数值绑定(表格 / 图注),BUILD_NOTES 明写此边界,建议上游 / 署名人抽查(见 references/TYPESET-BUILD-NOTES-PATTERN.md)。
英文:typeset manuscript、submission-ready manuscript、publication-ready、submission docx / PDF、APA 7 manuscript formatting、reference-docx、apa7 man/jou、camera-ready、strip internal traces。 中文:把 md 学术稿排成投稿版 / 发表版、出投稿 docx / PDF、投稿排版、发表预览、学术排版、内部痕迹剥离、生成投稿 Word。
| 用户场景 | 切到 | |---|---| | 写 / 改内容本身(Intro/Method/Results/Discussion 措辞) | 对应写作 Skill(empirical-imrad-writing / meta-analysis L11 / systematic-review) | | 参考文献核验 / 修 DOI / APA 格式化 | academic-ref-check(本 Skill 消费其核验产物,不代做核验) | | forest / funnel / PRISMA / RoB 图渲染 | meta-analysis 内置 ma-plots 渲染器 / ssci-plots | | 编号制期刊(Vancouver / AMA / NEJM 数字上标引用) | 须 CSL 档——v2 延期,见 §5 边界 | | md 通用转 Word(非学术投稿规范) | academic-paper-converter 等通用转换 Skill |
typeset_request.yaml 调本 Skill。假设前提 = md 已定稿、引用已核验——本 Skill 不回头改内容。typeset_request.yaml(或让本 Skill 据 md YAML 头兜底元数据)即可跑。| 产物 | 引擎 | 说明 | |---|---|---| | 投稿 docx | pandoc + reference-apa7.docx | APA 7 样式一次调校成 committed 资产;行号走 OOXML 后处理(stdlib,不依赖 python-docx) | | 投稿 PDF(apa7 man) | XeLaTeX + apa7 类 | 双倍行距 + 行号(lineno)+ 图表末置 + CJK 0 缺字 | | 发表预览 PDF(apa7 jou) | XeLaTeX + apa7 类 | 双栏单倍行距 + \leftheader 适配 + 悬挂缩进 0.18in + 宽内容 \onecolumn 末置 | | generic PDF(兜底) | XeLaTeX + 通用 article | 无 apa7 类依赖时的单栏投稿兜底 |
为什么不追求 pandoc 单引擎出 PDF:apa7 的 man/jou 细节——自动 title page、running head、行号、de-float 末置结构、CJK unicode-map 逐字符映射、jou 双栏适配(leftheader/hang/onecolumn/de-float GRADE 表)——pandoc 的默认模板做不到。实战已把 LaTeX 这条路验证到 0 error / 0 缺字 / 双 PDF 均成功编译,故双引擎各司其职:docx 只走 pandoc + reference-docx,PDF 只走 LaTeX。docx 的 CJK 与复杂表格能力弱于 LaTeX,BUILD_NOTES 诚实标注每件质量状态。
typeset_request.yaml;G9 据此接线)上游产 typeset_request.yaml,声明:manuscript(正文 md)/ outputs(请求的输出子集)/ template_family(apa7 | generic)/ metadata(题录,md YAML 头兜底)/ references(默认档 = 保真渲染)/ tables(md: pandoc 或 raw_tex: 直通双形态)/ figures(末置,顺序即呈现序)/ strip_rules(可选)/ docx_line_numbers(可选)。
逐字段 schema、manuscript.md YAML 头约定、IMRaD 标题层级、metadata 覆盖规则,全文见 references/MANUSCRIPT-INPUT-CONTRACT.md(这是 G9 接线的权威)。最小可跑样例 = scripts/typeset_request.example.yaml(指向 scripts/tests/fixtures/smoke/ 的合成非元分析 IMRaD 稿,证通用性)。
请求的 outputs 子集,每件如 §3;此外每次必产三份附件:
BUILD_NOTES.md — 忠实性声明 + recompile 指令 + 每件质量状态(页数 / 缺字数 / overfull)+ 名值绑定边界诚实声明。模板见 references/TYPESET-BUILD-NOTES-PATTERN.md。PLACEHOLDERS.md — 占位符清单(author / affiliation / funding / corresponding,PDF/docx 内清楚标记,待用户填)。STRIP_REPORT.md — 剥离报告(剥了什么 / 留了什么 / 为什么——判断留痕)。## 组标题 分组,如 Cited / Included / Excluded,每条一段)→ hanging-indent tex(man 0.5in / jou 0.18in)。不引入 citeproc、不走 .bib。academic-ref-check 一条愿望——核验时同步产出 verified CSL-JSON 侧车(核验器本就查 CrossRef/OpenAlex,结构化数据在手,顺手落盘零成本)。此后 CSL 档 = 同一核验真值的第二渲染,双档从"保真 vs 灵活"两难变成"同一真值两渲染"。排版前对全部输入件(正文 + 参考 + 表格)按 strip_rules.yaml 剥离内部过程痕迹,产剥离报告。这是实战发现的新问题类别:
SP7 §3c / SP7 open item)、内部 corpus ID(papersearchpro-1628,直接致 overfull hbox)、过程顶注(L11 integrated final draft)。SP1–SP7 sign-off gates 是有意的监督流程披露)——strip 规则精确到能区分,判断入剥离报告留痕。SP7 §3c 在 References、papersearchpro-1628 在 Table 1 ID 列)——strip 范围 = 全部排版输入件,别只 grep 正文。strip_rules 缺失 → 恒等复制 + 报告声明"未配置"(不阻塞)。规则 schema 见 references/STRIP-RULES-SPEC.md(Lane C)。
| 码 | 含义 | |---|---| | 0 | 成功(请求输出全建 + fidelity 全绿) | | 1 | 输入 / 契约错(request 缺字段 / 文件缺失 / 硬依赖缺失且无降级)——硬 fail | | 2 | fidelity 断言失败 或 strip 安全违规(数字 / 引用 / claim 变动)——铁律,不设 --warn-only,必阻断,不落该件 | | 3 | 空(无正文可排) |
依赖降级(honest):缺 xelatex → 降级为 docx + md 两件(请求的 PDF 件标记 skipped,stderr WARN + BUILD_NOTES 声明,整体 exit 0);缺 pandoc → 连 docx 不能出 → exit 1。fidelity 失败永不降级(码 2 硬阻断)。详见 §8 + README。
pandoc(docx 必需)、xelatex(TinyTeX,PDF 必需)、python3 + pyyaml。python-docx / lxml:reference-apa7.docx 是 committed 二进制资产;docx 行号注入用 stdlib zipfile+xml。make_reference_docx.py 用 python-docx 仅 dev-time(重生成资产时),用户不需要。typeset.py 启动查 shutil.which('pandoc'/'xelatex'),据此决定是否降级(见 §7)。降级路径权威汇总见 README.md。编排器 typeset.py 读 request → strip_traces(所有输入件)→ 对每个请求引擎跑 build_pdf / build_docx → 对每件产物跑 fidelity_check(source=stripped 输入,rendered=该产物) → 全绿才落该件;任一 fidelity fail(码 2)→ 该件不落 + 整体 exit 2 + 报告。产 BUILD_NOTES / PLACEHOLDERS / STRIP_REPORT。
四个底层脚本(build_pdf.py / build_docx.py / strip_traces.py / fidelity_check.py)+ 编排器 typeset.py 的完整 CLI 签名、参数、机读摘要 JSON、退出码,权威汇总见 README.md。
apa7(man + jou)+ generic。APA 7 覆盖心理学 / 社科主战场,够第一版。scripts/templates/<family>/ 只留空槽位(Elsevier / 双栏会刊等)——按真实需求再加 = v2,不预填。raw_tex: 直通,本 Skill 绝不自译(违忠实性)。manuscript-typeset/
├── SKILL.md 本文件:触发 / 忠实性纪律 / 输入契约 / 双引擎 / 边界
├── README.md CLI 签名权威 + 依赖探测 + 降级路径 + 目录导览
├── LICENSE dual: PolyForm-NC 1.0.0 (code) + CC BY-NC-SA 4.0 (docs)
├── references/
│ ├── MANUSCRIPT-INPUT-CONTRACT.md 输入契约全文(G9 接线权威)
│ ├── TYPESET-BUILD-NOTES-PATTERN.md BUILD_NOTES / 占位符 / 忠实性声明 / 名值边界 模板
│ ├── FIDELITY-DISCIPLINE.md 铁律 + 断言覆盖边界(Lane C)
│ └── STRIP-RULES-SPEC.md strip_rules schema + 剥离报告格式(Lane C)
└── scripts/
├── typeset.py 编排器(读 request → strip → 引擎 → fidelity gate → 四件+附件)
├── build_pdf.py / build_docx.py PDF / docx 引擎
├── strip_traces.py / fidelity_check.py 剥离 + 忠实性门
├── typeset_request.example.yaml 最小可跑样例(指向合成非 MA 稿)
├── assets/tex/ preamble-common / unicode-map / apa7-man/jou/generic 模板
├── assets/docx/reference-apa7.docx APA7 样式 reference-docx(committed 资产)
├── templates/<family>/ v2 期刊族槽位(空)
└── tests/ 各引擎回归 + fixtures/smoke 非 MA 冒烟稿| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→pass | 11,071 | 5,116 | -54% | 1 | 1 | 0% | 1,924 | 4,996 | +160% | 0 | 0 | — |
case-10 | pass→pass | 14,084 | 11,315 | -20% | 1 | 1 | 0% | 3,052 | 6,290 | +106% | 0 | 0 | — |
case-21 | pass→pass | 7,196 | 6,278 | -13% | 1 | 1 | 0% | 1,219 | 5,192 | +326% | 0 | 0 | — |
case-08 | fail→pass | 13,652 | 3,510 | -74% | 1 | 1 | 0% | 1,006 | 4,688 | +366% | 0 | 0 | — |
case-01 | fail→pass | 12,898 | 19,492 | +51% | 1 | 1 | 0% | 2,167 | 6,052 | +179% | 0 | 0 | — |
case-02 | fail→fail | 32,015 | 7,377 | -77% | 1 | 1 | 0% | 6,218 | 5,472 | -12% | 0 | 0 | — |
case-03 | fail→pass | 27,373 | 11,201 | -59% | 1 | 1 | 0% | 6,220 | 6,023 | -3% | 0 | 0 | — |
case-04 | fail→pass | 5,260 | 6,960 | +32% | 1 | 1 | 0% | 862 | 5,412 | +528% | 0 | 0 | — |
case-05 | fail→pass | 6,464 | 6,969 | +8% | 1 | 1 | 0% | 950 | 5,343 | +462% | 0 | 0 | — |
case-06 | fail→pass | 5,687 | 8,503 | +50% | 1 | 1 | 0% | 902 | 5,616 | +523% | 0 | 0 | — |
case-07 | fail→pass | 35,056 | 8,803 | -75% | 1 | 1 | 0% | 6,183 | 5,765 | -7% | 0 | 0 | — |
case-11 | fail→pass | 12,116 | 5,374 | -56% | 1 | 1 | 0% | 1,993 | 4,939 | +148% | 0 | 0 | — |
case-12 | pass→pass | 10,235 | 4,550 | -56% | 1 | 1 | 0% | 1,849 | 4,851 | +162% | 0 | 0 | — |
case-13 | fail→pass | 11,257 | 6,575 | -42% | 1 | 1 | 0% | 1,902 | 5,199 | +173% | 0 | 0 | — |
case-14 | fail→pass | 13,819 | 8,985 | -35% | 1 | 1 | 0% | 2,146 | 5,670 | +164% | 0 | 0 | — |
case-15 | fail→pass | 11,594 | 5,768 | -50% | 1 | 1 | 0% | 2,251 | 5,147 | +129% | 0 | 0 | — |
case-16 | fail→pass | 7,698 | 3,997 | -48% | 1 | 1 | 0% | 1,278 | 4,781 | +274% | 0 | 0 | — |
case-17 | fail→pass | 10,021 | 2,409 | -76% | 1 | 1 | 0% | 1,818 | 4,501 | +148% | 0 | 0 | — |
case-18 | fail→pass | 20,097 | 4,106 | -80% | 1 | 1 | 0% | 1,606 | 4,386 | +173% | 0 | 0 | — |
case-19 | fail→pass | 9,183 | 8,416 | -8% | 1 | 1 | 0% | 1,369 | 4,691 | +243% | 0 | 0 | — |
case-20 | fail→pass | 9,266 | 2,463 | -73% | 1 | 1 | 0% | 1,685 | 4,385 | +160% | 0 | 0 | — |
case-22 | fail→pass | 9,575 | 4,638 | -52% | 1 | 1 | 0% | 1,542 | 4,867 | +216% | 0 | 0 | — |
case-23 | fail→pass | 15,041 | 9,492 | -37% | 1 | 1 | 0% | 2,173 | 5,614 | +158% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +83 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/3/2026 | +59% |
Other measured skills in the registry, with their headline benchmark lift.