Log in

6verity

All-time installs
1,468

数学建模竞赛最终验证和验收阶段,支持 Typst 和 LaTeX 双引擎。用于论文写完后检查章节数量、标题顺序、图表引用、数值一致性、占位符、内部文件泄露、参考文献、代码可复现性、编译和提交就绪状态。

Other options

Summary

数学建模竞赛最终验证和验收阶段,支持 Typst 和 LaTeX 双引擎。用于论文写完后检查章节数量、标题顺序、图表引用、数值一致性、占位符、内部文件泄露、参考文献、代码可复现性、编译和提交就绪状态。

Raw SKILL.md

10.4K bytes
---
name: 6verity
description: "数学建模竞赛最终验证和验收阶段,支持 Typst 和 LaTeX 双引擎。用于论文写完后检查章节数量、标题顺序、图表引用、数值一致性、占位符、内部文件泄露、参考文献、代码可复现性、编译和提交就绪状态。"
allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob, Agent, WebSearch, WebFetch
---

# 验证和验收(Typst / LaTeX)

本 skill 是完整工作流的最后一关。它不重新建模、不生成新结果、不代替写作阶段重写论文;它负责发现硬错误、修复可直接修复的问题,并输出 `reports/VERIFY_REPORT.md`。

## 数学建模规范参考

如需领域判断,读取 `../_references/math_modeling_norms.md` 中的"论文验收与一致性"小节。该文件只是规范知识库,不是固定执行流程;具体目录、入口文件、结果文件和图表目录由当前项目结构决定。

## 阶段边界

- 本阶段负责:结构验收、文本质量门禁、图表引用检查、结果一致性检查、Typst/LaTeX 编译检查、PDF 视觉检查、提交清单。
- 本阶段不负责:重新设计模型、重新跑大规模实验、重新组织整篇论文。
- 发现硬错误时,优先做小范围修复;如果需要回到前序阶段,写入 `reports/VERIFY_REPORT.md` 并标记为未通过。

## 输入

由模型先根据当前工作区判断项目布局,再把实际路径传给检查脚本。常见输入包括但不限于:

1. 论文入口文件:`main.typ`(Typst)或 `main.tex`(LaTeX)。
2. 正文章节目录或若干正文文件(`.typ` 或 `.tex`)。
3. 参考文献文件(`references.typ` 或 `references.tex`)。
4. 前序阶段的分析、建模、结果、图示报告。
5. 图表目录
6. 可复现代码目录。
7. 编译后的 PDF,或可由入口文件编译得到的输出 PDF。

不要假设论文目录一定叫 `paper/`,也不要假设结果文件一定在项目根。若项目使用不同命名,按实际结构传参并在 `reports/VERIFY_REPORT.md` 中说明。

## 工作流程


### Step 1: 运行文本质量门禁

优先运行本 skill 的脚本。脚本按入口文件扩展名自动选择检查逻辑(`.typ` → Typst 检查,`.tex` → LaTeX 检查):

```bash
set -o pipefail
mkdir -p _tmp
SCRIPT_PATH="<按当前 skill 实际位置确定>/scripts/writing_check.sh"
bash "$SCRIPT_PATH" \
  --paper-dir "$PAPER_DIR" \
  --main "$MAIN_FILE" \
  --sections-dir "$SECTIONS_DIR" \
  --references "$REFERENCES_FILE" \
  --figures-dir "$FIGURES_DIR" \
  --results-file "$RESULTS_FILE" \
  --problem-analysis "$PROBLEM_ANALYSIS_FILE" \
  --all-results "$ALL_RESULTS_FILE" \
  | tee _tmp/writing_check.log
```

如果本 skill 被复制到其他目录,使用实际脚本路径。可以先运行 `bash <script> --help` 查看参数。不要把脚本路径、论文目录或文件名写死在验收逻辑中。

脚本只扫描文本,不生成论文,也不编译 PDF。它的 `FAIL` 属于硬错误,必须修复后重跑。

### Step 2: 章节数量和标题顺序

