caption: Makros
created: 20131205160746466
creator: pmario
modified: 20140922124415476
modifier: ChrisK
tags: WikiText
title: Makros in WikiText
type: text/vnd.tiddlywiki

\define meinErstesMakro(name:"Bugs Bunny",adresse:"Rabbit Hole Hill")
Hallo, Ich bin $name$ und lebe in $adresse$
\end

\define meinZweitesMakro(name:"Mario",adresse:"dort")
Hallo, Ich bin $name$ und würde gerne mal wieder nach $adresse$ fahren:)
\end

!! Makros Definieren

!!! Für die Ungeduldigen

Makros sind Text Bausteine, die an beliebiger Stelle aufgerufen / eingefügt werden können. Eine Makro Definition kann zum Beispiel so aussehen und ''muss'' am Anfang eines Tiddlers eingefügt werden:

```
\define meinErstesMakro(name:"Bugs Bunny",adresse:"Rabbit Hole Hill")
Hallo, Ich bin $name$ und lebe in $adresse$
\end
```

Der Aufruf erfolgt mit:

```
Es erzeugt folgenden Text: ''<<meinErstesMakro>>''
```

Es erzeugt folgenden Text: ''<<meinErstesMakro>>''

---

!!! Was genau passiert hier?

Die erste Zeile der Definition startet mit: `\define` und enthält:

* Den Makro Namen: `meinErstesMakro`
* Die Parameter Namen: `name` und `adresse`
* Die Standard Werte: `Bugs Bunny` und `Rabbit Hole Hill`

Parameter sollten immer sinnvolle Standard Werte haben, da es die Verwendung erleichtert. 

Die letzte Zeile des Makros ist `\end` und markiert das Ende eines Makros :)

Der Bereich zwischen `\define` und `\end` wird als Makro Code bezeichnet. In diesem Bereich können die Makro Parameter mit `$name$` bzw `$adresse$` als Platzhalter verwendet werden. 

Wie im Beispiel ersichtlich: `Hallo, Ich bin $name$ und lebe in $adresse$`

---
!!! Einzeilige Makros

Für einzeilige Makros kann die `\end` Markierung entfallen!

```
\define meinZweitesMakro(name:"Bugs Bunny") Hallo, Ich bin $name$
```

!!! Makro Regeln

* Makro Definitionen müssen am Anfang des Tiddlers eingefügt werden.
* Makros sind nur in dem Tiddler sichtbar der sie definiert.
* Tiddler die mit Transklusion eingefügt werden können definierte Makros sehen, jedoch nicht selber mitbringen!

!!! Globale Makros

* Globale Makros können in Tiddlern definiert werden, die mit dem System Tag: [[$:/tags/Macro]] getaggt sind. Diese Makros sind in jedem Tiddler sichtbar.

* [[JavaScript Macros]] sind global sichtbar und haben Zugriff auf die TW Kern Funktionen. 

* Makros können mit dem ImportVariablesWidget importiert werden. (Für geübte Anwender)

!! Makros Verwenden

```
<<meinErstesMakro>>
<<meinErstesMakro "Donald Duck">>
<<meinErstesMakro "Mickey Mouse" "Mouse House">>
```

Dargestellt als:

<<<
<<meinErstesMakro>>
<<meinErstesMakro "Donald Duck">>
<<meinErstesMakro "Mickey Mouse" "Mouse House">>
<<<

Wie wir sehen können, werden die Parameter in der Reihenfolge übernommen, in der sie definiert wurden: `name`, `adresse`. Da Makros jedoch viele Parameter haben können und es passieren kann, dass wir nur den Zweiten ändern möchten können Parameter auch benannt übergeben werden.

```
<<meinZweitesMakro adresse:"Dufftown">>
```

<<meinZweitesMakro adresse:"Dufftown">>


!! Mehrzeilige Parameter beim Aufruf

Makros können mit mehrzeiligen Parametern aufgerufen werden, wenn sie in Anführungsstriche gesetzt werden:

```
<<meinErstesMakro "Mickey Mouse" "Mouse House,
Mouse Lane,
Rodentville,
Ratland.">>
```

Wenn Sie 3 doppelte Anführungszeichen verwenden, dann können die Parameter einfache Anführungszeichen enthalten:

```
<<meinErstesMakro "Mickey Mouse" """Mouse House,
"Mouse" Lane,
Rodentville,
Ratland.""">>
```

