marker-sketch 是做什麼的?
將一個想法轉換成麥克筆草圖:略帶顫抖的粗黑線條、偏移且有麥克筆刷紋理的灰色填充、灰色陰影、簡短的手寫文字、點點紙。每次的呈現都相同,因為風格存在於固定的核心(assets/template.svg、assets/glyphes.svg)中,而且思考過程總是遵循相同的協議。不會憑記憶重新繪製:我們是組合元素。
路徑與相依性
在指令中,${CLAUDE_SKILL_DIR} 是此技能的資料夾(Claude Code 會自動取代)。在 claude.ai 中,如果變數直接出現,請使用從技能資料夾複製到執行環境後的路徑(scripts/compose.py)。工作檔案(draft.svg、croquis.svg)會寫入工作目錄,絕不會寫入技能目錄。
相依性:Python 3 足以執行 compose.py(文字保持在 <text> 中,使用內嵌字體)。fonttools 可將文字轉換為路徑(--outline,在任何地方渲染結果都相同),playwright 搭配 Chromium 可產生用於檢查的 PNG(render.py)。安裝方式:pip install fonttools playwright && playwright install chromium。如果缺少某個相依性且無法安裝,請提供 SVG 並說明未進行視覺檢查。
1. 在十秒內選擇模式
| 情境 | 模式 | 輸出 | 目標時間 |
|---|---|---|---|
| 問題或要求圖表,附圖回應 | 草圖(預設) | 一個 SVG | 一次生成 |
| 會議、工作坊、口頭交流、「展示我們剛說的內容」 | 現場 | 一個非常易讀的 16:9 SVG,每次交流時修改 | 每次修改僅需幾秒 |
| 密集圖表(超過 10 個物件)、大量連結、需控制渲染 | 工作坊 | 透過腳本建構的 SVG,附控制用 PNG | 一分鐘 |
| 「現在、接著、之後」、「目前、未來」、演變、趨勢、可移動元素 | 互動 | 一個獨立的 HTML 頁面 | 一個 JSON 配置 |
如有疑問,從草圖模式開始。預設不要使用 three.js:它僅在工作坊模式下用於建立缺少的透視符號(參見 references/glyphes.md,3D 部分)。
2. 心智協議,始終相同(在繪製之前)
按順序在心智中回答這六個問題。這是保證一致性的關鍵,而不是天賦。
- 一句話訊息。 讀者必須在三秒內理解什麼?這句話將成為標題或藍色註解。
- 圖表家族。 從
references/familles-diagrammes.md中選擇(十五個家族:流程、迴圈、樹狀圖、集合、圖層、中樞、輪狀、曲線、矩陣、網路、場景、線框、前/後、時間軸、漏斗)。 - 可能的隱喻。 如果概念是抽象的(張力、成長、債務、摩擦),尋找一個能承載張力且能用十幾筆畫出的物理物體(
references/metaphores.md)。否則,堅持使用家族。 - 預算。 5 到 9 個物件,40% 留白,文字一至三個詞(最多一個句子作為圖例)。在現場模式中:最多 7 個物件。
- 墨水層級。 黑色 = 訊息的核心(最多一個物件是純黑色)。灰色 = 背景脈絡。藍色原子筆 = 註解、評論箭頭、數字。每張圖僅使用一個強調填充色(黃色螢光筆、橘色、紅色、天藍色或沙色),覆蓋面積小於 10%,絕不用於裝飾。
- 構圖。 從左到右、從上到下閱讀,一個焦點,在寬鬆的網格上對齊,為註解預留空間。
接著撰寫。然後控制(第 8 節)。
3. 不可協商的風格規則
- 絕不使用漸層、細且均勻的輪廓、模糊的陰影。陰影 = 偏移 (-7, 10) 的灰色副本。
- 三種灰色 + 黑色 + 紙張顏色:
f1淺色、f2中色、f3深色、f4純黑色。 - V 形開口箭頭(類別
arr、arrb、arrg),S 形曲線而非直角彎曲。 - 灰色寬虛線流程(
flow),黑色小點虛線邊界(dotk)、虛線(dash)。 - 文字:Patrick Hand 字型,類別
t(36)、tl(52,標題)、ts(27,小型)、tb(藍色)、tg(灰色)、tw(黑底白字)。法文需正確:大寫字母上的重音符號、œ、法文引號 « »,不使用長破折號,使用彎曲撇號 ’。 - 文字要使用讀者的語言。不要使用自創的行話,不要使用句子。
- 不使用表情符號、品牌標誌、受版權保護的角色。
精確數值、顏色和特殊情況:references/grammaire-visuelle.md。
4. 草圖模式:直接書寫
原始繪圖僅包含內容。風格核心由 compose.py 加入。
物件的模式(四層,共享相同的 id):
<use href="#a1" x="-7" y="10" class="sh"/> <!-- 陰影 -->
<use href="#a1" class="pp"/> <!-- 不透明紙張 -->
<use href="#a1" x="-2.5" y="2.5" class="f1"/> <!-- 偏移填充 -->
<g class="ink"><path id="a1" d="M300 300 L560 296 L556 420 L296 424 L302 296"/></g>
<text class="t" x="430" y="372">想法</text>
角度會略微超出(軌跡不會精確閉合),邊長永遠不會與像素完全平行。對於符號(人物、視窗、資料庫、雲端、放大鏡...),使用圖庫:
<use href="#g-person" x="540" y="260" class="cb"/> <!-- 色調類別:cb co cr cs ch c1 c3 c4 -->
目錄:python3 ${CLAUDE_SKILL_DIR}/scripts/compose.py --catalog 或 references/glyphes.md。視覺圖板:references/planche-symboles.png。
組合與控制:
python3 ${CLAUDE_SKILL_DIR}/scripts/compose.py draft.svg -o croquis.svg --outline # 紙張、點、濾鏡、文字轉路徑
python3 ${CLAUDE_SKILL_DIR}/scripts/check.py draft.svg # 預算、強調色、符號、顏色強調
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py croquis.svg # 控制用 PNG(Chromium)
compose.py 的選項:--paper cream|white|kraft|yellow|blue、--no-dots、--transparent(用於放入投影片)、--size 1200x1200、--embed-font(保留可編輯文字)、--title。
不執行程式碼的情況(在 claude.ai 中進行簡單對話):直接複製 assets/template.svg 中的 <defs> 區塊,僅貼上從 assets/glyphes.svg 使用的符號,然後將內容放入 <g id="drawing" filter="url(#wob)"> 中。明確說明未進行視覺檢查。
5. 現場模式:會議、工作坊、口頭簡報
在進行第一次修改前,請先閱讀 references/mode-live.md。重點摘要:
- 聆聽,不要撰寫。從對話中提取 3 到 7 個元素:名詞變成物件,動詞變成箭頭,「但是」和「否則」變成分支,「之前/之後」變成兩個欄位,「首先、然後」變成流程。
- 格式 16:9,最小文字 36 px(
t),標題 52 px(tl),絕不使用ts。四公尺外可讀。 - 位置穩定。 每次修改時,只移動有變化的部分。重複使用相同的識別碼和座標。團隊不應失去參考點。
- 口頭修改:「加入」、「連接」、「劃掉」、「突顯」(純黑色或螢光筆)」、「清理版本」(重新對齊,僅在最後執行一次)。
- 投影:
python3 ${CLAUDE_SKILL_DIR}/scripts/live.py draft.svg會開啟一個頁面,該頁面會在每次檔案被重寫時自動更新(按 f 鍵可切換全螢幕)。在 claude.ai 中:重新發布同一個 artifact,或在每次修改時將 SVG 渲染為 PNG。 - 即時線框和流程:食譜在
references/wireframes-flows.md中。
6. 工作坊模式:由腳本建構的密集圖表
對於超過十個物件或大量連結的情況,使用 scripts/sketch.py 編寫幾行程式碼:連結會自動計算到物件邊緣,包括 S 形曲線和開放箭頭。
import sys; sys.path.insert(0, "${CLAUDE_SKILL_DIR}/scripts")
from sketch import Sketch
s = Sketch()
s.box("a", 260, 420, "探索", fill="f1") # (id, 中心 x, 中心 y, 文字)
s.box("b", 800, 420, "定義", fill="fh")
s.glyph("c", "g-flag", 1340, 400, "交付")
s.link("a", "b"); s.link("b", "c", label="驗證")
s.perimeter(["a", "b"], "探索階段")
s.note(1330, 640, "在此處測量", target="c")
s.save("draft.svg")
物件:box(形狀 box、pill、oval,選項 solid=False 用於重疊的集合)、glyph、text、label、wf(線框元素)、badge(藍色數字)。連結:link(kind="ink|gray|flow|dash|blue|line")、arrow、perimeter、note、highlight、raw(自由 SVG)。完整範例在 examples/build_examples.py 中。
對於大型圖形的自動佈局,使用 ELK 或 dagre (npm) 計算位置,然後將座標傳遞給 sketch.py。
7. 互動模式:隨時間的演變
當需求涉及演變、連續狀態、「現在、接著、之後」、趨勢變化、轉變中的組織、需要移動的元件時:產生一個獨立的 HTML 頁面。閱讀 references/interactif.md(六種模式、配置圖、常見陷阱)。
原理:一個原始繪圖(元素具有 id)+ 一個 JSON 配置(狀態、每個元素的關鍵幀:x y s r o d draw txt、圖層、註解):
python3 ${CLAUDE_SKILL_DIR}/scripts/compose.py draft.svg --interactive scenes.json -o page.html
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py page.html --state 1 # 控制每個狀態
該頁面提供:狀態按鈕、時間滑桿、播放、可顯示或隱藏的圖層、標記為 drag 的元素的拖放功能、雙擊重新命名文字、跟隨元素的連結、將狀態匯出為 SVG、複製佈局(JSON)、鍵盤操作(方向鍵、空白鍵、f 鍵)。無任何相依性,可離線運作。範例:examples/migration-organisation.html、examples/tendance-adoption.html。
8. 在回應之前進行控制
check.py無錯誤(已知的符號、未出現長破折號、僅一個顏色強調)。- 檢查渲染的 PNG:文字可讀、無重疊、陰影可見、焦點明顯、留白足夠。
- 在不閱讀文字的情況下,只看圖畫,訊息應能用一句話概括。
- 如果無法進行視覺檢查,請說明。
9. 根據環境交付
- Claude Code:將
croquis.svg(和 PNG)寫入工作目錄,提供路徑。在現場模式中,啟動live.py。 - claude.ai 附程式碼執行:生成、控制、發送 SVG 和 PNG。對於要保留和分享的互動頁面或圖畫,發布為 artifact(先載入
artifact-design技能,標題兩到四個詞);由compose.py --interactive產生的 HTML 已是獨立的。 - 無程式碼執行:根據第 4 節手寫完整的 SVG,並標示為未經檢查。
法文回應:對圖畫標籤和周圍文字應用 francais-parfait。
10. 參考資料索引
| 檔案 | 何時閱讀 |
|---|---|
references/grammaire-visuelle.md | 風格的精確值、類別、紙張、邊界情況 |
references/familles-diagrammes.md | 選擇和組成十五個家族之一 |
references/metaphores.md | 需要具象化的抽象概念 |
references/glyphes.md | 47 個符號的目錄、新增符號、可選的 3D |
references/mode-live.md | 會議、工作坊、口頭簡報 |
references/wireframes-flows.md | 線框、使用者流程、螢幕狀態 |
references/interactif.md | 動畫頁面、狀態、可拖曳元素 |
references/planche-symboles.png | 所有符號的預覽 |
examples/ | 六個草圖(SVG 和 PNG)、兩個互動頁面、brut/(原始繪圖和配置)、build_examples.py |