CtrlK
BlogDocsLog inGet started
Tessl Logo

6verity

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

61

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./skills/6verity/SKILL.md
SKILL.md
Quality
Evals
Security

验证和验收(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.typreferences.tex)。
  4. 前序阶段的分析、建模、结果、图示报告。
  5. 图表目录
  6. 可复现代码目录。
  7. 编译后的 PDF,或可由入口文件编译得到的输出 PDF。

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

工作流程

Step 1: 运行文本质量门禁

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

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: 写作质量和泄露检查

检查并修复:

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

Step 5: 数值和结果一致性

检查:

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

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

Step 6: 引用和模板规范

检查:

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

Step 7: 编译

Typst 编译

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

LaTeX 编译

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;不要为了视觉检查引入沉重依赖。可选命令示例:

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

# 验证和验收报告

## 结论
PASS / FAIL

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

## 章节结构

## 图表引用

## 数值一致性

## 文本质量门禁

## 编译

## PDF 视觉检查

## 仍需处理的问题

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

硬错误标准

以下问题必须判定 FAIL

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

警告标准

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

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

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.