이 문서는 https://tiddlywiki.com/languages/ko-KR/에서 티들리위키의 정적 HTML 표현의 일부입니다

Pragma: \define

2023년 12월 17일 오후 6:55

The \define pragma is used to define macros. It is a shortcut syntax for the SetVariableWidget.

The usual form allows macros to span multiple lines.

\define <macro-name>(<param-name>[:<param-default-value>],<param-name>[:<param-default-value>]...)
<multiple-line-definition-text>
\end [<macro-name>]

Note that the \end marker can optionally specify the name of the macro to which it relates which allows macro definitions to be nested.

There is also a single line form for shorter macros:

\define <macro-name>(<param-name>[:<param-default-value>],<param-name>[:<param-default-value>]...) <single-line-definition-text>

The first line of the definition specifies the macro name and any parameters. Each parameter has a name and, optionally, a default value that is used if no value is supplied on a particular call to the macro.

The lines that follow contain the text of the macro text (i.e. the snippet represented by the macro name), until \end appears on a line by itself:

\define sayhi(name:"Bugs Bunny",address:"Rabbit Hole Hill")
Hi, I'm $name$ and I live in $address$.
\end

Alternatively, the entire definition can be presented on a single line without an \end marker:

\define sayhi(name:"Bugs Bunny") Hi, I'm $name$.

Macro definitions can be nested by specifying the name of the macro in the \end marker. For example:

\define special-button(caption:"Click me")
\define actions()
<$action-sendmessage $message="tm-notify" $param="HelloThere"/>
\end actions
<$button actions=<<actions>>>
$caption$
</$button>
\end special-button

<<special-button>>

That renders as:

Warning
If macros are nested, textual substitution will only occur for the outermost macro. Thi is because by the time the inner macros are processed all the substitutions will have already occurred

A more formal presentation of this syntax is also available.