English version:
SKILL.en.md
diagram — 圖表 & 圖形
輕量級技能,包含兩個指令稿:scripts/mmd2png.py(Mermaid → PNG,預設僅在本機透過 mmdc 執行;遠端模式需明確選擇)和 scripts/chart.py(數據圖表 → PNG,使用 matplotlib,可經由 uv 或系統內建 Python)。輸出檔案與原始檔案並存,不會覆蓋既有檔案。
需求對應表
| 需求 | 做法 |
|---|---|
| 流程圖 / 時序圖 / 類別圖 / 狀態圖 / ER 圖 / 甘特圖 / 系統架構圖 | Mermaid → scripts/mmd2png.py(預設僅使用本機 mmdc) |
| 從實際數據繪製長條圖 / 圓餅圖 / 折線圖 | scripts/chart.py(matplotlib;若套件未快取,uv 可能需要網路) |
嵌入 .report.docx 報表的圖表 | PNG +  寫入 .report.md,再透過 paper 技能與 doc 配方輸出為 DOCX |
| Mermaid/matplotlib 無法支援的圖表(3D、高度自訂圖形) | [N/A] — 明確告知用戶限制,不虛構方法 |
規則
- 輸出與原始檔並存:
<原始檔名>.diagram.png(圖片)+<原始檔名>.diagram.mmd(Mermaid 原始檔,可編輯)。不會覆蓋原始檔案。 - Mermaid:撰寫至
.mmd,渲染使用python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png';圖表標籤使用用戶使用的語言。 - 繪製圖表的數據必須是來源中的實際測量值或術語(標註
[fact]/[observed]);不得繪製虛構數據。 - 本地優先,不暗自傳送資料:預設
mmd2png.py僅使用mmdc;若缺少 CLI/瀏覽器或發生錯誤,則停止並報告原因,不呼叫網路。需安裝npm i -g @mermaid-js/mermaid-cli和 Chrome/Chromium。僅當用戶/代理明確選擇時,才設定MMD2PNG_BACKEND=remote(Kroki 或 mermaid.ink)、kroki或ink。chart.py在本機處理;uv run --with matplotlib若尚未安裝/快取,可能需要網路取得套件,因此離線時請使用已安裝 matplotlib 的 Python 或準備好的快取。 - 交付前驗證:
mmd2png.py會自動檢查 PNG 魔數及檔案大小 ≥ 1 KB;來自遠端的 JPEG 圖片會透過 ImageMagick 轉換為真正的 PNG(若缺少轉換工具,則存為<f>.jpg並發出警告,不會偽裝成.png);嵌入報表後,需在 DOCX 轉 PDF 後以pdfinfo+pdftotext再次檢查(圖片能正常顯示,不造成頁面破裂)。 - 尺寸:每個圖表只表達一個概念,字型大小足夠閱讀;圖表過寬時應拆分為多個小圖,而非讓編輯器自動縮小。
- 輸入語言提示:使用與用戶相同的語言回覆。
指令稿
scripts/mmd2png.py— Mermaid → PNG(預設僅本機;遠端可透過MMD2PNG_BACKEND選擇啟用):python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png' [--scale 2] [--size 1600] [--theme forest]scripts/chart.py— CSV 數據(兩欄:標籤, 數值)→ PNG:uv run --with matplotlib python3 scripts/chart.py '<f>.csv' '<f>.diagram.png' <bar|pie|line>
