Steuerung des logischen Ablaufs

Neben Folgen von Ausdrücken, die mit dem concat-Konstrukt erzeugt werden könne, und dem Mechanismus für die Makro-Expansion besitzt die TeXmacs-Stil-Definitions-Sprache noch einige andere Konstrukte, um den logischen Ablauf zu steuern: if, case, while und for-each. Diese Konstrukte können mit dem Menü QuellcodeAblaufsteuerung erreicht werden. Wir müssen aber den Anwender warnen, diese Konstrukte sind nicht sehr sicher: sie können nur auf Zeileninhalte angewendet werden und ihr Ergebnis hängt von der Erreichbarkeit der Makroargumente ab. Die Erreichbarkeit kann aber nicht vorab geprüft werden!

Das wichtigste Konstrukt ist if, das mit dem Kurzbefehl A-? erzeugt werden kann. Damit kann man bedingten Schriftsatz erreichen:

< assign | appendix | < macro | title | body | < document |

<\compound|

<if|<long-document>|chapter-appendix|section-appendix>

|

title

|

body

>

> > >

In diesem Beispiel ist appendix ein Block, der aus einem Titel und einem Rumpf besteht. Dieser wird als Kapitel in langen Dokumenten und als Abschnitt in anderen Dokumenten gesetzt. Im folgenden ist eine unzulässige Inplementierung gezeigt. Sie funktioniert nicht, weil if zur Zeit nur mit Zeileninhalten arbeitet:

< document |

So gehts nicht:

| | < assign | appendix | < macro | title | body | < document |

<\if|

<long-document>

|

<chapter-appendix|title|body>

|

<section-appendix|title|body>

>

> > > >

Das if-Konstrukt kann auch benutzt werden um optionale Argumente einzuführen:

< assign | hey | < macro | first | second |

<\if|

<equal|second|?>

|

Hey first, you look lonely today...

|

Hey first and second, you form a nice couple!

>

> >

TeXmacs kann aber nicht entscheiden, welche Argumente optional sind und welche Argumente erreichbar (vom Anwender editierbar) sind. Deshalb muß diese Information von Hand mit dem drd-props-Konstrukt festgelegt werden. Die Konstrukte case, while und for-each werden in Steuerung des logischen Ablaufs im Abschnitt Konstrukte für Stil-Definitionen eingehender behandelt.

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