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