Makros

Dieses Dokument behandelt die folgenden Themen:


Allgemeine Informationen

Ein Makro ist eine Folge von Con-form-Anweisungen und/oder Text. Es ist sinnvoll, ein Makro zu definieren, wenn die gleichen Anweisungen oder der gleiche Text mehrfach in einem oder mehreren Dokumenten vorkommen.

Ein Makro kann beliebige Con-form-Anweisungen enthalten, mit Ausnahme einer zweiten .MA-Anweisung (d.h. Makros können nicht geschachtelt werden). Ein Makro kann andere Makros aufrufen. Rekursive Makros sind nicht möglich, d.h. ein Makro darf sich nicht selbst aufrufen (weder direkt noch über ein anderes Makro).

Alle Makros, die Sie definieren, sollten in einem extra Dokument enthalten sein. Dieses Dokument, das so genannte "Formatierprofil", wird immer vor dem Rohdokument verarbeitet (siehe Formatierprofile).

Wenn Sie ein Makro nicht im Formatierprofil definieren, können Sie das Makro nur in dem Dokument benutzen, in dem es definiert wurde. In diesem Fall wird der Makroaufruf nur als gültige Anweisung erkannt, wenn er nach der Makrodefinition auftritt.

Eine weitere Möglichkeit, ein Makro in Ihrem Büro allgemein verfügbar zu machen, ist folgende: Legen Sie für jede Makrodefinition ein extra Dokument an. Im Rohtext müssen Sie dann die folgenden Anweisungen angeben, um das Makro aufzurufen:

.EM dokumentname
.makroname

Geben Sie als Parameter dokumentname den Namen des Dokuments an, das die Makrodefinition enthält (siehe die Anweisung .EM). Geben Sie als Parameter makroname den Namen des Makros an, das aufgerufen werden soll.

Ein Makro definieren

.MA - Beginn eines Makros

.MA makroname

Die Anweisung .MA zeigt an, dass eine Makrodefinition beginnt. Als Parameter muss der Name des Makros in derselben Zeile eingegeben werden. Der Name kann bis zu 100 Zeichen haben; zwischen Groß- und Kleinbuchstaben wird nicht unterschieden.

Um z.B. ein Makro namens "Vorgaben" zu definieren, geben Sie an:

.MA Vorgaben

Tipp:
Es wird empfohlen, Makronamen mit mindestens 3 Zeichen zu definieren, damit sie nicht mit Con-form-Anweisungen verwechselt werden können.

Geben Sie unter der Anweisung .MA die Makrodefinition ein (d.h. die Anweisungen und/oder Textzeilen, die das Makro enthalten soll). Es folgt ein Beispiel eines Makros, das Vorgabewerte definiert:

.MA Vorgaben
.LM 10;.RM 60
.FI ON;.JU ON
.OP ESC=/
.OP HYP=E
.IF &$LC < 5:.NP
.ME

Die Makrodefinition wird mit der Anweisung .ME abgeschlossen.

Eine Con-form-Anweisung deaktivieren

Wenn Sie den Namen einer Con-form-Anweisung als Makronamen benutzen, kann die Con-form-Anweisung nicht mehr ausgeführt werden. Jedes Mal, wenn der Name im Rohdokument vorkommt, wird anstelle der Con-form-Anweisung das Makro ausgeführt.

Auf diese Weise können Sie eine Con-form-Anweisung deaktivieren. Das unten gezeigte Makro z.B. hat keine Wirkung, da weder Text noch Anweisungen für das Makro definiert wurden. Es macht jedoch die Con-form-Anweisung .NP, die normalerweise einen Seitenvorschub bewirkt, unwirksam. Dies ist sinnvoll, wenn Sie z.B. ein Dokument zum Korrekturlesen drucken möchten, wobei es wichtiger ist, Papier zu sparen anstatt das endgültige Seiten-Layout zu erhalten.

.MA NP
.ME

