with one click
systems-diagramming
Meta-model-agent 构建技术路线、方法关系、系统架构与流程示意资产。适用于系统逻辑制图。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Meta-model-agent 构建技术路线、方法关系、系统架构与流程示意资产。适用于系统逻辑制图。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Meta-model-agent 致力于辅助研究者与参赛团队完成高质量数学建模研究和论文产出,提供从问题理解、模型构建、计算实验、证据可视化到论文写作、冠军级多轮审稿与提交验收的完整工程支持。适用于 CUMCM、51MCM、MCM/ICM 及同类数模研究任务,可用于启动或恢复项目、按证据门禁推进、修复薄弱环节并形成可复现、可验证、可提交的高质量数模论文。
Meta-model-agent 将计算成果转换为可发表的数据图形、表格和排版引用。适用于证据图谱构建。
Meta-model-agent 将数学机制落地为可运行程序、数值实验、结果合同与可复核证据。适用于计算实验实现。
Meta-model-agent 完成编译、版式、匿名、页数、引用与提交前合规验收。适用于提交质量验收。
Meta-model-agent 整合模型、程序、结果、图形与引用为完整中文竞赛文稿。适用于竞赛文稿集成。
Meta-model-agent 将竞赛题面转换为子问题、变量、约束、证据和后续工作契约。适用于问题情境解构与建模前置分析。
| name | systems-diagramming |
| description | Meta-model-agent 构建技术路线、方法关系、系统架构与流程示意资产。适用于系统逻辑制图。 |
Produce DrawIO architecture diagrams and TikZ visuals for: $ARGUMENTS
This is a lightweight sub-step split from evidence-visualization. It ONLY handles non-data diagrams (DrawIO + TikZ). Data visuals (matplotlib/seaborn) were already generated in the previous evidence-visualization step.
FIG_DIR = 图表/
CUSTOM_REQUIREMENTS — User-specified requirements, highest priority.
Must produce at least 1 图表/*.drawio or 图表/tikz_*.tex and corresponding PDF, plus updated 图表/图表引用.tex.
⛔ 特殊豁免:若 论文规划.md 清晰标明无架构图/过程图需求(纯文字论文/数据分析报告),准许跳过此 skill 的产物要求;但仍要保留已有的 图表/图表引用.tex 不破坏。
⛔ MUST run output verification prior to ending:
PASS=true
mkdir -p 图表
PDF_COUNT=$(ls 图表/*.pdf 2>/dev/null | wc -l)
DRAWIO_COUNT=$(ls 图表/*.drawio 2>/dev/null | wc -l)
TIKZ_COUNT=$(ls 图表/tikz_*.tex 2>/dev/null | wc -l)
PLAN_NEEDS_DIAGRAM=$(grep -iE 'drawio|tikz|架构图|流程图|fig_arch|fig_flow|技术路线图|fig_er' 论文规划.md 2>/dev/null | wc -l)
if [ "$PDF_COUNT" -ge 1 ] || [ "$DRAWIO_COUNT" -ge 1 ] || [ "$TIKZ_COUNT" -ge 1 ]; then
echo "✅ diagrams: PDF=$PDF_COUNT drawio=$DRAWIO_COUNT tikz=$TIKZ_COUNT"
elif [ "$PLAN_NEEDS_DIAGRAM" -eq 0 ]; then
echo "✓ 规划无架构图/流程图需求, 跳过"
else
echo "❌ 规划要求架构图/流程图但未生成"
PASS=false
fi
[ -f 图表/图表引用.tex ] || touch 图表/图表引用.tex
[ "$PASS" != true ] && echo "⛔ Output verification FAILED — must complete before ending"
⛔ 当前环节可能由于断线/人工重跑被多次启动。每一次启动前务必先扫描已有产物:
echo "=== 工作区扫描 ==="
HAS_DRAWIO=$(ls 图表/*.drawio 2>/dev/null | wc -l)
HAS_TIKZ_TEX=$(ls 图表/tikz_*.tex 2>/dev/null | wc -l)
HAS_TIKZ_PDF=$(ls 图表/tikz_*.pdf 2>/dev/null | wc -l)
HAS_FIG_PDF_FROM_DRAWIO=$(ls 图表/fig_*.pdf 2>/dev/null | wc -l)
echo " *.drawio: $HAS_DRAWIO, tikz_*.tex: $HAS_TIKZ_TEX, tikz_*.pdf: $HAS_TIKZ_PDF"
echo " fig_*.pdf (含 drawio 导出): $HAS_FIG_PDF_FROM_DRAWIO"
依据扫描结果决定行动:
| 运行状态 | 行动 |
|---|---|
| 规划要求的全部 drawio + tikz 都已产出(含 .drawio + 相应 .pdf) | 跳到 Phase 8 (latex_includes 核对),校验通过即完成 |
| 部分已产出 | 只产出缺失的(已有的避免重画) |
| 啥都没有 | 从 Phase 1 启动 |
⛔ 铁律:已有 图表/*.drawio / 图表/tikz_*.tex / 图表/tikz_*.pdf 避免重写。
echo "=== Existing figures ==="
ls -la 图表/*.pdf 2>/dev/null | head -30
echo ""
echo "=== Existing .drawio files ==="
ls -la 图表/*.drawio 2>/dev/null
echo ""
echo "=== 图表引用.tex exists? ==="
[ -f 图表/图表引用.tex ] && echo "YES" || echo "NO"
# 自动选择规划文档(按存在性优先级):
# 问题分析.md(数模竞赛/科研流程) > 研究方案.md(开题报告)
# > 论文规划.md(论文写作/课程报告) > 文献综述.md(文献综述,跳过)
PLAN_DOC=""
for f in 问题分析.md 研究方案.md 论文规划.md; do
if [ -f "$f" ]; then
PLAN_DOC="$f"
break
fi
done
echo "=== 使用规划文档: $PLAN_DOC ==="
# 文献综述工作流不需要架构图,直接跳过
if [ -f 文献综述.md ] && [ -z "$PLAN_DOC" ]; then
echo "✅ 文献综述工作流不需要架构图,已跳过"
exit 0
fi
# 如果没有任何规划文档,退化为"画 1 张 技术路线图 兜底"
if [ -z "$PLAN_DOC" ]; then
echo "⚠ 无规划文档,将只生成 技术路线图.png 兜底"
PLAN_DOC=""
fi
echo "=== DrawIO plan from $PLAN_DOC ==="
grep -A 50 'DrawIO' "$PLAN_DOC" 2>/dev/null | grep -E 'DrawIO-[0-9]|^\- \[ \] fig_(arch|er|flow|module|roadmap|pipeline|framework|index|gantt|network)' || echo "No DrawIO plan found in $PLAN_DOC"
echo ""
echo "=== TikZ plan ==="
grep -E 'TikZ-[0-9]|模型架构|变量关系|因果路径|算法流程|几何示意' "$PLAN_DOC" 2>/dev/null || echo "No TikZ plan found"
echo ""
echo "=== AI Image failures (need DrawIO fallback) ==="
# 读取前一步 evidence-visualization 持久化的 AI Image 状态
if [ -f 图表/_aiimg_status.txt ]; then
AIIMG_STATUS=$(cat 图表/_aiimg_status.txt)
echo "AI Image status: $AIIMG_STATUS"
if [ "$AIIMG_STATUS" = "ALL_SUCCESS" ]; then
echo "All AI Image figures succeeded — only generate DrawIO for figures NOT covered by AI Image"
elif [ "$AIIMG_STATUS" = "SOME_FAILED" ]; then
AIIMG_FAILED=$(cat 图表/_aiimg_failed.txt 2>/dev/null)
echo "AI Image failures: $AIIMG_FAILED — generate DrawIO for these"
elif [ "$AIIMG_STATUS" = "ALL_FAILED" ]; then
echo "All AI Image attempts failed (API Key missing or network error) — generate DrawIO for ALL non-data figures"
else
echo "AI Image disabled — generate DrawIO for ALL non-data figures"
fi
else
echo "No AI Image status file — generate DrawIO for ALL non-data figures (default)"
fi
echo ""
# Determine language(注意:comp_apmcm_zh 是中文赛项,必须先排除)
if grep -qi 'comp_apmcm_zh' "$PLAN_DOC" META_MODEL_AGENT.md 2>/dev/null; then
DRAWIO_LANG="zh"
elif grep -qi 'MCM\|ICM\|APMCM\|comp_mcm\|comp_apmcm\|comp_certcup_en\|comp_shuwei_en\|语言.*English\|Language.*English' "$PLAN_DOC" META_MODEL_AGENT.md 2>/dev/null; then
DRAWIO_LANG="en"
else
DRAWIO_LANG="zh"
fi
echo "DrawIO language: $DRAWIO_LANG"
⛔ 读完规划后,务必交付一个 DRAWIO PLAN CHECKLIST(后续环节对照用):
工作流类别决定数量:
数模竞赛 / 科研过程(有 问题分析.md):按 DrawIO 清单全部产出(roadmap + flow_q1/q2/pipeline 等)
开题报告(有 研究方案.md):只产出 技术路线图,其他 问题流程图_1/q2 避免画
课程论文/报告(有 论文规划.md,无 问题分析.md):按 论文规划.md 中 ## 架构图(drawio)规划 段落列出的 fig_arch/fig_er/fig_flow_* 产出
论文写作(有 论文规划.md,无 问题分析.md):按 论文规划.md 列出的图产出
DRAWIO PLAN CHECKLIST (from $PLAN_DOC):
[ ] 1. 技术路线图 — 技术路线图 (DrawIO)
[ ] 2. 问题流程图_1 — 问题一求解流程图 (DrawIO)
[ ] 3. 问题流程图_2 — 问题二求解流程图 (DrawIO)
[ ] 4. fig_pipeline — 数据处理 Pipeline (DrawIO)
[ ] 5. tikz_architecture — 模型架构图 (TikZ, if planned)
Total: N DrawIO + M TikZ
每一条都务必在后续环节中产出。规划清单就是合同。
⛔ DrawIO 图中全部文字务必与论文语言保持一致。
⛔ 数模竞赛论文务必至少产出 1 张 DrawIO 技术路线图。其他 DrawIO 图按规划清单产出。
⛔ 开题报告 / 文献综述 不画 问题流程图_1/q2 这些数模专用图。开题只画 技术路线图,文献综述不画。
⛔ 若规划清单里有 N 条 DrawIO 图,当前环节结束时务必有 N 个 .drawio 文件和 N 个相应的 .pdf。缺一不可。
MANDATORY: Consult the DrawIO rules prior to writing ANY .drawio XML:
cat 工具/drawio_rules.md 2>/dev/null || cat skills/shared-scripts/drawio_rules.md
⛔ CRITICAL: DrawIO XML 文件很大(200-500行),务必分段写入,防止交付截断导致空工具调用。
无误写法(分 3 段写入):
# 第 1 段:写文件头 + 前半部分节点
cat << 'XMLEOF' > 图表/技术路线图.drawio
<mxfile>
<diagram name="Page-1">
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 前半部分节点(顶部标题栏 + 左栏 + 前几个阶段) -->
XMLEOF
# 第 2 段:追加中间节点
cat << 'XMLEOF' >> 图表/技术路线图.drawio
<!-- 中间部分节点(核心阶段 + 右栏方法) -->
XMLEOF
# 第 3 段:追加剩余节点 + 连线 + 闭合标签
cat << 'XMLEOF' >> 图表/技术路线图.drawio
<!-- 连线和底部 -->
</root>
</mxGraphModel>
</diagram>
</mxfile>
XMLEOF
每段不超过 150 行。 一张技术路线图分 3 段,一张过程图分 2-3 段。
⛔ 避免用 Write 工具写大 XML——Write 工具的 content 参数也会被截断。用 Bash heredoc 分段追加最可靠。
按规划清单逐条产出,每张图一个 .drawio 文件:
⛔ 配色与风格自由发挥原则:
依据论文主题自主选取柔和高级的配色方案,避免每一次都用默认学术蓝
不同子问题的过程图用不同配色,形成视觉区分
推荐风格:白底、灰阶边框和一个低饱和强调色;禁止装饰渐变与阴影
技术路线图:在三栏结构基础上优先采用黑白灰阶,通过边框粗细、虚实、留白和箭头形态建立层级;仅允许极少量低饱和强调色
求解过程图:按语义保留六边形、平行四边形、圆柱、菱形等形状;所有普通矩形和矩形容器必须为直角,禁止圆角矩形
布局可灵活:纵向、横向、L 形拐弯、泳道分区都可,依据内容选最合适的
关键约束不变:三栏结构(技术路线图)、判定分支+并行+循环(过程图)、双行节点、html=1、无 shadow
| 图类别 | 文件名示例 | 内容要点 |
|--------|-----------|---------|
| 技术路线图 | 技术路线图.drawio | 按节点数量与依赖拓扑选择模板,保持三栏结构和节点居中;禁止随机选模板 |
| 子问题求解过程图 | 问题流程图_1.drawio | ⛔ 务必涵盖:(1) 判定分支(菱形+是/否)(2) 并行分叉 (3) 循环反馈箭头 (4) 节点双行。避免画右侧工具/方法注释栏(技术路线图才需) |
| 数据处理 Pipeline | fig_pipeline.drawio | 横向多阶段、每阶段工具/方法标注 |
| 概念框架图 | fig_framework.drawio | 理论模块分层展示,层间大箭头 |
| 指标体系层次图 | fig_index_hierarchy.drawio | 目标层→准则层→指标层的树形结构 |
| 模型选取决策树 | fig_model_decision.drawio | 从数据特征出发的分支判定 |
| 甘特图/调度方案图 | fig_gantt.drawio | 横轴时间+纵轴工作项/资源 |
| 网络拓扑/路线图 | fig_network.drawio | 节点+边的网络结构 |
⛔ 以下图类别避免用 DrawIO,用 TikZ 产出:模型架构图、变量关系图、算法过程图(带公式)、几何示意图。
⛔ 完整 XML 示例:产出前按节点数量和依赖拓扑选择一个模板参考 XML 结构,不得随机选择。当前有 4 个拓扑示例:
example_roadmap_stats.drawio(B:灰阶简版四阶段拓扑)
example_roadmap_stats_warm.drawio(B-warm:灰阶简版替代拓扑)
example_roadmap_hex.drawio(C:灰阶完整六阶段拓扑)
example_roadmap_hex_cool.drawio(C-cool:蓝色高对比,完整六阶段)
⛔ 产出技术路线图前务必实施:
echo "=== 按节点数量和依赖拓扑选择技术路线图模板(禁止随机)==="
TEMPLATE=$(python3 -c "import random; print(random.choice(['B','B-warm','C','C-cool']))" 2>/dev/null || echo "C")
echo "本次使用模板: $TEMPLATE"
case "$TEMPLATE" in
B) FILE=example_roadmap_stats.drawio ;;
B-warm) FILE=example_roadmap_stats_warm.drawio ;;
C) FILE=example_roadmap_hex.drawio ;;
C-cool) FILE=example_roadmap_hex_cool.drawio ;;
esac
echo "--- 参考模板: $FILE ---"
cat 工具/$FILE 2>/dev/null | head -80
echo "... (参考完整 XML 结构和配色后再生成 技术路线图.drawio)"
⛔ 配色避免混搭:选定模板后,整张图沿用该模板的配色方案,避免把不同模板的颜色混在一起。
⛔ 产出求解过程图前务必实施:
echo "=== 读取求解流程图示例 ==="
cat 工具/example_flow.drawio 2>/dev/null | head -50
echo "... (参考完整 XML 结构后再生成)"
⛔ 每张图产出后立即校验文件出现:
[ -f 图表/技术路线图.drawio ] && echo "✅ 技术路线图.drawio created" || echo "❌ MISSING"
每张 .drawio 文件务必经过:导出 → 自检 → 修复 → 重新导出的循环,最多 3 轮。
对每张 .drawio 文件,实施以下循环:
FOR each 图表/*.drawio file:
FOR round = 1 to 3:
1. Export: draw.io.exe --export --format pdf --crop
2. If PDF not generated → verify XML syntax (ID duplicate, unclosed tags, escaping), fix, CONTINUE to next round
3. Self-verify the XML (Step 5 checklist below):
- Overlap verify (x/y/width/height collision)
- Edge crossing verify (jumpStyle, waypoints)
- Text overflow verify (width vs char count)
- Spacing consistency
- Style consistency
- Size verify (within page bounds)
4. If any verify fails → fix the XML, CONTINUE to next round
5. If all checks pass → BREAK (this file is done)
END FOR
If still failing after 3 rounds → fallback to TikZ for this diagram
END FOR
导出命令:
draw.io.exe --export --format pdf --crop --output "图表/${bn}.pdf" "$drawio_file" 2>&1 &
DRAWIO_PID=$!
( sleep 60 && kill $DRAWIO_PID 2>/dev/null && echo "⚠ timeout" ) &
TIMER_PID=$!
wait $DRAWIO_PID 2>/dev/null
kill $TIMER_PID 2>/dev/null
自检清单(每轮都过一遍):
1. [重叠检查] 同行节点:(x1 + width1 + 30) ≤ x2;上下层:(y1 + height1 + 30) ≤ y2
2. [连线遮挡] 所有连线 jumpStyle=arc;jumpSize=6;rounded=1,不穿过节点
3. [文字溢出] 中文 width ≥ 字数×16+40,英文 width ≥ 字符数×8+40,whiteSpace=wrap
4. [间距一致] 同层节点间距差异 ≤ 10px
5. [样式一致] 同类节点 fillColor/strokeColor/fontSize 一致,fontstyle=1
6. [尺寸检查] 总宽度 ≤ pageWidth,总高度 ≤ pageHeight
7. [⛔ 居中检查] 中栏子框和节点必须在虚线框内居中分布,不要左对齐留大片空白。计算:左边距 = (容器宽度 - 内容总宽度) / 2。特别检查:只有 2-3 个节点的行、最后一行(结论阶段)
⛔ 发现问题务必立即调整 XML 并重新导出,不可跳过。3 轮都失败 → 降级到 TikZ 兜底。
对技术路线图和求解过程图运行结构自检脚本。若不通过,务必查阅示例文件参考后重写,随后重新导出+重新自检,最多 3 轮。
PYTHON=$(command -v python3 2>/dev/null || command -v python 2>/dev/null)
# 技术路线图结构检查 + 强制修复循环
if [ -f 图表/技术路线图.drawio ]; then
for ROUND in 1 2 3; do
echo "=== 技术路线图结构自检 (round $ROUND) ==="
$PYTHON 工具/drawio_check.py 图表/技术路线图.drawio roadmap
if [ $? -eq 0 ]; then
echo "✅ 技术路线图结构合格"
break
fi
if [ $ROUND -lt 3 ]; then
echo "⛔ 不合格 — 读取示例后重写..."
echo ">>> cat 工具/example_roadmap_stats.drawio 或 工具/example_roadmap_hex.drawio 参考结构"
# Meta-model-agent: 你必须在这里读取一个示例模板,修改 技术路线图.drawio,然后重新导出 PDF
else
echo "⛔ 3 轮仍不合格 — 降级到 TikZ"
fi
done
fi
# 求解流程图结构检查 + 强制修复循环
for flow in 图表/fig_flow_*.drawio; do
[ -f "$flow" ] || continue
for ROUND in 1 2 3; do
echo "=== 求解流程图结构自检: $(basename $flow) (round $ROUND) ==="
$PYTHON 工具/drawio_check.py "$flow" flow
if [ $? -eq 0 ]; then
echo "✅ 流程图结构合格"
break
fi
if [ $ROUND -lt 3 ]; then
echo "⛔ 不合格 — 读取示例后重写..."
echo ">>> cat 工具/example_flow.drawio 参考结构"
else
echo "⛔ 3 轮仍不合格 — 降级到 TikZ"
fi
done
done
⛔ 关键:上面的 bash 脚本只是检测框架。Meta-model-agent 在看到 ⛔ 不合格 交付后,务必:
cat 工具/example_roadmap_stats.drawio 或 工具/example_roadmap_hex.drawio 查阅完整示例(4 个模板任选一个,与初次产出时所选模板保持一致)
重写 .drawio XML(修复结构问题)
重新导出 PDF(draw.io.exe --export ...)
重新运行 drawio_check.py 校验
重复直到通过或 3 轮用完
不准许看到 CRITICAL 后跳过不修。
逐条对照规划清单,缺失的务必补产出。循环直到全部齐全。
echo "=== DrawIO plan reconciliation ==="
echo "Planned:"
grep -E 'DrawIO-[0-9]' 问题分析.md 2>/dev/null
echo ""
echo "Generated:"
ls -1 图表/*.drawio 2>/dev/null
echo ""
echo "Exported PDFs:"
ls -1 图表/技术路线图.pdf 图表/fig_flow_*.pdf 图表/fig_pipeline*.pdf 图表/fig_framework*.pdf 图表/fig_index_*.pdf 图表/fig_model_*.pdf 图表/fig_network*.pdf 2>/dev/null
⛔ 对照上面的交付:
规划清单中的每一条,是否都有相应的 .drawio 文件?
各个 .drawio 文件是否都有相应的 .pdf?
若有缺失 → 立即回到 Phase 3 补产出该图的 .drawio XML → 导出 PDF → 自检
重复当前环节直到全部规划项都有 .drawio + .pdf
若某张图反复失败(3 轮),启用跨工具兜底:DrawIO 失败 → TikZ,TikZ 失败 → DrawIO(简化版)
⛔ 校验完成后,更新 DRAWIO PLAN CHECKLIST 运行状态:
DRAWIO PLAN CHECKLIST (reconciliation):
[✅] 1. 技术路线图 — 图表/技术路线图.drawio + 图表/技术路线图.pdf (exists, XXX bytes)
[✅] 2. 问题流程图_1 — 图表/问题流程图_1.drawio + 图表/问题流程图_1.pdf (exists)
[❌] 3. 问题流程图_2 — MISSING — need to generate
[✅] 4. fig_pipeline — 图表/fig_pipeline.drawio + 图表/fig_pipeline.pdf (exists)
Result: 3/4 complete, 1 MISSING → go back to Step 3 for 问题流程图_2
若规划清单中有 TikZ 类别的图,在此环节产出。
cat 工具/tikz_rules.md 2>/dev/null || cat skills/shared-scripts/tikz_rules.md
Write TikZ implementation to 图表/结构示意图.tex.
Compile + fix loop (最多 3 轮):
FOR round = 1 to 3:
1. Compile: xelatex -interaction=nonstopmode -output-directory=figures 图表/结构示意图.tex
2. If compilation fails:
- Verify: math mode paired? (\usetikzlibrary missing? align= attribute? xelatex for Chinese?)
- Fix the .tex file
- CONTINUE to next round
3. Run tikz_check.sh:
bash 工具/tikz_check.sh 图表/结构示意图.tex
4. If CRITICAL issues found:
- Fix the .tex file (color scheme, overlap, text width, edge crossing)
- CONTINUE to next round
5. If all pass → BREAK
END FOR
If still failing after 3 rounds → fallback to DrawIO (simplified version, no formulas)
编译命令:
xelatex -interaction=nonstopmode -output-directory=figures 图表/结构示意图.tex 2>&1 | tail -10
tikz_check.sh 自检(编译成功后务必实施):
for texfile in 图表/tikz_*.tex 图表/结构示意图.tex; do
[ -f "$texfile" ] || continue
echo "=== TikZ 自检: $(basename $texfile) ==="
bash 工具/tikz_check.sh "$texfile" 2>/dev/null || bash skills/shared-scripts/tikz_check.sh "$texfile"
if [ $? -gt 0 ]; then
echo "⛔ 有 CRITICAL 问题 — 必须修复后重新编译"
fi
done
⛔ tikz_check.sh 报告的全部 CRITICAL 务必修复后重新编译。不准许带着 CRITICAL 完成环节。
人工内容自检(编译成功 + tikz_verify 通过后过一遍):
全部节点文字完整可见,没有被截断
连线没有穿过其他节点或文字
箭头方向无误(因果关系/数据流向)
数学公式渲染无误(变量名/希腊字母/上下标)
配色与论文整体风格保持一致(参考 tikz_rules.md 配色方案)
节点间距均匀,整图居中
若未 TikZ 图需产出 → 跳过此环节。
对各个编译成功的 TikZ PDF,用 vision LLM 核验布局质量。最多 3 轮修复。
⛔ 若 vision API 不可用(exit 2),跳过此环节,不阻塞过程。
⛔ 实施方式:这不是一个完整的 bash 脚本。你需逐步实施:先运行 PDF→PNG + vision 核验,若返回 ISSUE,你务必用 Read 工具查阅 TikZ .tex 源码,依据 vision 反馈调整(调整坐标/间距/节点宽度/颜色),用 Write/Edit 工具写回,随后重新编译 xelatex,再重新核验。每轮都是:核验→调整→编译→随后核验。
PYTHON=$(command -v python3 2>/dev/null || command -v python 2>/dev/null)
mkdir -p 临时文件
for tikz_pdf in 图表/tikz_*.pdf; do
[ -f "$tikz_pdf" ] || continue
bn=$(basename "$tikz_pdf" .pdf)
tikz_tex="图表/${bn}.tex"
[ -f "$tikz_tex" ] || tikz_tex="图表/结构示意图.tex"
for VROUND in 1 2 3; do
echo "=== TikZ 视觉自检: $bn (round $VROUND) ==="
# PDF → PNG(尝试多种方式)
PNG_OK=0
if command -v pdftoppm >/dev/null 2>&1; then
pdftoppm -png -r 200 -singlefile "$tikz_pdf" "临时文件/${bn}_vverify" && PNG_OK=1
fi
if [ "$PNG_OK" -eq 0 ] && $PYTHON -c "from pdf2image import convert_from_path" 2>/dev/null; then
$PYTHON -c "
from pdf2image import convert_from_path
imgs = convert_from_path('$tikz_pdf', dpi=200, first_page=1, last_page=1)
imgs[0].save('临时文件/${bn}_vverify.png', 'PNG')
" && PNG_OK=1
fi
if [ "$PNG_OK" -eq 0 ]; then
echo "⚠ 无法转换 PDF→PNG(缺少 pdftoppm 或 pdf2image),跳过视觉自检"
break
fi
# 可选视觉检查工具未部署时,保留结构检查结果并跳过本项
if [ ! -f 工具/tikz_vision_verify.py ]; then
echo "⚠ tikz_vision_verify.py 未部署,跳过可选视觉检查"
break
fi
VRESULT=$($PYTHON 工具/tikz_vision_verify.py "临时文件/${bn}_vverify.png" 2>&1)
VEXIT=$?
echo "$VRESULT"
if [ "$VEXIT" -eq 0 ]; then
echo "✅ $bn 视觉检查通过"
break
elif [ "$VEXIT" -eq 2 ]; then
echo "⚠ Vision API 不可用,跳过视觉自检"
break
fi
# 有问题 → 修复
if [ $VROUND -lt 3 ]; then
echo "⛔ 发现视觉问题,读取 TikZ 源码修复..."
echo ">>> Vision 反馈: $VRESULT"
echo ">>> ⛔ 你必须立即:1.读取 $tikz_tex 2.根据上述反馈修改节点坐标/间距/宽度/颜色 3.重新编译 xelatex"
else
echo "⚠ 3 轮视觉自检仍有问题,继续(不阻塞流程)"
fi
done
done
为全部 DrawIO/TikZ 导出的 PDF 追加 LaTeX include 片段到 图表/图表引用.tex。
⛔ 注意:前一步 evidence-visualization 已经在 图表引用.tex 中写入了数据图的 include 片段。当前环节只追加 DrawIO/TikZ 图的片段,避免覆盖已有内容。采用 >> 追加而非 > 覆盖。
⛔ 图片尺寸双约束(防止占满整页):
| 图类别 | width | height |
|--------|-------|--------|
| 技术路线图 | \textwidth | 0.45\textheight |
| Pipeline 图 | \textwidth | 0.3\textheight |
| 概念框架图 | 0.9\textwidth | 0.4\textheight |
| 求解过程图 | 0.85\textwidth | 0.38\textheight |
| 决策树 | 0.85\textwidth | 0.38\textheight |
| 指标体系 | 0.9\textwidth | 0.25\textheight |
| 网络拓扑 | 0.6\textwidth | 0.35\textheight |
⛔ 全部图务必有 keepaspectratio。
⛔ Captions needs to match manuscript language.
% === 技术路线图 ===
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth,height=0.45\textheight,keepaspectratio]{图表/技术路线图.pdf}
\caption{整体技术路线图}\label{fig:roadmap}
\end{figure}
⛔⛔⛔ TikZ 图务必也写进 图表引用.tex(最常被漏!):
TikZ 编译产出 图表/结构示意图.pdf(若分多个 .tex 则是 图表/tikz_*.pdf,可能多页)。
每一个 TikZ PDF 都务必像 DrawIO 一样,在 图表引用.tex 里有一个 \includegraphics 图块,
反之写作环节读 图表引用.tex 时看不到 TikZ 图,论文里就会缺图。
% === TikZ 几何/算法/架构图 ===
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth,height=0.38\textheight,keepaspectratio]{图表/结构示意图.pdf}
\caption{弦长递推几何关系示意}\label{fig:tikz_geom}
\end{figure}
如果一个 结构示意图.tex 里画了多张图(多个 \begin{tikzpicture}),编译出的 PDF 是多页。
务必先用 pdfseparate 图表/结构示意图.pdf 图表/结构示意图_%d.pdf 拆成单页,
或在 .tex 里每张图独立 \newpage,随后为每一页/每一张 TikZ 图各写一个 \includegraphics 块,
caption 与规划清单里的 TikZ 条目一一相应。
⛔ caption 务必与论文语言保持一致(中文论文用中文 caption)。
% === 速度传递算法流程图 ===
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth,height=0.38\textheight,keepaspectratio]{图表/结构示意图_2.pdf}
\caption{速度传递与刚体杆约束求解流程}\label{fig:tikz_algo}
\end{figure}
⛔ 追加后自检:
echo "=== 图表引用.tex 追加验证 ==="
# 1. 检查每个 DrawIO PDF 是否都有对应的 \includegraphics
for pdf in 图表/技术路线图.pdf 图表/fig_flow_*.pdf 图表/fig_pipeline*.pdf 图表/fig_framework*.pdf 图表/fig_index_*.pdf 图表/fig_network*.pdf; do
[ -f "$pdf" ] || continue
bn=$(basename "$pdf")
if grep -q "$bn" 图表/图表引用.tex 2>/dev/null; then
echo "✅ $bn has include entry"
else
echo "❌ $bn MISSING from 图表引用.tex — must append"
fi
done
# 1b. ⛔ 检查每个 TikZ PDF(含多页拆分)是否都有 \includegraphics —— 最常被漏
for tpdf in 图表/结构示意图.pdf 图表/结构示意图_*.pdf 图表/tikz_*.pdf; do
[ -f "$tpdf" ] || continue
tbn=$(basename "$tpdf")
if grep -q "$tbn" 图表/图表引用.tex 2>/dev/null; then
echo "✅ TikZ $tbn has include entry"
else
echo "❌ TikZ $tbn MISSING from 图表引用.tex — must append a figure block for it"
fi
done
# 2. 检查 label 是否有重复
DUPS=$(grep -oh '\\label{[^}]*}' 图表/图表引用.tex 2>/dev/null | sort | uniq -d)
[ -z "$DUPS" ] && echo "✅ No duplicate labels" || echo "❌ Duplicate labels: $DUPS"
若有 ❌,立即修复(追加缺失的 include 或修复重复 label)。TikZ 的 ❌ 尤其不可放过。
echo "=========================================="
echo " DRAWIO/TIKZ QUALITY GATE"
echo "=========================================="
GATE_FAIL=0
# DrawIO diagrams
DRAWIO_COUNT=$(ls 图表/*.drawio 2>/dev/null | wc -l)
DRAWIO_PDF=0
for df in 图表/*.drawio; do
[ -f "$df" ] || continue
bn=$(basename "$df" .drawio)
[ -f "图表/${bn}.pdf" ] && DRAWIO_PDF=$((DRAWIO_PDF+1))
done
if [ "$DRAWIO_COUNT" -gt 0 ] && [ "$DRAWIO_PDF" -eq "$DRAWIO_COUNT" ]; then
echo "✅ DrawIO: $DRAWIO_COUNT .drawio files, all exported to PDF"
elif [ "$DRAWIO_COUNT" -gt 0 ]; then
echo "❌ DrawIO: $DRAWIO_COUNT .drawio but only $DRAWIO_PDF PDFs"; GATE_FAIL=$((GATE_FAIL+1))
else
echo "❌ No DrawIO diagrams generated"; GATE_FAIL=$((GATE_FAIL+1))
fi
# TikZ (if planned)
if grep -qi 'tikz\|TikZ\|模型架构\|变量关系' 问题分析.md 2>/dev/null; then
if ls 图表/tikz_*.tex 2>/dev/null > /dev/null || [ -f 图表/结构示意图.tex ]; then
echo "✅ TikZ source files exist"
# Run tikz_check.sh on each TikZ file
for texfile in 图表/tikz_*.tex 图表/结构示意图.tex; do
[ -f "$texfile" ] || continue
bash 工具/tikz_check.sh "$texfile" 2>/dev/null
TC_EXIT=$?
if [ "$TC_EXIT" -gt 0 ]; then
echo "❌ tikz_check.sh found $TC_EXIT CRITICAL issues in $(basename $texfile)"
GATE_FAIL=$((GATE_FAIL+1))
fi
done
# Verify compiled PDFs exist
TIKZ_PDF=0
for tf in 图表/tikz_*.tex 图表/结构示意图.tex; do
[ -f "$tf" ] || continue
bn=$(basename "$tf" .tex)
[ -f "图表/${bn}.pdf" ] && TIKZ_PDF=$((TIKZ_PDF+1))
done
[ "$TIKZ_PDF" -gt 0 ] && echo "✅ TikZ compiled PDFs: $TIKZ_PDF" || { echo "❌ TikZ source exists but no compiled PDF"; GATE_FAIL=$((GATE_FAIL+1)); }
else
echo "❌ TikZ planned but no .tex files"; GATE_FAIL=$((GATE_FAIL+1))
fi
fi
# 图表引用.tex updated with DrawIO/TikZ entries
if [ -s 图表/图表引用.tex ]; then
echo "✅ 图表引用.tex exists"
# 检查是否包含 DrawIO 图的 include
DRAWIO_IN_INCLUDES=$(grep -c '技术路线图\|fig_flow\|fig_framework\|fig_pipeline\|fig_index\|fig_model\|fig_network\|fig_gantt\|tikz_' 图表/图表引用.tex 2>/dev/null || echo 0)
if [ "$DRAWIO_IN_INCLUDES" -gt 0 ]; then
echo "✅ 图表引用.tex contains $DRAWIO_IN_INCLUDES DrawIO/TikZ entries"
else
echo "❌ 图表引用.tex exists but has NO DrawIO/TikZ entries — paper will miss diagrams"
GATE_FAIL=$((GATE_FAIL+1))
fi
else
echo "❌ 图表引用.tex missing"; GATE_FAIL=$((GATE_FAIL+1))
fi
# No tiny PDFs
for pdf in 图表/技术路线图.pdf 图表/fig_flow_*.pdf 图表/fig_pipeline*.pdf 图表/fig_framework*.pdf; do
[ -f "$pdf" ] || continue
sz=$(wc -c < "$pdf")
[ "$sz" -lt 5000 ] && { echo "❌ $(basename $pdf) only $sz bytes — likely broken"; GATE_FAIL=$((GATE_FAIL+1)); }
done
echo ""
[ "$GATE_FAIL" -eq 0 ] && echo "✅ ALL PASSED" || echo "❌ $GATE_FAIL FAILURES — fix and re-run"
⛔ If GATE_FAIL > 0:
逐个修复各个 ❌ 项(重新产出 .drawio → 导出 → 自检,或重新编译 TikZ,或追加 latex_includes)
重新运行本质量门脚本
重复直到 GATE_FAIL = 0
不准许带着任何 ❌ 结束当前环节。 若某张图反复失败,启用跨工具兜底(DrawIO↔TikZ)
⛔ 质量门全部通过后,交付终版 CHECKLIST 确认:
DRAWIO PLAN CHECKLIST (FINAL):
[✅] 1. 技术路线图 — 图表/技术路线图.pdf (XX KB) — drawio_verify PASS
[✅] 2. 问题流程图_1 — 图表/问题流程图_1.pdf (XX KB) — drawio_verify PASS
[✅] 3. 问题流程图_2 — 图表/问题流程图_2.pdf (XX KB) — drawio_verify PASS
[✅] 4. fig_pipeline — 图表/fig_pipeline.pdf (XX KB)
[✅] 图表引用.tex — contains 4 DrawIO entries
ALL COMPLETE — systems-diagramming step finished successfully
DrawIO .drawio files export to PDF via draw.io.exe --export --format pdf --crop
All fonts bold (fontstyle=1), line width 3pt
All edges: jumpStyle=arc;jumpSize=6;rounded=1
⛔ Edges needs to NOT cross nodes or obscure text
Component spacing 30-50px, grid alignment (gridSize=10)
Default color scheme: academic blue #dae8fc/#6c8ebf
Each mxCell id is expected to be globally unique
Chinese text in UTF-8, XML special chars is expected to be escaped
⛔ No shadow=1, no XML comments, no shape=callout
⛔ All nodes is expected to include html=1 (including edge labels)
⛔ No in-figure title — titles managed by LaTeX \caption{}
⛔ 3 rounds DrawIO fail → fallback to TikZ; 3 rounds TikZ fail → fallback to DrawIO