--- Variable
+++ Variable
@@ -1,1 +1,38 @@
+= Variable 문서 변수
+문서 안에서 여러 번 쓰이거나 자주 바뀌는 값을 한 곳에 모아 두고 본문에서 꺼내 씁니다.
+== 문법
+
+값은 문서 맨 위 `#!var` 디렉티브로 정하고, 본문에서 `{{이름}}` 으로 꺼냅니다.
+
+[[[#!Vim text
+#!var 제품명 AhaWiki
+#!var 담당자 홍 길동
+
+= {{제품명}} 계약서
+담당: {{담당자}}
+]]]
+
+ * '''`#!var` 는 문서 맨 위에 있어야 합니다.''' 디렉티브는 `#!` 로 시작하는 줄이 이어지는 동안만 읽고, `#!` 아닌 줄이 처음 나오면 거기서 끝납니다. `#!read` · `#!write` 같은 다른 디렉티브와 나란히 두면 됩니다.
+ * '''첫 공백까지가 이름, 나머지가 값입니다.''' 값에 공백·쉼표가 들어가도 됩니다 — `#!var 계약금액 금100,000,000원` 은 그대로 들어갑니다. 이름과 값은 양쪽 공백을 떼고 저장합니다.
+ * '''이름에 한글을 써도 됩니다.''' `}` 만 아니면 무엇이든 이름이 됩니다.
+ * '''정의하지 않은 이름은 그대로 남습니다.''' `{{없는이름}}` 은 오류가 아니라 `{{없는이름}}` 으로 출력됩니다.
+ * '''백틱 안은 치환하지 않습니다.''' `` `{{제품명}}` `` 은 글자 그대로 나옵니다 — 문법 자체를 설명할 때 쓸 수 있습니다.
+
+== 어디까지 되나
+
+치환은 '''문서 하나 안'''에서만 일어납니다. 다른 문서의 변수를 꺼내 쓸 수는 없습니다.
+
+`[[[...]]]` 블록 '''안에서도''' 치환됩니다. ["InterpreterPaper"] 는 `#!var class` · `#!var docId` 를, ["InterpreterGantt"] 는 `#!var defaultEst` 를 이 방식으로 읽습니다.
+
+== 옛 방식
+
+2026-09-08 이전에는 `[[Set(이름,값)]]` · `[[Get(이름)]]` 매크로가 같은 일을 했습니다. [MacroGetMacroSet] 참고. 두 체계가 나란히 있었고, 실사용은 `#!var` 쪽으로 이미 기울어 있었습니다 — 조사 시점에 `#!var` 는 329곳, `Set`/`Get` 은 문서 3장뿐이었습니다. 그 3장을 옮기고 매크로는 제거했습니다.
+
+`[[Set]]` 은 문서 중간에서도 값을 정할 수 있었지만 `#!var` 는 맨 위에만 옵니다. 옮긴 문서들은 이미 전부 맨 위에 모아 두고 있어서 실제로 잃은 것은 없었습니다.
+
+== 관련 문서
+
+ * ["InterpreterPaper"]
+ * ["InterpreterGantt"]
+ * ["MacroGetMacroSet"]