.MX - Makro abbrechen

.MX

Sie können die Anweisung .MX an einer beliebigen Stelle innerhalb des Makros angeben, um das Makro zu verlassen, bevor sein Ende erreicht ist. Die Verarbeitung fährt dann nach der Anweisung .ME fort. Die nach der Anweisung .MX stehenden Makrodefinitionen werden nicht verarbeitet.

Wenn Sie die Anweisung .MX in einer .IF-Anweisung verwenden, wird empfohlen, sie nur in einer einfachen Konsequenz anzugeben, die keine .EI-Anweisung erfordert.

Anmerkung:
Wenn Sie die Anweisung .MX in einer Blockkonsequenz (.TH) oder Alternative (.EL) benutzen, wird das Makro verlassen, bevor die Anweisung .EI auftritt. Da Con-form in diesem Fall nicht erkennt, dass Sie die Anweisung .EI angegeben haben, erscheint eine Fehlermeldung.

.ME - Ende eines Makros

.ME

Diese Anweisung schließt eine Makrodefinition ab. Optional können Sie den Namen des Makros angeben, z.B.:

.ME Vorgaben

Mit einer .IF-Anweisung ist es nicht möglich, die Verarbeitung von .ME bedingt zu unterdrücken.

Ein Makro aufrufen

Um ein Makro aufzurufen, geben Sie im Rohtext einen Punkt (.) gefolgt vom Makronamen an. Wenn Sie z.B. das Makro "Vorgaben" aufrufen möchten, geben Sie an:

.Vorgaben

Daraufhin werden die Anweisungen und/oder Textzeilen verarbeitet, die für das Makro definiert wurden. Die Verarbeitung beginnt direkt nach der Anweisung .MA und endet entweder mit der Anweisung .MX oder der Anweisung .ME, die das Makroende anzeigt.

Lokale Makrovariablen

Wenn Sie lokale Makrovariablen definieren, können Sie einem Makro Parameter übergeben (z.B. können Sie Name und Adresse an ein Makro übergeben, das einen Standardbrief erzeugt).

Außer den lokalen Makrovariablen können Sie in der Makrodefinition oder als Parameter im Makroaufruf auch Systemvariablen benutzen oder Variablen, die Sie mit der Anweisung .SV definierten. Wenn Sie Makros definieren, die die Werte dieser Variablen ändern, ist besondere Vorsicht geboten, da leicht Verwirrung entstehen kann, wenn verschiedene Makros die gleiche Variable ändern.

Die Ersetzung von Variablen (siehe die Anweisung .SU) wird von einem Makroaufruf mit Parametern automatisch eingeschaltet. Ein Makroaufruf ohne Parameter schaltet die Ersetzung nicht ein.

Makrodefinition mit Parametern

Eine Makrodefinition kann bis zu 99 lokale Makrovariablen enthalten. Die Namen der lokalen Makrovariablen lauten: $1, $2, $3, ... $99. Vor jeder Makrovariablen in der Makrodefinition muss das Variablenzeichen (anfänglich das kaufmännische Und (&)) angegeben werden.

Später beim Makroaufruf müssen Sie die Parameter (d.h. die entsprechenden Werte für die Variablen) nach dem Makronamen angeben (siehe Makroaufruf mit Parametern).

In der folgenden Makrodefinition bestimmt die Variable $1 die Anzahl der Leerzeilen, die im Dokumenttext eingefügt werden sollen, und die Variable $2 den Text, der nach den Leerzeilen ausgegeben werden soll:

.MA abbildung
.IL &$1
.CE 1
&$2
.SL 2
.ME

Die Variable $1 in der Makrodefinition muss beim Makroaufruf der erste Parameter sein. Die Variable $2 muss als zweiter Parameter angegeben werden. Beispiel für den Aufruf dieses Makros mit zwei Parametern:

.abbildung 5 Statistik

