Kunst, Geschick und Handwerk: Professionelle Tabellengestaltung mit TeX

Überall dort, wo man es mit Zahlen zu tun hat, spielen Tabellen eine zentrale Rolle. Tabellen erleichtern die Übersicht und vermitteln schnell einen Einblick in das, was jemand mitteilen will. Doch wissen selbst geübte TeX-Anwender ein Lied davon zu singen, wie arbeitsintensiv es sein kann, eine ansprechende Tabelle zu erzeugen und im Text zu plazieren.

Erste Hilfe leistet zumeist das von Leslie Lampert entwickelte Makropaket »LateX«. Gegenüber »plain« bietet es vor allem den Vorteil, daß es an der logischen Struktur eines Textes orientiert ist. Zahlreiche bereits vordefinierte Layouts (article, report, book..) schaffen zwischen TeX und dem Anwender eine weitaus benutzerfreundlichere Ebene.

Um die weiter unten behandelten speziellen Möglichkeiten des Tabellensatzes vorzubereiten, schadet es zunächst einmal nicht, wenn man sich die Eigenheiten einer Standardtabelle vor Augen führt. Charakteristisch für LaTeX sind die sogenannten Umgebungen (environments). Sie bewirken, daß der von ihnen eingeschlossene Text eine besondere Behandlung erfährt. Zur Darstellung von Tabellen wird ein »environment« verwendet, dessen grundsätzliche Syntax wie folgt aussieht:

\begin{tabular}{position}{spaltenaufbau}
Tabellenzeilen
\end{tabular}

Während das Argument »position« (b und t stehen zur Verfügung) optional ist, handelt es sich bei »spalten-aufbau« um ein Pflichtargument. Jede Spalte muß einen Eintrag haben. Spezielle Formatierangaben bestimmen das optische Aussehen der Tabelle. Mit , oder erreicht man, daß der Text in einer Spalte links, rechts oder zentriert erscheint. Äußerst komfortabel ist die Eigenheit von La-TeX, das längste Spaltenelement als Referenzgröße für die Breite der gesamten Tabelle zu verwenden. Gut geeignet für Texte ist die Option p{breite}, wobei die eben genannten Unterparameter durch Boxes mit einer festzulegenden Breite ersetzt werden. Unter Verwendung der im letzten Heft behandelten Boxbegriffe kann man auch sagen, die Spalte wird als \parbox[t]{br}{Spaltentext} ausgerichtet.

Formal nutzt man diese Möglichkeit, indem man päbreiteü schreibt und dabei für »breite« die Breite der Box in Längeneinheiten angibt. Ist der Text länger als die Spaltenbreite (z.B. 5cm) wird hier automatisch umgebrochen. Einen Nachteil hat diese Methode aber auch: nur die linksbündige Ausgabe ist möglich.

@{text} fügt den in Klammern stehenden Text zwischen benachbarte Spalten ein. Was auf den ersten Blick als nichts Besonderes erscheint, kann sich als äußerst nützlich erweisen. Zum Beispiel ist es auf diese Weise möglich, Dezimalzahlen nach dem Dezimaltrennzeichen auszurichten. Wie aus Bild 1 hervorgeht, setzt man den ganzzahligen Anteil rechtsbündig und die Nachkommastellen linksbündig zum Komma.

Einige Konstruktionen aus Bild 1 bedürfen einer weitergehenden Erläuterung, da sie wesentlich zur Effizienz des »tabular environment« beitragen. Wie geht man etwa vor, wenn eine horizontale Linie nicht die ganze Tabellenbreite abdecken soll? Die LateX-Anweisung, die solchen Anforderungen gerecht wird, heißt \cline{a-d}. Unmittelbar nach \ gesetzt, bewirkt sie, daß eine waagrechte Linie vom linken Rand der Spalte a bis zum rechten Rand der Spalte d gezogen wird.

Komplizierte Tabellen beinhalten oft auch Zellen, die über mehrere Spalten reichen. In den meisten DTP-Programmen kann man entsprechende Formatierungen - wenn überhaupt -nur mit Tricks und großem Zeitaufwand realisieren. In LaTeX ist des Rätsels Lösung vergleichsweise einfach und wird mit dem Befehl \mulitcolumn{n}{spaltenformat}{text} umgesetzt. Anstelle eines einfachen Spalteneintrags werden durch diese Anweisung die nächsten Spalten zu einer einzigen zusammengefaßt. Beachten Sie bitte, daß Leerzeilen vor und nach dem Makro dessen Ausführung verhindern.

