Tabulatoren
Mit Tabulatoren lassen sich Texte innerhalb eines Absatzes an festen Positionen ausrichten, ganz ohne Tabelle. Typische Anwendungen sind Inhaltsverzeichnisse mit rechtsbündigen Seitenzahlen und Füllpunkten, Formulare mit Bezeichnung und Wert oder kleine Preislisten mit Zahlen, die am Komma ausgerichtet sind.
Die Tabstopps werden im Textformat mit dem Attribut tab-stops bei <DefineTextformat> festgelegt. Ein Tabulatorzeichen (	) im Text rückt den folgenden Text zum nächsten Tabstopp.
| Tabstopps gibt es seit Version 5.9.8. |
Tabstopps festlegen
Das Attribut tab-stops enthält eine durch Kommas getrennte Liste von Tabstopps. Jeder Tabstopp beginnt mit seiner Position, gemessen vom Anfang des Absatzes. Die Position ist eine Länge (25mm) oder ein Anteil der Textbreite in Prozent (50%, 100% ist der rechte Rand).
<DefineTextformat name="form" alignment="leftaligned"
tab-stops="25mm" indentation="25mm" rows="-1"/>
...
<Paragraph textformat="form">
<Value>Anschrift	Heidestraße 17, 51147 Köln, ein längerer Text, der umbricht</Value>
</Paragraph>

Die Angaben indentation="25mm" und rows="-1" sind nicht nötig, sorgen aber für einen hängenden Einzug: Ohne sie beginnen Folgezeilen am linken Rand des Absatzes, mit ihnen stehen sie unter dem Wert.
Das Tabulatorzeichen kann in den Daten stehen oder im Layout eingefügt werden, entweder als eigenes <Value>	</Value> oder in einem XPath-Ausdruck:
<Paragraph textformat="form">
<Value select="concat(@label, '	', @value)"/>
</Paragraph>
Ausrichtung
Hinter der Position kann die Ausrichtung des Textes am Tabstopp stehen:
| Angabe | Wirkung |
|---|---|
left | Der Text beginnt am Tabstopp (Voreinstellung). |
right | Der Text endet am Tabstopp. |
center | Der Text wird am Tabstopp zentriert. |
decimal | Zahlen werden am Dezimalpunkt ausgerichtet. |
decimal(',') | Zahlen werden am angegebenen Zeichen ausgerichtet, hier am Komma. |
Text ohne das Trennzeichen endet bei decimal am Tabstopp, wie bei right. So stehen ganze Zahlen richtig in der Spalte, und auch Spaltenköpfe lassen sich mit derselben Einstellung setzen:
<DefineTextformat name="prices" alignment="leftaligned"
tab-stops="50mm decimal(','), 85mm decimal(',')"/>
...
<Paragraph textformat="prices">
<Value>Kaffee	3,50	4,17</Value>
</Paragraph>

Mit center lassen sich zum Beispiel Beschriftungen unter Unterschriftslinien setzen: tab-stops="25% center, 75% center".
Füllzeichen
Mit leader('...') wird die Lücke vor dem Tabstopp mit dem angegebenen Text gefüllt, meistens mit Punkten. Die Füllzeichen stehen in allen Zeilen an denselben Positionen, damit die Punkte untereinander stehen. Leerzeichen im Füllzeichen vergrößern den Abstand der Punkte.
<DefineTextformat name="toc" alignment="leftaligned"
indentation="8mm" rows="-1"
tab-stops="8mm, 100% right leader(' . ')"/>
...
<Paragraph textformat="toc">
<Value>2	Tabulatoren und ein etwas längerer Titel, der in die nächste Zeile umbricht	12</Value>
</Paragraph>

Auch hier sorgt der hängende Einzug dafür, dass ein umbrechender Titel unter dem Titel weiterläuft und nicht unter der Kapitelnummer. Die Seitenzahl wird mit dem rechtsbündigen Tabstopp in die letzte Zeile gesetzt.
Verhalten im Detail
- Ein Tabulator springt immer zum nächsten Tabstopp rechts von der aktuellen Position. Ist der Text schon über einen Tabstopp hinausgelaufen, wird dieser übersprungen.
- Gibt es in der Zeile keinen weiteren Tabstopp, ist der Tabulator ein normales Leerzeichen.
- Leerzeichen direkt vor und nach einem Tabulator werden entfernt.
Name 	 Wertergibt dasselbe wieName	Wert. - Text hinter einem Tabstopp mit
right,centeroderdecimalwird nicht umbrochen, solange er in die Zeile passt. - Prozentangaben beziehen sich auf die Breite des Absatzes, also zum Beispiel auf die Breite des Textblocks oder der Tabellenzelle.
- Ist
tab-stopsangegeben, hat es Vorrang vor dem Attributtab. - Zeilen mit Tabulatoren werden im Blocksatz nicht gedehnt, die übrigen Zeilen des Absatzes schon.
Beispiel
Ein vollständiges Bestellblatt mit Inhaltsverzeichnis, Formularfeldern, Preisliste und Unterschriftslinien, ganz ohne Tabellen, liegt im Beispiele-Repository.
Tabulatoren oder Tabelle?
Tabulatoren eignen sich für einzeilige Einträge und einfache Spalten innerhalb von Fließtext, vor allem wenn Füllpunkte gebraucht werden. Sobald Zellen mehrzeilig werden, Rahmen oder Hintergrundfarben brauchen oder sich über Seiten mit wiederholtem Tabellenkopf erstrecken, ist eine Tabelle die bessere Wahl.