Als Ergebnis werden 5 Leerzeilen (Variable $1) in den Text eingefügt, und der Text "Statistik" (Variable $2) wird nach den Leerzeilen zentriert ausgegeben.

Die Anzahl der Parameter im Makroaufruf bestimmen

Die lokale Makrovariable $0 enthält die Anzahl der Parameter, die beim Makroaufruf nach dem Makronamen angegeben wurden. Beispiel:

.abbildung 5 Statistik
Anzahl der Parameter im aktuellen Makroaufruf: &$0

Im obigen Beispiel wurden beim Makroaufruf zwei Parameter angegeben, d.h. die Variable $0 erhält den Wert 2. Die formatierte Ausgabe sieht folgendermaßen aus:

Anzahl der Parameter im aktuellen Makroaufruf: 2

Wenn Sie ein Makro ohne Parameter aufrufen, wird der lokalen Makrovariablen $0 der Wert 0 (null) zugewiesen.

Beim Makroaufruf die richtige Anzahl von Parametern angeben

Sie können die lokale Makrovariable $0 benutzen, um sicherzustellen, dass die richtige Anzahl von Parametern an ein Makro übergeben wird. Beispiel:

.MA abbildung
.IF &$0 NE 2
.TH
***********************************************************
Dieses Makro hat 2 Parameter:
Parameter 1: Anzahl der Leerzeilen für die Abbildung
Parameter 2: Überschrift der Abbildung
***********************************************************
.EL
.IL &$1
.CE 1
&$2
.EI
.ME

In diesem Beispiel wird die Anweisung .IF benutzt, um sicherzustellen, dass beim Makroaufruf genau zwei Parameter angegeben werden. Sind es mehr oder weniger Parameter, wird eine entsprechende Meldung ausgegeben.

Makroaufruf mit Parametern

Wenn ein Makro Parameter hat, müssen Sie die entsprechenden Werte beim Makroaufruf nach dem Makronamen angeben. Dabei muss zwischen Makroname und Parameter genau ein Leerzeichen stehen. Beispiel:

.kap1 Überblick

Parameter in Apostrophe einschließen

Wenn ein Parameter Leerzeichen oder Kommas enthält, müssen Sie ihn in Apostrophe einschließen. Beispiel:

.kap1 'Überblick über Con-form'

Wäre dieser Parameter nicht in Apostrophe eingeschlossen, würde Con-form annehmen, es handele sich bei den drei Wörtern um drei Parameter.

Anmerkung:
Makroparameter, die keine Leerzeichen oder Kommas enthalten, können in Apostrophe eingeschlossen werden; es ist jedoch nicht erforderlich.

Wenn ein Parameter, der in Apostrophe eingeschlossen werden muss, selbst einen Apostroph enthält, müssen Sie den Apostroph doppelt angeben. Beispiel:

.kap1 'Wie geht''s weiter?'

Ein nicht in Apostrophen eingeschlossener Parameter kann selbst beliebig viele Apostrophe enthalten, jedoch darf das erste Zeichen kein Apostroph sein.

Makroaufruf mit mehreren Parametern

Wenn ein Makro mehrere Parameter hat, muss zwischen den Parametern jeweils ein Komma und/oder Leerzeichen stehen. Das folgende Beispiel hat zwei Parameter, getrennt durch Komma und Leerzeichen (es ist auch möglich, sie nur durch ein Leerzeichen zu trennen):

.bsp 15, 'Ein Makro definieren'

Jeder Parameter, den Sie im Makroaufruf angeben, wird einer lokalen Makrovariablen zugewiesen. Im obigen Beispiel erhält die Variable $1 den Wert 15, und die Zeichenkette "Ein Makro definieren" wird der Variablen $2 zugewiesen.

Die lokalen Makrovariablen sind nur innerhalb des aufgerufenen Makros bekannt. Sobald die Ausführung des Makros beendet ist, sind die lokalen Makrovariablen nicht mehr verfügbar.