**Typst 引擎**检查:

- 入口 `.typ` 文件中 `#include("...")` 的数量是否与实际正文结构匹配。
- include 顺序是否符合文件名前缀顺序,例如 `1_...`, `2_...`, `3_...`。
- 每个 section 是否有明确一级标题(`= 标题`,等号后有空格)。
- 标题顺序是否符合所选论文类型。

**LaTeX 引擎**检查:

- 入口 `.tex` 文件中 `\input{...}` 或 `\include{...}` 的数量是否与实际正文结构匹配。
- 章节顺序是否符合文件名前缀顺序。
- 每个 section 是否有 `\section{}` 或对应级别标题。

通用检查(两种引擎):

- 章节文件是否缺失、重复引用、未被引用。
- 如果题目不是三问,不强行要求三段问题章节;按 `ANALYSIS_MODELING_REPORT.md` 的子问题数量核对。

### Step 3: 图表和章节匹配

**Typst 引擎**检查:

- 图表目录中的 PDF 是否在正文中被引用。
- `#figure(image(...), caption: [...])` 的图片是否真实存在。图片路径必须相对于 `.typ` 文件。
- 数据图是否放在对应结果/分析章节,非数据流程图是否放在方法/总体思路章节。

**LaTeX 引擎**检查:

- `\includegraphics{}` 引用的图片文件是否真实存在。路径相对于 `.tex` 文件。
- `\caption{}` 是否存在。
- 数据图是否放在对应结果/分析章节。

通用检查(两种引擎):

- 连续图表之间是否有足够解释文字。
- caption 是否过长、过泛或与图意不一致。
- 图表编号、正文引用和章节语义是否一致。

不要生成 `*_typst_includes.typ` 或 `*_latex_includes.tex`;图表必须直接嵌在对应 section 中。

### Step 4: 写作质量和泄露检查

检查并修复:

- `TODO`、`PLACEHOLDER`、`待补充`、`待续写`、`示例数据` 等占位符。
- 论文正文出现内部工作流文件名、临时目录名、代码目录名或结果 JSON 路径。
- 过多列表式写作(Typst 中大量 `#list`、`enum`,LaTeX 中大量 `\begin{itemize}`、`\begin{enumerate}`)。
- 段落反复以"如图""由图""图 X 展示了"开头。
- 图表后没有解释、公式后没有变量含义、结论只报数不解释。

### Step 5: 数值和结果一致性

检查:

- 论文中的关键数值必须来自当前工作流声明的结果记录或结果 JSON。
- 目标函数值、误差指标、排名、权重、阈值、灵敏度结果不得与结果记录冲突。
- 如果存在汇总结果 JSON,抽取关键指标并确认论文正文中有对应结果。
- 公式中的符号应在符号说明或正文首次出现处解释。

发现数值冲突时,不要自行发明新结果;应回到结果记录或代码输出修正论文。

### Step 6: 引用和模板规范

检查:

- 参考文献文件是否存在,或模板是否采用了其他真实参考文献机制。
- 正文引用标记(Typst 的 `@label`/`#super`,LaTeX 的 `\cite{}`)是否能对应到真实参考文献。
- 中文论文 caption、表题、摘要语言保持中文;英文论文保持英文。
- 选定的模板入口是否保留所选比赛模板的必要封面、摘要、编号、页眉页脚或提交格式。
- 不要把模板结构误删成普通空白文档。


### Step 7: 编译

**Typst 编译**:

```bash
command -v typst >/dev/null 2>&1 && typst compile "$MAIN_FILE" "$OUTPUT_PDF"
```

**LaTeX 编译**:

```bash
command -v xelatex >/dev/null 2>&1 && xelatex -interaction=nonstopmode "$MAIN_FILE" && xelatex -interaction=nonstopmode "$MAIN_FILE"
```

xelatex 需跑两遍解决目录和交叉引用。

编译失败必须修复语法、路径、图片引用或模板问题后重跑。编译通过后确认输出 PDF 非空。

