Formatierte und strukturierte Ausgabe

Im vorgängigen Kapitel, haben wir beschrieben, dass Ausgabe in Blöcke der Form

DATA_BEGINformat:messageDATA_END

einzukapseln sind. Die Ausgabe message kann rekursiv mehrer Blöcke der gleichen Form in einander verschachtelt enthalten. Als Formate sind z.Z. verbatim, latex, html, ps, scheme implementiert. Das scheme Format dient zur Übertragung von TeXmacs-Bäumen codiert als Scheme-Ausdrücke.

Das formula plugin

Das Plugin formula zeigt, wie das LaTeX-Format als Ausgabe-Format verwendet wird. Es besteht aus den Dateien

    formula/Makefile
    formula/progs/init-formula.scm
    formula/src/formula.cpp

Der Rumpf der Hauptschleife in formula.cpp besteht aus den folgenden Zeilen:

int i, nr;
cin >> nr;
cout << DATA_BEGIN << "latex:";
cout << "$";
for (i=1; i<nr; i++)
  cout << "x_{" << i << "}+";
cout << "x_{" << i << "}$";
cout << DATA_END;
fflush (stdout);

In ähnlicher Weise wird mit dem Plugin nested gezeigt, wie man mit verschachtelten Ausgabe-Blöcken arbeitet. Studieren Sie vor allem die Quellcode-Datei nested/src/nested.cpp.

Bemerkung 1. Im Moment haben wir nur LaTeX als ein Standard-Übertragungsformat für mathematische Formeln definiert, denn es ist das am häufigsten benutzte Format. Für die Zukunft planen wir die Implementierung weiterer, semantisch sichererer Formate. Wir empfehlen, daran zu denken, dass das Baum-Format benutzt werden kann, um die Ausgabe zu übertragen.

Zum Standard-LaTeXhaben wir \* und \bignone Befehle für die Multiplikation und zum Abschluss von großen Operator-Symbolen. Damit kann unterschieden werden, zwischen

    a \* (b + c)

(d.h. a multipliziert mit b + c)

und

    f(x + y).

(d.h f angewendet auf x + y).

Ganz ähnlich:

    \sum_{i=1}^m a_i \bignone + \sum_{j=1}^n b_j \bignone

Hier wird der \bignone Befehl benutzt, um das Kontext-Ende für den \sum Operator zu markieren.

Es zeigt sich, dass der systematische Gebrauch von \* und \bignone in Kombination mit sauberer LaTeX-Ausgabe für die verbleibenden Konstrukte, es a priori ermöglichst, der Ausgabe eine passende Bedeutung zu geben. Insbesondere können zusätzliche Routinen zum Kopieren und Einfügen zwischen verschiedenartigen Systemen formuliert werden.

Das markup plugin

Man sollte immer im Gedächtnis behalten, dass eine strukturierte Ausgabe mit den Stärken von TeXmacs als strukturierter Editor genutzt werden kann und sollte. Im folgenden wollen wir mit dem Beispiel-Plugin markup zeigen, wie man ein neues Makro foo einführt, das als zusätzliches Konstrukt in der Ausgabe der Anwendung genutzt wird. Das Plugins markup besteht aus den folgenden Zeilen:

    markup/Makefile
    markup/packages/session/markup.ts
    markup/progs/init-markup.scm
    markup/src/markup.cpp

Das Stil-Paket markup.ts enthält die folgende Definition von foo:

<assign|foo|>

Das Makro foo wird jetzt folgendermaßen im Rumpf der Hauptschleife von markup.cpp genutzt:

char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN << "latex:";
cout << "$\\foo{" << buffer << "}$";
cout << DATA_END;
fflush (stdout);

Beachten Sie bitte, dass das markup.ts Paket auch markup-output definiert:

<assign|markup-output|>

Auf diese Weise wird die Ausgabe zentriert, wenn sie mit TextSitzungMarkup gestartet werden.

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".