Ein einfaches Stil-Paket schreiben

Lassen Sie uns an einem einfachen Beispiel erklären, wie man ein einfaches Stil-Paket schreibt.

Wenn Sie das Beispiel direkt am Rechner nachvollziehen wollen, erleichtern Sie sich die Arbeit, wenn Sie ein zweites TeXmacs parallel eventuell in einem anderen virtuellen Fenster starten und zwischen den beiden Instanzen wechseln.

Zuerst einmal müssen Sie einen neuen Puffer, d.h. eine neue leere Textdatei, erzeugen. Dazu wählen Sie das Menü DateiNeu und wählen den Quellcode Basis-Stil unter DokumentBasis-StilQuellcode-Menü. Dann speichern Sie mit einem aussagekräftigen Namen und der Datei-Ergänzung .ts in Ihr Paket-Verzeichnis:

    $HOME/.TeXmacs/packages

Beachten Sie bitte, dass der Knopf Texte im Datei-Browser dem Verzeichnis

    $HOME/.TeXmacs/texts

entspricht. Daher können Sie durch Doppelklick auf .. und danach auf packages schnell in dieses Verzeichnis wechseln. Ganz entsprechend enthält das Verzeichnis

    $HOME/.TeXmacs/styles

Ihre persönlichen Basis-Stil-Dateien. Nach dem Sichern mit der Dateiergänzung .ts sollte das leere Stil-Paket automatisch in dem Menü DokumentPaket einfügen erscheinen. Wenn Sie ein Unterverzeichnis im Verzeichnis $HOME/.TeXmacs/packages erstellen, erzeugen Sie automatisch ein neues Untermenü und wenn Sie da hinein ein Stilpaket speichern einen neuen Menüpunkt in dem entsprechenden Untermenü.

Lassen Sie uns nun ein einfaches Makro hi erzeugen, das „Hello world” auf dem Bildschirm ausgibt. Zuerst tippen Sie A-= oder M-i =, um eine Zuordnung, engl. „assignment”, zu erzeugen. Sie sollten nun auf dem Bildschirm Folgendes sehen

<assign||>

Geben Sie nun “hi” als erstes Argument ein, gehen zum zweiten Argument und tippen A-m oder M-i m um ein Makro einzufügen. Jetzt sollte es so aussehen:

<assign|hi|<macro|>>

Schließlich schreiben Sie „Hello world” in den Rumpf des Makros. Ihr Dokument sollte nun aus folgender Zeile bestehen:

<assign|hi|<macro|Hello world>>

Nachdem Sie Ihr Stil-Paket unter einem Namen gespeichert haben, können Sie das Makro verwenden, z.B., indem Sie ein neues Dokument erstellen und es mit Ihrem Stil-Paket mit DokumentPaket hinzufügen verbinden. Sie benutzen das Makro hi durch Eintippen von \ h i mit nachfolgendem Drücken der Eingabetaste, return.

Analog können Sie Makros mit Argumenten erzeugen, die Sie zur Laufzeit eingeben und im Makro auswerten können. Wenn Sie z.B. in gleicher Weise ein Makro hello erzeugt haben, können Sie mit der Tastenkombination A-links oder M-i links im Makrorumpf ein zusätzliches Argument auf der linken Seite des Cursors einfügen. „links“ steht dabei für die linke Pfeiltaste. Nachdem Sie mit dem Cursor im Makrorumpf A-links oder M-i links eingetippt haben, geben Sie dem Argument einen Namen, z.B. „name”, um anschließend darauf zugreifen zu können. Sie sollten nun Folgendes sehen:

<assign|hello|<macro|name|>>

In die zweite Argumentposition des Makrorumpfes tippen Sie nun Ihren Text z.B. „Hallo“, dann um das mit dem Namen „name“ bezeichnete erste Argument einzusetzen, drücken Sie die Kombinationen A-# oder M-i # tippen dann schließlich „name”, drücken rechts, das ist die rechte Pfeiltaste und geben weiter Text ein z.B. „, wie geht es Ihnen?”. Das sieht dann so aus:

<assign|hello|<macro|name|Hallo name, wie geht es Ihnen?>>

Die Kurzbefehlkombination A-# bzw. M-i # wird zum Zugriff auf das Makroargument, hier name, verwendet. Anstatt A-# bzw. M-i # zu benutzen, dann „name” and right einzutippen, können Sie auch die \-Taste benutzen und \ n a m e gefolgt von der Eingabetaste return eintippen. Nachdem Sie Ihr Stil-Paket gesichert haben, können Sie Ihr neues Makro in jedem Dokument, dem Sie dieses Paket zugefügt haben, benutzen, indem Sie \ h e l l o eingeben und die return-Taste betätigen.

Intern werden alle Makrodefinitionen in der „TeXmacs typesetter“-Umgebung gespeichert. Daneben werden dort auch normale Kontextvariablen wie Absatzzähler (section counters) oder Schriftgröße (font size) abgelegt. Die Kontextvariablen können global mit dem assign-Konstrukt oder lokal mit dem with-Konstrukt gesetzt werden. Wenn z.B. die folgenden Zeile

<assign|section-nr|-1>

in Ihrem Paket enthalten ist und Sie als Basis-Stil Artikel verwenden, dann erhält der erste Abschnitt die Abschnittnummer 0.

Die folgende Variante

<assign|hello|<macro|name|Hello <with|font-shape|small-caps|name>!>>

hello-Makros bringt den Namen in in kleinen großbuchstaben auf den Bildschirm. Beachten Sie, daß Sie mit dem with-Konstrukt auch ein Makro lokal umdefinieren können. Dies wird beispielsweise in den Standardumgebungen für Listen benutzt, wo das Makro, das die Listensymbole liefert innerhalb des Listenrumpfes modifiziert wird.

Eine weitere Variante des hello-Makros benutzt das person-Makro des Standard-Stils:

<assign|hello|<macro|name|Hello <person|name>!>>

Um in die Makrodefinition <person|name> einzufügen, müssen Sie zuerst an seiner Stelle ein Leerkonstrukt (compound) erzeugen. Dazu benutzen Sie A-c oder M-i c, tippen dann „person”, fügen ein Argument mit A-rechts oder M-i rechts hinzu, und tippen schließlich den Namen des Arguments name. Schhließlich drücken Sie return, um das unbenanntes Makro in ein person-Makro umzuwandeln. Alternativ können Sie \, “person”, A-rechts und „name” tippen.

Durch Kombination der vorgehend beschriebenen Vorgehensweisen sollte der Durchschnittsanwender bereits Stil-Pakete für alle häufig vorkommenden Anwendungsfälle zu schreiben können.

Ein interessane Technik, mit der sich Makros schreiben lassen, die komplizierte mathematische Formeln enthalten, die wiederum von variablen Formeln abhängen, ist die Folgende:

  1. Schreibe die Formel z.B. (a1,…,an) in ein gewöhnliches Dokument.
  2. Erzeuge ein Makroskelett in ihrem Stil-Paket:

    <assign|n-tuple|<macro|a|>>

  3. Kopiere die Formel und füge sie in den Rumpf des Makros ein:

    <assign|n-tuple|<macro|a|(a<rsub|1>,…,a<rsub|n>)>>

  4. Ersetze die die Variablen, die parametrisiert werden sollen, durch Makro-Argumente:

    <assign|n-tuple|<macro|a|(a<rsub|1>,…,a<rsub|n>)>>

  5. Nach dem Speichern können Sie das neue Makro in Dokumenten einsetzen, die Ihr Paket verwenden, z.B.:

    (a1,…,an) = (b1,…,bn).
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".