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
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.
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.
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
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
<assign|foo|>
Das Makro
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
<assign|markup-output|>
Auf diese Weise wird die Ausgabe zentriert, wenn sie mit