Soweit die wesentlichen Elemente einer Standardtabelle. Richtig interessant wird es mit TeX bzw. LateX, wenn es Spezialprobleme zu lösen gilt. Zunächst soll uns die Frage beschäftigen, wie es mit geringem Satzaufwand möglich ist, Zellen einzeln zu formatieren. Ein solches Kommando, das den persönlichen Spielraum zusätzlich erweitert, ist gleichfalls in Bild 1 eingebaut. Die vertikale Zentrierung des Begriffs »Kontrollmaße« wurde durch das Einfügen einer unsichtbaren Linie zwischen den horizontalen Strichen und dem Spaltentext erreicht. Dies erledigt der Befehl

\raisebox{lift}[oberlänge][unterlänge]{text} 

mit äußerster Präzision. »Lift«, »Oberlänge« und »Unterlänge« sind Maßangaben. Eine negative Maßangabe für lift schiebt die entstehende \ mbox um den entsprechenden Betrag noch unten. Ein positiver Wert bewirkt das Gegenteil. Der benutzereigene Befehl

\newcommand{\ru}[1]{\raisebox{-1.3ex}[-1.3ex] {#1}}

sorgt für weiteren Komfort. Fortan rutscht jedes Element der Tabelle, das mit \ru versehen ist (\ru{Element}), um den angegebenen Betrag nach unten. Für Schreibfaule noch ein Tip: Stellvertretend für die etwas lang geratene Anweisung

\begin{tabular}{lp{2.5cm}|r@{,}||r@{,}||r@{,}||r@{,}||r@{,}||} 

hätte man sich auch den Wiederholungsfaktor zunutze machen können. Der Befehl ,*{5}{|r@{,}|}|}/ führt intern zu demselben Ergebnis.

Die Möglichkeiten von LaTeX sind damit aber noch längst nicht ausgereizt. Insbesondere was die Lesbarkeit einer Tabelle anbelangt, läßt sich noch einiges bewegen. Man muß dazu lediglich diverse Standardwerte an die persönlichen Belange anpassen. Beginnen wir mit dem Zeilenabstand. Er läßt sich mit Hilfe von \arraystretch variabel einstellen. Wollen Sie den Zeilenabstand ändern, dann schreiben Sie in die Präambel oder unmittelbar vor die Tabelle die Anweisung

\renewcommand{\arraystretch}{faktor}.

Der Standardwert des Faktors ist 1, eine Änderung auf 1.3 vergrößert die Zeilenabstände auf das 1.3-fache (vgl. Bild 1). In ähnlicher Weise läßt sich die Breite des Spaltenzwischenraums einstellen. Das erforderliche Kommando heißt Uabcolsep. Uabcolseplcm setzt also vor und nach jeder Spalte 1cm Zwischenraum ein, so daß ein Spaltenzwischenraum von insgesamt 2 cm entsteht. Optisch wirksam wird dieser Befehl vor allem dann, wenn eine Tabelle vergleichsweise wenige Spalten umfaßt.

Bild 2 enthält weitere Befehle dieser Art. Bemerkenswert sind die Anweisungen \arrayrulewidth0.2mm und \doublerulesep2mm. Während \arrayrulewidth die Dicke der horizontalen und vertikalen Linien bestimmt, ist \doublerulesep2mm für den Abstand der Doppellinien zuständig. Das »center environment« bewirkt eine zentrierte Ausgabe der gesamten Tabelle. Ansonsten fällt in Bild 2 auf, daß hauptsächlich \multicolumn-Befehle für die innere Struktur der Tabelle verantwortlich sind. Eine Lösung im Rahmen zweier Teil-Tabellen wäre hier ebenfalls erfolgversprechend, hätte aber zahlreiche Feinabstimmungen mittels \parbox notwendig gemacht.

Bild 1. Ausrichtung von Dezimalzahlen am Trennzeichen
Bild 2. Parameter zur Änderung des Tabellenstils
Bild 3. Grafische Einlagen

Warum nicht die gestalterischen Möglichkeiten des Tabellensatzes einmal ausnutzen? Eine Möglichkeit, das Layout zu optimieren, besteht in der Integration grafischer Elemente. Sollen z.B. Rahmenstrukturen eine Tabelle verschönern, liegt es nahe, sich der hinlänglich bekannten Box-Manöver zu bedienen. Bild 3 gibt einige Anregungen dazu.

Das ramen-Kommando [1] verdient eine nähere Betrachtung, zumal es der sichtbare Beweis dafür ist, daß in LaTeX immer noch alle Möglichkeiten von TeX erhalten bleiben, \hrule und \vrule sorgen in diesem Makro für die äußere Begrenzung. Die horizontale Dimensionierung wird durch \hskip, die vertikale Dimensionierung durch \vskip bewerkstelligt. Wichtig ist, daß das Platzhaltersymbol #1 den Abstand der Umrahmungslinie beeinflußt. #2 steht für die zu umrahmende Information.

Kästchen aller Art lassen sich auch leicht mit typischen LateX-Befehlen erzeugen. In Bild 3 kamen F- und Par-Boxen zum Einsatz. Die leeren Rechtecke entstehen durch den Eintrag zweier Leerzeichen. Der Abstand der Umrandung zu diesem Pseudotext wurde mit \fboxsep2mm festgelegt. Zielführend wäre auch die nachstehende Befehlsfolge gewesen:

\newsavebox{\bx}\sbox{\bx}{\framebox[7mm]
{\rule|0mm}{4mm}}}\sbox{\bx}{\usebox{\bx}\quad\usebox{\bx}}

