Kategorie-Aktualisierung


Ich habe eben die Kategorie »MI1-Tutorium« allgemeiner »MI-Tutorium« umbenannt. Wer also explizit nur die Beiträge aus dieser Kategorie abonniert hat, möge bitte seinen Newsfeed-Reader aktualisieren.

Professionelle Tabellen mit LaTeX


Tabellen anlegen ist mühselig weil relativ stumpf. Insbesondere sind longtable-Umgebungen mit einheitlichem Aussehen größtenteils copy'n'paste. Um mir diese Arbeit zu erleichtern, habe ich (nicht ganz ohne Hilfe) eine kleine Umgebung geschrieben:

% Benötigte Pakete
\usepackage[table]{xcolor}
\usepackage{longtable,calc,array}

% Vorgeplenkel: "LaTeX-Kernel"-Modus betreten (es werden interne Makros benötigt)
\makeatletter
% Grundfarbe definieren
\definecolor{tabcolor}{RGB}{255,0,0}
% alternierende Hintergrundfarben; ab der zweiten Zeile ein zartes rosa verwenden 
\rowcolors{1}{tabcolor!5}{}
% Zeilenhöhe um 50% vergrößern
\renewcommand\arraystretch{1.5}

% Eigentliche Definition. Es werden vier Parameter erwartet:
% 1. Spaltendefinition
% 2. Kopfzeile
% 3. Tabellenbeschriftung
% 4. (eindeutiger) Referenzschlüssel/Label
\newenvironment{tabelle}[4]{
    % temp-Variable definieren
    \let\xyz@tempa\@empty%
    % ersten Parameter durchgehen
    \@for\xyz@tempb:=#1\do{%
        % Spaltendefinition der longtable erzeugen
        % die Spaltenbreiten ergeben sich aus der anteiligen Textbreite
        % anzüglich 2 mal der Breite der Tabellenzellenbegrenzung
        % (einmal links, einmal rechts)
        \edef\xyz@tempa{\xyz@tempa p{\xyz@tempb\linewidth-2tabcolsep}}%
    }
    % longtable-Definition vorbereiten...
    \edef\xyz@tempa{\noexpand\begin{longtable}{\xyz@tempa}}
    % ... und ausführen
    \xyz@tempa
    % Kopfzeile; wird auf jeder Seite wiederholt und hat 15& Hintergrundfarbe
        \rowcolor{tabcolor!15} #2 \\
    \endhead
    % Fusszeile vor Seitenumbruch; angegebener Text + Hinweis, dass die
    % Tabelle fortgesetzt wird
        \caption[]{#3\\(wird fortgesetzt)}
    \endfoot
    % letzte Fusszeile ohne diesen Hinweis. Dafür mit referenzierbarem Label
    % und Eintrag ins Tabellenverzeichnis (sofern vorhanden)
        \caption{#3 \label{#4}}
    \endlastfoot
}{
    \end{longtable}%
}
% internen LaTeX-Modus wieder verlassen
\makeatother

Erläuterung der Parameter:

  1. Spaltendefinition. Erwartet wird eine Komma-separierte Liste mit Dezimalwerten, die der prozentualen Textbreite entsprechen. Beispiel: {.5,.25,.25} würde eine Tabelle mit drei Spalten erzeugen, die erste 50%, die anderen beiden 25% der verfügbaren Textbreite breit. Unsinnige Angaben wie {1,3} werden nicht verhindert, veranlassen LaTeX aber dazu Warnungen auszugeben. Anmerkung: Alle Spalten sind vom Typ p - und damit links ausgerichtet.
  2. Kopfzeile. Hier wird erwartet, dass zu maximal jeder definierten Spalte ein Kopfzeileninhalt angegeben wird. Tabellen-typisch ist die Trennung der Spalten mit &. Für das obige Spaltendefinitionsbeispiel wäre {a&&b} möglich; hier bekäme die 50% breite Spalte die Kopfzeilentext a, die dritte Spalte b.
  3. Tabellenbeschriftung. Der Text, der unter der Tabelle angezeigt wird. Entspricht dem normalen \caption.
  4. Referenzschlüssel. Eindeutiger Bezeichner der Tabelle; entspricht einem \label.

Der Einsatz ist mit diesem Wissen denkbar einfach:

\begin{tabelle}{.5,.5}{Kopf links & Kopf rechts}{Eine Tabellenunterschrift}{tab:example}
    Zelle 1.1 & Zelle 1.2 \\
    Zelle 2.1 & Zelle 2.2 \\
    ...       & ...       \\
    Zelle n.1 & Zelle n.2 \\
\end{tabelle}

Verbesserungsmöglichkeiten:

  • Parameter 4 (und vllt. auch 3) könnte man optional machen.
  • Derzeit sind einzig p-Spalten möglich
  • Die Farbe ist auch relativ statisch

Dass man in Tabelle keine Linien verwenden sollte, braucht hoffentlich nicht weiter erwähnt werden…

Viel Spaß beim Tabellen setzen ;-)
Dominik

(Nachbearbeitung 02.04.09, 19:13 - Blogsoftware hat einige (okay, alle) \ verschluckt…)