Projekt

Allgemein

Profil

Aktionen

Tabellen » Historie » Revision 25

« Zurück | Revision 25/29 (Vergleich) | Weiter »
Marcus Hottenroth, 02.01.2024 12:41


Tabellen

Für Tabellen wird nicht tabularx oder ein anderes von TeX bekanntes Tabellenpaket verwendet, sondern das von Patrick Schulz entwickelte htmltabs.

Paket einbinden

Die Einbindung kann über die Angabe

\usepackage{htmltabs}

im Dokument, das das Tabellenpaket verwenden soll, erfolgen. Aus Gründen der Übersicht und Sauberkeit des Codes ist es jedoch besser, diese Integration über ein projektspezifisches Stylefile zu realiseren.

Auszeichnung von Tabellen für den htmltabs-Renderer

XHTML-zu-LaTeX-Mapping

Das TeX-Markup von htmltabs entspricht der HTML-Tabellenstruktur:

XML LaTeX Anmerkungen
<table>…</table> \begin{htmltab}[…] … \end{htmltab}
<col /> \HTcol[…] vor thead
<colgroup> … </colgroup> \HTcolgroup[…]{…} vor thead
<thead> … </thead> \begin{thead}[…] … \end{thead} vor tbody
<tfoot> … </tfoot> \begin{tfoot}[…] … \end{tfoot} vor tbody, nach thead
<tbody> … </tbody> \begin{tbody}[…] … \end{tbody}
<tr> … </tr> \HTtr[…]{…}
<td> … </td> \HTtd[…]{…}
<th> … </th> \HTth[…]{…}

Wichtig ist, dass das Raster eingehalten wird: Bei x Spalten und y Zeilen müssen (unter Berücksichtigung von colspan und rowspan) x × y Zellen existieren.

Verfügbare Attribute und CSS-Eigenschaften

Im optionalen Argument (wenn keine vorhanden, dann weglassen) aller Elemente können folgende Attribute stehen:
  • style={} beinhaltet CSS-Eigenschaft-Wert-Paare>; die Syntax innerhalb der geschweiften Klammer entspricht der im XML, z. B.
\HTtd[style={<CSS-Eigenschaft-1>:<CSS-Wert-1>; <CSS-Eigenschaft-2>: <CSS-Wert-2>; … }]{<Inhalt>}

Die im HTML vorhandenen CSS-Eigenschaften können direkt nach TeX übertragen werden. Gleiches gilt für die Umgebungen:

\begin{htmltab}[style={<CSS-Eigenschaft-1>:<CSS-Wert-1>; <CSS-Eigenschaft-2>: <CSS-Wert-2>; … }]
  …

Bisher implementierte CSS-Eigenschaften

  • margin, padding, border: jeweils mit und ohne -top, -left, -right, -bottom; Längenangabe; ohne Verwendung eines Suffixes gelten die Werte für alle Seiten des Elements; Wertsyntax:
    • (margin|padding|border): style
    • (margin|padding|border): width style
    • (margin|padding|border): width style color.
  • border-style: solid, dashed, dotted, none, double (ab v0.1.26)
  • border-color: TeX-Farbname (ist zuvor mittels \definecolor{<name>}{<farbraum>}{<deklaration>} zu definieren) oder Hexadezimalangabe \#rrggbb
  • border-width: Längenangabe; ohne Richtungssuffix gilt folgende Syntax:
    • border-width: <length>: Randliniendicke gilt für alle Seiten des Elements
    • border-width: <length-1> <length-2>: Randliniendicke <length-1> gilt für oben und unten, Dicke <length-2> für links und rechts
    • border-width: <length-1> <length-2> <length-3>: Randliniendicke <length-1> gilt für oben, Dicke <length-2> für links und rechts sowie <length-3> für unten
    • border-width: <length-1> <length-2> <length-3> <length-4>: Randliniendicken 1–4 gelten je für oben, rechts, unten und links
  • border-collapse: none, collapse
  • vertical-align: top, middle, bottom
  • background-color: Hintergrundfarbe; TeX-Farbname oder Hexadezimalangabe \#rrggbb
  • color: Schriftfarbe; TeX-Farbname oder Hexadezimalangabe \#rrggbb
  • font-size: Schriftgröße; xx-small, x-small, small, normal, large, x-large, xx-large
  • font-weight: Schriftgewicht; bold, normal
  • font-family: Angabe einer generischen Schriftfamilie (CSS); sans-serif, serif, monospace
  • font-style: Schriftstil; normal, italic
  • font-variant: Schriftstil II; normal, small-caps
  • text-align: right, center, left, justified
  • hyphen: none (keine Silbentrennung), auto (TeX-Silbentrennung)
  • transform: @rotate(Xdeg) wobei X eine positive oder negative ganze Zahl im Gradmaß sein muss; für eine Vierteldrehung im Uhrzeigersinn: transform: rotate(90deg), -90deg erzeugt eine Vierteldrehung gegen den Uhrzeigersinn (äquivalent zu 270deg)
  • class=<name> entspricht dem class-Attribut bei HTML.
  • \HTcol kann ein width-Attribut mit der vorgegebenen Spaltenbreite erhalten, z. B.
    \col[width=20mm,style={text-align: center}]
    \col[width=0.2,style={text-align:justified,hyphen=auto}]

    Mit obigem Codebeispiel würde die erste Spalte eine fixe Breite von 20 mm bekommen und der Inhalt zentriert ausgerichtet werden; die zweite Spalte bekäme eine relative Breite von 20 % der Gesamtbreite der Tabelle mit Inhalt im Blocksatz und automatischer Silbentrennung. Zulässige Werte für Spaltenbreiten sind:
    • Längenangaben (bspw. 10mm, 12pt etc.) für Spalten fixer Breite,
    • Dezimalbrüche im Intervall (0, 1] für Breiten relativ zur Gesamtbreite der Tabelle (0.5 entspricht der halben Gesamtbreite, 0.2 einem Fünftel der Gesamtbreite etc.)
    • Ganzzahlen größer als 1 für Anteil der Breite an der Gesamtsumme der Teile; bspw. bedeuten drei Spalten mit respektive width=20, width=10 und width=30, dass die erste ein Drittel der Gesamtbreite einnimmt (20/60), die zweite ein sechstel (10/60) und die dritte den verbleibenden Raum von 50 % (30/60)
    • Prozentangaben (bei TeX-Input müssen die Prozentzeichen escapet werden: \%)
  • die Umgebung htmltab kann das Attribut width besitzen, was dann die Gesamtbreite der Tabelle festlegt; fehlt diese Angabe, wird die Tabelle in ihrer natürlichen Breite gesetzt, höchstens aber Satzspiegelbreite (genauer: \linewidth).
  • \HTtd und \HTth können überdies rowspan- und colspan-Attribute enthalten, die eine ganze Zahl als Wert bekommen, z. B.
    \HTtd[rowspan=2,colspan=2,style={vertical-align: middle; text-align: center}]{<content>}

    Diese Zelle würde über zwei Spalten und zwei Zeilen gestreckt; ihr Inhalt wird vertikal und horizontal zentriert.

