Skip to main content

html-paper-figure

用 HTML+CSS 绘制流程图/技术路线图/系统架构图/流水线/框架矩阵图,经 Electron printToPDF 输出矢量单页 PDF,供论文 \includegraphics 直接引用。当用户说"画HTML图"、"技术路线图"、"流程图"或需要论文非数据类示意图时使用。本版为 MetaMath Harness(DeepSeek Harness/DSH)专用适配版:命令经 pwsh 执行,视觉自检用 DSH 原生 read_image/vision_analyze。

Zur Installation springen

Quellinformationen

Repository
LKQ667/metamath-harness
Letzte Quellaktivität
10. September 2026 um 02:49
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
15
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
15 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
html-paper-figure
description
用 HTML+CSS 绘制流程图/技术路线图/系统架构图/流水线/框架矩阵图,经 Electron printToPDF 输出矢量单页 PDF,供论文 \includegraphics 直接引用。当用户说"画HTML图"、"技术路线图"、"流程图"或需要论文非数据类示意图时使用。本版为 MetaMath Harness(DeepSeek Harness/DSH)专用适配版:命令经 pwsh 执行,视觉自检用 DSH 原生 read_image/vision_analyze。
# Paper Figure — HTML/CSS 矢量图(MetaMath Harness 版) 用 HTML+CSS 生成论文非数据类示意图。 只处理架构/流程/路线类示意图;数据图(matplotlib/seaborn)由上游 paper-figure 步骤生成。 **HTML 相对 DrawIO 的核心优势**:用 flex/grid 自动布局,不写绝对坐标 → 天然免疫节点重叠/坐标错位/连线穿越。因此本 skill **不需要** drawio 的坐标结构自检(drawio_check.py),改用 HTML/PDF 专属质检。 ## ⚠ 运行环境(MetaMath Harness / DSH 专用约定,与 TRAE 版的差异) - **命令一律经 DSH 的 `pwsh` 工具执行**:每次调用都是全新 pwsh 进程,**变量不跨调用保留**,工作目录用 `workdir` 参数指定。原文 bash 块仅作语义参考,执行时按语义翻译成 PowerShell(`ls figures/*.pdf | wc -l` → `(Get-ChildItem figures\fig_*.pdf).Count`;`grep -c` → `Select-String | Measure-Object`;临时文件写工作区 `_tmp\`,不写 `/tmp/`)。 - **视觉自检不依赖外部脚本**(TRAE 版的 drawio_vision_check.py / tikz_vision_check.py 本机没有,也不要去找):改用 DSH 原生视觉能力——`read_image` 直接看渲染出的 PNG,或 `vision_analyze` 让视觉模型审图。PDF→PNG 用 PyMuPDF(本机已装)。⛔ `vision_analyze` 明确返回"无法查看图片"时按 skipped 处理,禁止凭文件名/尺寸/上下文猜测图面内容。 - 下文 `$CAPTURE` / `$HTMLCHECK` / `$TPL_DIR` 等是**语义简写**,指《工具路径解析》一节定位出的完整路径;由于 pwsh 变量不跨调用,每次实际执行前先在该次调用里重定位(或直接写完整路径)。 - 本机事实(已验证):`python` 可用(⛔ 不用 `python3`,会触发 Microsoft Store 存根);`xelatex`/`pdftoppm`/`pdfseparate` 来自 TeX Live 2025;PyMuPDF(fitz) 可用、pdf2image 不可用;`node`/`npx` 可用、`electron` 不在 PATH(由 screenshot_capture.py 自动回退 `npx --yes electron`)。 ## ⚡ 快速模式检测(开头先定一次) DSH 下 **FAST_MODE 默认 0**(质量优先)。当用户在当前对话明确说"快速模式/赶时间/跳过视觉自检"时记 FAST_MODE=1,并在 Step 5 / Step 5.6 / Step 7 一致按 1 处理(pwsh 块间不共享变量,各步骤就地重判一次,不依赖文件探测)。 **若 `FAST_MODE=1`(速度优先):** 仍按图表清单产出所有图(一张不漏、能出 PDF、过 html_pdf_check、**过 Step 4.5 元素级几何自检**),但**跳过** vision 视觉自检的多轮修复循环——生成即用,仅当 html_pdf_check FAIL 或明显空图时才补。**若 `FAST_MODE=0`(默认):** 视觉自检修复循环照常执行。⛔ **几何自检(Step 4.5)任何模式都跑**:它快(纯几何、几十毫秒)、且能挡"文字被裁/越界/重叠"这类真翻车,不算 vision 加分项。 ## Constants - **FIG_DIR = `figures/`** - **CUSTOM_REQUIREMENTS** — 用户自定义要求,最高优先级。 ## ⛔ 工具路径解析(每次会话开头先定位,实际执行时在各次 pwsh 调用里重新赋值) **MetaMath Harness(DSH)环境下没有后端注入的 `_templates/`、`_utils/`**,本 skill 的完整安装位置(含 templates/ tools/)是 `F:\DeepSeekHarness\.dsh\skills\html-paper-figure\`,出图工具 screenshot_capture.py + capture.js + katex-assets 已随 skill 安装。优先用工作区副本(`_templates/`、`_utils/`、`tools/`,若存在),没有才回退安装目录。防御式解析,找不到再报错: ```powershell # ⛔ 这台机器必须用 python,不能用 python3(python3 触发 Microsoft Store 存根,exit 49) $PYTHON = 'python' # DSH skill 安装目录(本 skill 的完整安装位置,含 templates/ tools/) $SKILL_DIR = 'F:\DeepSeekHarness\.dsh\skills\html-paper-figure' # 模板目录:优先工作区 _templates/,回退到 skill 安装目录(模板仅极端兜底参考,正常流程不读) $TPL_DIR = @('_templates', (Join-Path $SKILL_DIR 'templates')) | Where-Object { Test-Path (Join-Path $_ 'tpl_roadmap.html') } | Select-Object -First 1 "模板目录 TPL_DIR=$TPL_DIR" # 出图工具(screenshot_capture.py:DSH 版包装器,内部自动调 Electron + capture.js) $CAPTURE = @('_utils\screenshot_capture.py', 'tools\screenshot_capture.py', (Join-Path $SKILL_DIR 'tools\screenshot_capture.py')) | Where-Object { Test-Path $_ } | Select-Object -First 1 "出图工具 CAPTURE=$CAPTURE" # HTML/PDF 质检脚本(优先 _utils/,回退 skill 安装目录) $HTMLCHECK = @('_utils\html_pdf_check.py', '_templates\html_pdf_check.py', (Join-Path $SKILL_DIR 'tools\html_pdf_check.py')) | Where-Object { Test-Path $_ } | Select-Object -First 1 "质检脚本 HTMLCHECK=$HTMLCHECK" # 视觉自检:MetaMath Harness(DSH)原生能力 —— read_image 直接看渲染 PNG / vision_analyze 让视觉模型审图。 # 不依赖外部脚本(原 TRAE 版的 drawio_vision_check.py 本机没有,不要去找)。PDF→PNG 用 PyMuPDF(fitz),见 Step 5。 # ===== TikZ 依赖(仅当规划有精密几何图才用;公式本身走 HTML+KaTeX,几何示意才靠 xelatex 编译 TikZ)===== # 规则文档(物理尺寸/字号/scale 匹配规则;无则用 Step 5.5 内置规则) $TIKZ_RULES = @('_utils\tikz_rules.md', 'skills\shared-scripts\tikz_rules.md') | Where-Object { Test-Path $_ } | Select-Object -First 1 "TikZ 规则 TIKZ_RULES=$(if ($TIKZ_RULES) { $TIKZ_RULES } else { '(无,将用内置规则)' })" # tikz_check.sh 结构自检脚本(bash 脚本,DSH 环境大概率没有;没有就跳过,由几何/视觉自检兜底) $TIKZ_CHECK = @('_utils\tikz_check.sh', 'skills\shared-scripts\tikz_check.sh') | Where-Object { Test-Path $_ } | Select-Object -First 1 "TikZ 自检 TIKZ_CHECK=$(if ($TIKZ_CHECK) { $TIKZ_CHECK } else { '(不可用,将跳过结构自检)' })" # xelatex(TikZ 编译器;不存在则本机无 TikZ 能力,跳过 TikZ 只出 HTML 图;本机 TeX Live 2025 已装) $XELATEX = (Get-Command xelatex -ErrorAction SilentlyContinue).Source "TikZ 编译器 XELATEX=$(if ($XELATEX) { $XELATEX } else { '(不可用,将跳过 TikZ 图)' })" ``` ## ⛔⛔⛔ Output Contract(最高优先级) **必须产出至少 1 张 `figures/fig_*.pdf`,并更新 `figures/latex_includes.tex`**。产物契约与 paper-figure-drawio **完全一致**(对账口径相同,两个 skill 可互换;DSH 下由下方校验块代行对账): - 图名前缀固定:`fig_arch`(架构)/ `fig_flow`(流程,如 `fig_flow_q1`)/ `fig_roadmap`(技术路线)/ `fig_pipeline`(流水线)/ `fig_framework`(框架)。 - 中间产物是 `figures/fig_*.html`,最终产物是同名 `figures/fig_*.pdf`。 - ⛔ **图内绝不放标题**:标题一律由 LaTeX `\caption{}` 管理(避免标题重复、字体不一致)。 - ✅ **流程/算法/架构图里的公式可直接写在 HTML 里**:节点文字内用 `\( ... \)`(行内)或 `\[ ... \]`(独立行)写 LaTeX,出图时命令带 `--render-math`(见 Step 3),截图管线会注入 KaTeX 把它们渲染成真公式(矢量、可放大不糊)。不再需要为了几个公式就整张图退回 TikZ。 - ⛔ **只有"精密几何示意图"才走 TikZ**:需要按真实坐标画点/线/角度/向量场的几何图(如绳系摆几何、光路、受力分解),HTML 的 flex 相对布局摆不准,才用 TikZ 编译(见 Step 5.5)。产物 `figures/tikz_*.pdf` + 同名 `.tex`,写进 `latex_includes.tex`。⛔ 仅当规划清单明确要求这类几何图时才生成,无则跳过。 ⛔ **特殊豁免**:若 PAPER_PLAN.md 明确无架构图/流程图需求(纯文字论文/数据分析报告),允许跳过本 skill 的产物要求;但仍要保留已有 `figures/latex_includes.tex` 不破坏。 ⛔ **结束前必须跑产物校验**: ```powershell $PASS = $true New-Item -ItemType Directory -Force -Path figures | Out-Null $PDF_COUNT = (Get-ChildItem figures\fig_*.pdf -ErrorAction SilentlyContinue).Count $PLAN_NEEDS_DIAGRAM = 0 foreach ($f in @('PAPER_PLAN.md','PROBLEM_ANALYSIS.md')) { if (Test-Path $f) { $PLAN_NEEDS_DIAGRAM += (Select-String -Path $f -Pattern 'html|架构图|流程图|技术路线|fig_arch|fig_flow|fig_roadmap|fig_pipeline|fig_framework' -ErrorAction SilentlyContinue | Measure-Object).Count } } # ⛔ 优先按 FIGURE_MANIFEST 对账:规划的每张图必须产出 $PLAN_FILE = 'PROBLEM_ANALYSIS.md','PAPER_PLAN.md','MODELING_REPORT.md' | Where-Object { (Test-Path $_) -and (Select-String -Path $_ -Pattern '<!-- BEGIN FIGURE_MANIFEST -->' -SimpleMatch -Quiet) } | Select-Object -First 1 if ($PLAN_FILE) { $mani = (Get-Content $PLAN_FILE -Raw) -replace '(?s).*<!-- BEGIN FIGURE_MANIFEST -->', '' -replace '(?s)<!-- END FIGURE_MANIFEST -->.*', '' # ⛔ 按 manifest「HTML/DrawIO/TikZ 章节」标题抓该章节下的全部图名(权威),不靠文件名前缀白名单 $expected = @(); $cap = $false foreach ($line in ($mani -split "`n")) { if ($line -match '^\s*\*\*') { $cap = ($line -match '(?i)html|drawio|tikz'); continue } if ($cap -and $line -match '^\s*-\s+((?:fig_|tikz_)[a-zA-Z0-9_]+)') { $expected += $Matches[1] } } $missing = 0 foreach ($name in ($expected | Select-Object -Unique)) { # ⛔ 认 .pdf/.html/.png 三种:.pdf(最终产物)、.html(HTML中间产物)、 # .png(Word/docx 模式下 tikz_*.pdf/fig_*.pdf 被转 PNG 删 PDF 后的产物)。 # 只认 pdf/html 会把 docx 模式下已转 png 的 TikZ 图误判成 missing。 if (-not (Get-ChildItem "figures\$name.pdf", "figures\$name.html", "figures\$name.png" -ErrorAction SilentlyContinue)) { Write-Output "❌ MANIFEST: $name missing"; $missing++ } } if ($missing -gt 0) { Write-Output "⛔ FIGURE_MANIFEST 对账失败(缺 $missing 张)"; $PASS = $false } else { Write-Output "✅ FIGURE_MANIFEST 全部产出" } } elseif ($PDF_COUNT -ge 1) { Write-Output "✅ figures/fig_*.pdf = $PDF_COUNT" } elseif ($PLAN_NEEDS_DIAGRAM -eq 0) { Write-Output "✓ 规划无架构图/流程图需求,跳过" } else { Write-Output "❌ 规划要求架构图/流程图但未生成"; $PASS = $false } if (-not (Test-Path figures\latex_includes.tex)) { New-Item -ItemType File -Path figures\latex_includes.tex -Force | Out-Null } if ($PASS -ne $true) { Write-Output "⛔ Output verification FAILED — must complete before ending" } ``` ## Workflow ### Step 0: 恢复检查(断线重跑必读) ⛔ 本步骤可能因断线/手动重跑被多次启动。每次启动前**必须**先扫描已有产物: ```powershell Write-Output "=== 工作区扫描 ===" $HAS_HTML = (Get-ChildItem figures\fig_*.html -ErrorAction SilentlyContinue).Count $HAS_PDF = (Get-ChildItem figures\fig_*.pdf -ErrorAction SilentlyContinue).Count $HAS_TIKZ = (Get-ChildItem figures\tikz_*.pdf -ErrorAction SilentlyContinue).Count Write-Output " fig_*.html: $HAS_HTML, fig_*.pdf: $HAS_PDF, tikz_*.pdf: $HAS_TIKZ" Get-ChildItem figures\fig_*.pdf, figures\tikz_*.pdf -ErrorAction SilentlyContinue | Select-Object Name, Length, LastWriteTime | Format-Table -AutoSize ``` | 状态 | 行动 | |---|---| | 规划要求的图都已生成(含 .html + 对应 .pdf 且过 html_pdf_check;有公式图的 tikz_*.pdf 也在) | **跳到 Step 6(latex_includes 核对)**,验证通过即完成 | | 部分已生成 | **只生成缺失的**(已有的不重画) | | 啥都没有 | 从 Step 1 开始 | ⛔ **铁律**:已有的 `figures/fig_*.html` / `figures/fig_*.pdf` / `figures/tikz_*.pdf` 不要重写。 ### Step 1: 读规划 + 确定要画哪些图 + 算风格种子 1. 选规划文档(按存在性优先级)并确定语言: ```powershell # 规划文档(按存在性优先级) $PLAN_DOC = 'PROBLEM_ANALYSIS.md','PROPOSAL.md','PAPER_PLAN.md' | Where-Object { Test-Path $_ } | Select-Object -First 1 Write-Output "=== 使用规划文档: $(if ($PLAN_DOC) { $PLAN_DOC } else { '(无,将只画 1 张 fig_roadmap 兜底)' }) ===" # 文献综述工作流不需要架构图,直接跳过(若命中此分支:本 skill 到此结束,不再执行后续步骤) if ((Test-Path LITERATURE_REVIEW.md) -and (-not $PLAN_DOC)) { Write-Output "✅ 文献综述工作流不需要架构图,已跳过" } # 语言判定(comp_apmcm_zh 是中文赛项,先排除) $probe = @($PLAN_DOC, 'AGENTS.md') | Where-Object { $_ -and (Test-Path $_) } if (Select-String -Path $probe -Pattern 'comp_apmcm_zh' -SimpleMatch -Quiet) { $FIG_LANG = 'zh' } elseif (Select-String -Path $probe -Pattern 'MCM|ICM|APMCM|comp_mcm|comp_apmcm|Language.*English|语言.*English' -Quiet) { $FIG_LANG = 'en' } else { $FIG_LANG = 'zh' } Write-Output "图内文字语言: $FIG_LANG" Write-Output "=== 规划中的架构/流程图清单 ===" if ($PLAN_DOC) { $hits = Select-String -Path $PLAN_DOC -Pattern '^\s*-\s*\[ \]?\s*fig_(arch|flow|roadmap|pipeline|framework)' -ErrorAction SilentlyContinue if ($hits) { $hits | ForEach-Object { $_.Line.Trim() } } else { Write-Output "(未找到显式清单,按工作流类型决定)" } } # ⛔ 判断规划里有没有「精密几何示意图」需求(只有它才走 TikZ) # 注意:含公式的流程/算法/架构图不再走 TikZ —— 公式直接写进 HTML 节点,出图加 # --render-math 由 KaTeX 渲染(见 Step 3、产物契约)。TikZ 只留给需要按真实 # 坐标画点/线/角度/向量的几何图(绳系摆、光路、受力分解等)。 $NEED_TIKZ = 0 if ($PLAN_DOC) { if (Select-String -Path $PLAN_DOC -Pattern 'tikz|几何示意|几何图|受力分解|坐标.*示意|光路' -Quiet) { $NEED_TIKZ = 1 } if (Select-String -Path $PLAN_DOC -Pattern '^\s*-\s+tikz_' -Quiet) { $NEED_TIKZ = 1 } # manifest 里出现 tikz_ 图名也算 } Write-Output "需要 TikZ 几何图: $NEED_TIKZ(1=是,见 Step 5.5;0=否,跳过 TikZ)" Write-Output "(提示:含公式的流程/算法/架构图走 HTML+KaTeX,不计入 NEED_TIKZ)" ``` 2. **⛔ 输出 HTML PLAN CHECKLIST(后续步骤对照用,规划清单就是合同):** 工作流类型决定数量: - **数模竞赛 / 科研流程**(有 PROBLEM_ANALYSIS.md):**严格按规划清单生成,一张不多一张不少**,**至少 1 张 fig_roadmap 技术路线图**。 ⛔ **清单里没有 `fig_flow_q1/q2/…` 就一张都不要画,也不要"补齐每个问题"**——子问题流程图默认关闭 (用户可在前端开启,开启时规划清单里自然会有),清单没列即用户不要,自作主张补齐属于违规超产。 - **开题报告**(有 PROPOSAL.md):**只生成 fig_roadmap**,不画 fig_flow_q1/q2。 - **课程/论文写作**(有 PAPER_PLAN.md):按 PAPER_PLAN.md 列出的 fig_arch/fig_flow_*/fig_pipeline 生成。 - **精密几何图**(`NEED_TIKZ=1`):另在 Step 5.5 生成 `tikz_*`(按坐标画点/线/角度/向量的几何示意,如绳系摆、光路、受力分解),HTML 图与 TikZ 图**互补不重复**——同一张图只归其中一种引擎。含公式的流程/架构图归 HTML(公式靠 KaTeX 渲染),不进 TikZ。 ``` HTML PLAN CHECKLIST (from $PLAN_DOC): [ ] 1. fig_roadmap — 技术路线图 (tpl_roadmap, HTML) [ ] 2. fig_flow_q1 — 问题一求解流程图 (tpl_flow, HTML;公式写 \(...\),出图加 --render-math) [ ] 3. fig_flow_q2 — 问题二求解流程图 (tpl_flow, HTML) [ ] 4. fig_pipeline — 数据处理流水线 (tpl_pipeline, HTML)
Auf GitHub ansehen
Diese SKILL.md ist sehr gross, daher zeigt SkillsMP hier nur den ersten Abschnitt. Auf GitHub ansehen