### Step 8: PDF 视觉检查

如果模型有视觉能力,必须把编译后的 PDF 每页导出为 PNG 并逐页查看。这个步骤用于发现纯文本扫描和编译器无法发现的版式错误。

优先使用系统已有工具导出页面 PNG;不要为了视觉检查引入沉重依赖。可选命令示例:

```bash
mkdir -p _tmp/pdf-pages
if command -v pdftoppm >/dev/null 2>&1; then
  pdftoppm -png -r 160 "$OUTPUT_PDF" _tmp/pdf-pages/page
elif command -v mutool >/dev/null 2>&1; then
  mutool draw -r 160 -o _tmp/pdf-pages/page-%03d.png "$OUTPUT_PDF"
elif command -v magick >/dev/null 2>&1; then
  magick -density 160 "$OUTPUT_PDF" _tmp/pdf-pages/page-%03d.png
else
  echo "No PDF rasterizer found; record visual check as not run."
fi
```

导出后逐页检查:

- 页面是否空白、缺页、页数异常或页面尺寸异常。
- 标题、摘要、正文、页眉页脚、页码是否被裁切或位置明显错误。
- 表格是否超出页边距,单元格文字是否重叠、溢出、被截断。
- 图片、图题、表题、公式、编号是否与正文重叠。
- 公式是否越界,长公式是否压到页边距或下一段文字。
- 列表、段落、脚注、参考文献是否出现异常大空白、重叠或孤立残行。
- 中文/英文/数学符号字体是否明显缺字、乱码或 fallback 异常。
- 封面、摘要页、目录、附录等模板关键页面是否保留比赛要求的视觉结构。

如果是模板转换或已有参考 PDF 的项目,还应将不同引擎的 PDF 都逐页导出 PNG,按页对比版式差异;页数或页面尺寸不一致必须记录为硬错误或明确说明原因。

如果模型没有视觉能力,必须在 `reports/VERIFY_REPORT.md` 中明确写出“未执行视觉检查”的原因,并至少完成 PDF 非空、页数、页面尺寸等可程序化检查。

### Step 9: 写验收报告

创建 `reports/VERIFY_REPORT.md`:

```markdown
# 验证和验收报告

## 结论
PASS / FAIL

## 检查项
| 检查项 | 结果 | 说明 |
| --- | --- | --- |

## 章节结构

## 图表引用

## 数值一致性

## 文本质量门禁

## 编译

## PDF 视觉检查

## 仍需处理的问题
```

只有当硬错误都修复、文本门禁通过、核心图表都引用、数值一致、编译通过或明确说明不可编译原因、视觉检查通过或明确说明无法执行原因时,才写 `PASS`。

## 硬错误标准

以下问题必须判定 `FAIL`:

- 缺少选定的论文入口文件(`main.typ` 或 `main.tex`)或核心正文。
- 论文入口引用的章节文件不存在。
- Typst 入口缺少 `#include`;LaTeX 入口缺少 `\input`/`\include`。
- 正文章节缺少一级标题(Typst `= ` 后缺空格,LaTeX `\section{}` 缺失)。
- 章节顺序明显错误或重复。
- 正文仍有占位符。
- 正文泄露内部工作流文件名。
- 引用的图片不存在。
- 关键数值与结果记录冲突。
- 编译器可用但论文编译失败。
- 编译后的 PDF 为空、缺页、页数异常或页面尺寸异常且无法解释。
- 视觉检查发现正文、表格、图片、公式、页眉页脚、页码等关键元素重叠、裁切、越界或乱码。

## 警告标准

以下问题可判定为 `WARN`,但应尽量修复:

- 未引用的备用图片。
- 某章节过短或明显不均衡。
- caption 偏长。
- 参考文献偏少。
- 图表后解释文字不足。
- 视觉检查工具不可用,但已经记录原因并完成基础 PDF 元数据检查。
- 代码完整复现耗时过长,只做了轻量检查。

Security audits

SnykPASS
SocketPASS
Gen Agent Trust HubPASS