Beispiel:

\begin{htmltab}[class=box]
  \begin{thead}
    \HTtr[style={text-align: center}]{%
       \HTtd[style={text-align: center; vertical-align: bottom}]{<Inhalt Kopf Spalte 1>}
       \HTtd{<Inhalt Kopf Spalte 2>}
       \HTtd{<Inhalt Kopf Spalte 3>}
    }
  \end{thead}
  \begin{tfoot}
    \HTtr[colspan=3]{%
       \HTtd{<Inhalt Fuss Spalten 1–3>}
    }
  \end{tfoot}
  \begin{tbody}
    \HTtr{%
       \HTtd[rowspan=2]{<Inhalt Zeile 1-2 Spalte 1>}
       \HTtd{<Inhalt Zeile 1 Spalte 2>}
       \HTtd{<Inhalt Zeile 1 Spalte 3>}
    }
    \HTtr{%
       \HTtd{<Inhalt Zeile 2 Spalte 2>}
       \HTtd{<Inhalt Zeile 2 Spalte 3>}
    }
    \HTtr{%
       \HTtd{<Inhalt Zeile 3 Spalte 1>}
       \HTtd{<Inhalt Zeile 3 Spalte 2>}
       \HTtd{<Inhalt Zeile 3 Spalte 3>}
    }
  \end{tbody}
\end{htmltab}

Überschreibbare Eigenschaften und baretabular-Klasse

  • Bestimmte CSS-Eigenschaften werden standardmäßig nicht ins tex übernommen, da diese u.U. Verlagsvorgaben für Tabellenlayouts überschreiben könnten:
    • width an allen Elementen, die nicht <col>, <colgroup>, oder <table> sind
    • Weitere, je nach Absprache mit den Verlagen (z.B. background-color in <thead>, padding-* an td, etc.)
  • Die baretabular-Klasse ist ein globaler Spezialfall: Hat <table> diese Klasse, werden alle CSS-Eigenschaften 1:1 an TeX durchgereicht.

Caption, Source, Legende und Gleit-Fähigkeit

htmltabs alleine entspricht den tabular-Umgebungen in Standard-LaTeX.

Die Auszeichnung von Caption, Zähler, Quelle und Legende entspricht tpFigure:

\begin{tpTable}[<Floatpos>]
  \tpCaption{<Caption>}
  \tpSource{<Quelle>}
  \tpLegend{<Legende>}
  \tpNumber{<Zähler>}
  \begin{htmltab}
    …
  \end{htmltab}
\end{tpTable}

  • <Floatpos> ist die Gleitposition (t,p,h,b; vgl. tpFigure); fehlt das optionale Argument, wird die Tabelle nicht-gleitend und dort platziert, wo sie im Quelltext steht.
  • Bitte beachten, dass die Tabelle nur umbrechen kann, wenn sie nicht gleitet., d.h. wenn die tpTable-Umgebung komplett fehlt; oder wenn tpTable da ist, aber kein optionales Argument hat.

Gedrehte Tabellen

Auszeichnung in Word

Damit eine Tabelle um 90 Grad gedreht wird, muss entweder in Word die Textrichtung der ersten Zelle gedreht werden oder vor der Tabelle ein leerer Absatz mit dem Absatzformat table_rotated stehen.

Auszeichnung in LaTeX

Im TeX wird das ganze mit dem Attribut orientation="landscape" im optionalen Argument der Gleitungebung gekennzeichnet, z.B.

\begin{tpTable*}[orientation="landscape"]
…
\end{tpTable*}
Die Angabe von float-pos wird dabei immer mit "p" überschrieben, demnach kann (und sollte) das Attribut bei gedrehten Tabellen entfallen. Dasselbe funktioniert genau so auch mit Bildern.

Tabellen auf mehrere Seiten umbrechen

Um Tabellen auf mehrere Seiten (mit sich wiederholendem Tabellenkopf) zu umbrechen, muss der Tabelle ein leerer Absatz mit dem Absatzformat table_pagewrap vorangestellt werden.

Von Marcus Hottenroth vor 11 Monaten aktualisiert · 25 Revisionen