Listenkontexte anpassen

Listen bestehen aus zwei verschiedenen Bestandteilen: der äußeren Listenstruktur z.B. Ränder und der inneren Struktur, den einzelnen Punkten. Die Listenkontexte können durch Um- oder Neudefinition der Darstellungsmakros oder durch Definition zusätzlicher Makros, die zur gleichen abstrakten Schnittstelle (D.T.D.) passen, geändert werden.

Die Darstellung der äußeren Listenstruktur wird durch das render-list-Makro gesteuert, das den Rumpf der Liste als Argument übernimmt. Betrachten Sie die folgenden Umdefinition von render-list:

< assign | render-list | < macro | body |

<\surround|

<no-page-break*><vspace*|0.5fn>

|

<right-flush><vspace|0.5fn><no-indent*>

|

<with|par-left|<plus|par-left|3fn>|par-right|<plus|par-right|3fn>|body>

>

> >

Diese Umdefinition verändert die Darstellung aller Listen (Auflistung, Aufzählung, usw.), indem der rechte Rand um 3fn reduziert wird:

In ähnlicher Weise kann man die innere Listenstruktur, die einzelnen Punkte, konfigurieren, indem man die Makros aligned-item und compact-item benutzt. Beide Makros haben ein Argument, das die Kennzeichnung (kennzeichnenden Text) des Listenpunktes übergibt. aligned-item für „ausgerichtete” Punkte, setzt an einer festen Stelle in Bezug auf den Seitenrand die Trennmarke, stellt die Kennzeichnung rechtsbündig von der Trennmarke dar. Dadurch ist der Platz für die Kennzeichnung beschränkt. Dann positioniert es den Text rechts von der Trennmarke. Dagegen positioniert compact-item die Kennzeichnung linksbündig an den Seitenrand, dann die Trennmarke und fügt den Textinhalt daran rechts anschließend ein. So sind lange Kennzeichnungen möglich. Die folgende Umdefinition von aligned-item

< assign | aligned-item | < macro | x |

<\concat|

<vspace*|0.5fn>

|

<with|par-first|-3fn|<yes-indent>>

|

<resize|<with|color|red|x>|r-2.5fn||r+0.5fn|>

>

> >

stellt die Kennzeichnung aller Listen-Kontexte mit Punkten des „kompakten“ Typs rot dar:

Bemerkung 1. Die Makros aligned-item und compact-item müssen Zeileninhalt produzieren, damit man sie benutzen kann, um damit Blockinhalte zu umgeben. Eine Reihe von anderen internen Makros (aligned-space-item, long-compact-strong-dot-item, usw.) basieren auf aligned-item und compact-item, und werden für eine große Zahl verschiedener Arten von Listen benutzt (itemize-arrow, description-long, usw.). Für die Zukunft planen wir, item und item* mit einem notwendigen Rumpfargument, body, zu versehen. Man sollte das berücksichtigen, wenn man Listen-Kontexte entwirft, um den Code aufwärts-kompatibel zu halten.

Die std-list D.T.D. stellt ein Makro new-list bereit, mit dem neue Listen definiert werden können. Seine Syntax ist <new-list|name|item-render|item-transform>. name ist der Name des neuen Listen-Konstrukts, item-render ein (Zeilen)-Makro zur Darstellung und item-transform eine zusätzliche Transformation, die auf den zu diesem Punkt gehörigen Text angewendet wird. So kann man z.B. einen Kontext enumerate-roman, wie folgt, definieren:

<document|<new-list|enumerate-roman|aligned-dot-item|<macro|x|<number|x|roman>>>>

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