Erläuternd ist dazu lediglich anzumerken, daß der Befehl \newsavebox einen Namen (\bx) an die mit \sbox konstruierte Box vergibt. Mit \usebox{boxname} lassen sich die entstandenen Kästchen beliebig oft im Dokument plazieren.

Abschließend noch eine Anmerkung zu einem weniger erfreulichen Aspekt des Tabellensatzes in TeX. Strukturbedingt stellt eine mit tabular erzeugte Tabelle eine vertikale Box dar. Das ist auch der Grund dafür, daß innerhalb einer tabular-Umgebung kein Seitenumbruch erfolgt. Wer es dennoch probiert, wird mit der Meldung »Overfull vbox« konfrontiert und der formatierte Text ragt über den unteren Seitenrand hinaus. Ein möglicher Ausweg aus diesem Dilemma besteht in der manuellen Aufspaltung des Tabellentextes auf mehrere tabular-Umgebungen. Sofern bei Tabellen, die sich über mehrere Seiten erstrecken, die Kopfleiste auf jeder Seite erscheinen soll, müßte man zumindest dafür eine eigene Tabelle konstruieren.

Der fast schon verblüffenden Hartnäckigkeit vieler TeX-Fans ist es zu verdanken, daß seit einiger Zeit ein findiges Makro existiert, das solche Aufgaben automatisch erledigt. Die sogenannte supertabular-Umgebung definiert Kopf und Fuß der Tabelle getrennt von den eigentlichen Tabelleninhalten. Damit ist es möglich, bei einem anfallenden Seitenumbruch die Tabelle auf der vollen Seite mit dem Tabellenfuß abzuschließen und auf der neuen Seite mit dem Tabellenkopf zu beginnen. Interessenten können diese äußerst sinnvolle Erweiterung zum Beispiel über »Dante« [2] beziehen.

Das war's für heute. In der nächsten Folge erfahren Sie, wie in TeX mathematische Formeln repräsentiert sind, wie Sie vorhandene Definitionen modifizieren und wie Sie sich viel Arbeit sparen, indem Sie die bereitgestellten Strukturen sinnvoll einsetzen. (wk)

[1] N. Schwarz. Einführung in TeX, 2. überarbeitete Auflage, Bonn, Addison-Wesley, 1988.

[2] DANTE, Deutschsprachige Anwendervereinigung TeX e.V., Rechenzentrum der Universität Heidelberg, Im Neuenheimer Feld 293. 6900 Heidelberg 1

Bezugsquelle für TeX, LaTeX etc.: KonTRAST, Matthias Neumann, Zwickauerstr. 4, 5400 Koblenz


Klaus Konrad
Aus: TOS 09 / 1992, Seite 86

Links

Copyright-Bestimmungen: siehe Über diese Seite