tabularx - Basics

Tabellen und Grafiken erstellen und anordnen


MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

tabularx - Basics

Beitrag von MoonKid »

Vorweg möchte ich zur Verteidigung sagen, dass die Docu zu tabularx wenig hilfreich ist. Neben meiner eigentlichen Frage, würde mich interessieren, wie und wo ich die Antworten auf meine eigentlich sehr simplen Fragen hätte finden können? Wie hätte ich vorgehen müssen? Mir fehlt hier sicherlich auch wieder mal das passende Englisch.

btw: Ich habe jetzt tabu in die Tonne gekloppt, weil es ja nicht mehr weiterentwickelt wird. Versuche mich jetzt mit tabularx anzufreunden.

Vorweg ein MWE:
\documentclass{standalone}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{tabularx}

\begin{document}
\begin{tabularx}{\columnwidth}{|l|X|r|}
    \textbf{col1} & \textbf{col2} & \textbf{col3} \\\hline
    eins & 2.00 & 7.819 \\
    zwei & 1.0 & 95.123 \\
    drei & 8 & 5.1 \\
\end{tabularx}
\end{document}
  1. Gibt es so etwas wie \rowfont (aus tabu)? Ich möchte Sonderbehandlungen bezüglich des Alignment für einige Zeilen haben. z.B. möchte ich, das alle Columns der Kopfzeile zentriert sind. Die Frage bezieht sich aber auf jede denkbare Zeile, nicht nur die Kopfzeile. Ebenso betrifft es auch Font, Color und jede Art von Formatierung.
  2. Wie richtet man den Inhalt einer Spalte auf den Dezimalpunkt und gleichzeitig möglichst rechts aus?
  3. Wie verändere ich die Breite der Spalten relativ zu den anderen? Also keine festen Werte (z.B. in cm), sondern als Anteile, so wie bei tabu. z.B. 1-0.5-3
Noch ne Nebenfrage: In vielen Beispielen (auch bei anderen tab-Umgebungen) sehe ich in der Spaltendefinition öfters "merkwürdige" Symbole (<, >, @, ...), deren Sinn sich mir nicht erschließt. Auch die Doku schweigt sich oft dazu aus, oder drückt sich so tex-ig aus, dass ich es nicht verstehe. Evtl. handelt es sich dabei um tex-Basics, die primär nix mit einer Tabelle zu tun haben? Es ist aber auch schwer solche Einzelsymbole per Suchmaschine ordentlich zu suchen.

EDIT:
Kleine Erweiterungsfrage: Wie auto-wrappe ich Zelleninhalt, ohne die Breite der Spalte fix angeben zu müssen, sondern ggf. nur relativ?
...
\usepackage[lipsum]
...
\begin{tabularx}{\columnwidth}{|l|X|r|}
   \lipsum&&\tabularnewline
\end{tabularx}
...
Ich kenne makecell, das meinem Verständnis nach, aber automatische Zeilenumbrüche nur mit fester Breite macht.
XeLaTeX, TeX Live, vim-latexsuite

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: tabularx - Basics

Beitrag von Bartman »

MoonKid hat geschrieben:Noch ne Nebenfrage: In vielen Beispielen (auch bei anderen tab-Umgebungen) sehe ich in der Spaltendefinition öfters "merkwürdige" Symbole (<, >, @, ...), deren Sinn sich mir nicht erschließt. Auch die Doku schweigt sich oft dazu aus, oder drückt sich so tex-ig aus, dass ich es nicht verstehe. Evtl. handelt es sich dabei um tex-Basics, die primär nix mit einer Tabelle zu tun haben? Es ist aber auch schwer solche Einzelsymbole per Suchmaschine ordentlich zu suchen.
Diese Symbole werden in der Dokumentation des Pakets [d]array[/d] behandelt, welches von tabularx geladen wird.

Ich erfuhr bereits in meiner LaTeX-Einführung (Schleichwerbung :-)) von diesen Symbolen.

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Erster, aber noch nicht vollständiger, Lösungsansatz basierend auf [d]array[/d] und Table layout with tabularx (column widths: 50%|25%|25%):
\documentclass{standalone}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{tabularx}
\usepackage{lipsum}

\begin{document}
\newcolumntype{B}{>{\hsize=0.5\hsize\hspace{0pt}}X}
\newcolumntype{S}{>{\hsize=0.25\hsize}X}
% Das funktiniert nicht.
\newcolumntype{D}{>{\centerdots}c<{\endcenterdots}}
\noindent
\begin{tabularx}{\columnwidth}{|B|S|D|}
    \textbf{col1} & \textbf{col2} & \textbf{col3} \\\hline
    eins & 2.00 & 7.819 \\
    zwei & 1.0 & 95.123 \\
    drei & 8 & 5.1 \\
    \lipsum[1] &&\\
\end{tabularx}
\end{document}
  • Die Konstruktion mit hsize ermöglicht (nach meinem Verständnis) relative Spaltenbreiten. In der Gesamtsumme, sollten die Spalten immer 1.0 breit sein.
  • Das \hspace{0pt} ist sozusagen ein Ersatz für das erste Wort in diesem Absatz. Das erste Wort eines Absatzes wird per default nie umgebrochen.
  • Spalte drei funktioniert nicht. Den columntype D habe ich so aus der array-Doku kopiert, aber führt zu folgenden Fehlern.
! Undefined control sequence.
<template> ...@sep \hfil \d@llarbegin \centerdots 
                                                  \ignorespaces 
l.18 \end{tabularx}
                   
! Undefined control sequence.
<template> \unskip \endcenterdots 
                                  \relax \d@llarend \hfil \hskip \col@sep \v...
l.18 \end{tabularx}
                   
! Undefined control sequence.
<template> ...@sep \hfil \d@llarbegin \centerdots 
                                                  \ignorespaces 
l.18 \end{tabularx}
...
SNIP
Bezüglich der merkwürdigen Symbole ist vermutlich die Sektion The insertion of declarations (>, <, !, @) der [d]array[/d]-Doku relevant. Das ist aber nur eine technische Doku und weit weg von Use-cases oder dem Denken eines Users. Wenn man nicht begreift, wie der TeX-Kern arbeitet, begreift man auch nicht diese Sektion. Ich jedenfalls verstehe nicht, was mir der Autor damit sagen will.
Und bevor ich wieder ausgeschimpft werde, das ich über die Doku schimpfe: Zwei sehr prominente und hervorragende Beispiele für Doku, welche als Referenz, Technik-Doku und omataugliche User-Doku dienlich ist wäre [d]scrguide[/d] und [d]tikz[/d].
XeLaTeX, TeX Live, vim-latexsuite

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

S solltest du nicht als Spaltentyp definieren, den Buchstaben benutzt schon siunitx -- das ich für das Ausrichten am Dezimalpunkt verwenden wird.

standalone würde ich für solche Tests auch nicht verwenden -- ich versuche jetzt nicht rauszufinden, wie groß damit \hsize wohl ist.
\documentclass{article}
\usepackage{tabularx}
\usepackage{siunitx}
\begin{document}
\newcolumntype{B}{X}

\noindent
\begin{tabularx}{\columnwidth}{|B|S|S|}
    \textbf{col1} & \textbf{col2} & \textbf{col3} \\\hline
    eins & 2.00 & 7.819 \\
    zwei & 1.0 & 95.123 \\
    drei & 8 & 5.1 \\
\end{tabularx}
\end{document} 
Grundsätzlich: tabu ist sicherlich deutlich mächtiger als alles andere. Also versuche gar nicht erst all seine Eigenschaften nachzubilden. (Vieles davon braucht man auch gar nicht. Eine auf \columnwidth gestreckte Tabelle sieht meist mies aus. Ich verwende tabularx z.B. eher selten.)

[/code]

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

u_fischer hat geschrieben:S solltest du nicht als Spaltentyp definieren, den Buchstaben benutzt schon siunitx -- das ich für das Ausrichten am Dezimalpunkt verwenden wird.
...
Eine auf \columnwidth gestreckte Tabelle sieht meist mies aus. Ich verwende tabularx z.B. eher selten.)
Welche Tabellen-Umgebung nutzt du den - als Alternative zu tabu?

Wo ist der Unterschied zu \textwidth und /columnwidth? IMO ist das beides gleich, wenn man keinen mehrspaltigen Satz verwendet. Ich setze meist auf column, weil ich evtl. eine Tabelle auch mal in eine Spalte setzen möchte.

Zu siunitx: Viel mir auch gerade ins Auge. Frage mich aber, wie ich relative Spaltenbreiten mit S kombinieren kann?
\documentclass{article}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}
\usepackage{showframe}

\usepackage{tabularx}
\usepackage{siunitx}

\begin{document}
\newcolumntype{B}{>{\hsize=0.4\hsize\hspace{0pt}}X}
\newcolumntype{K}{>{\hsize=0.3\hsize}S}
\noindent\begin{tabularx}{\columnwidth}{|B|K|K|}
    eins & 2.00 & 7.819 \\
    zwei & 1.0 & 95.123 \\
    drei & 8 & 5.1 \\
\end{tabularx}
\end{document}
Ich kann hier meine eigene Spalte K nicht mit S kombinieren.
! Missing number, treated as zero.
<to be read again> 
                   }
l.17 \end{tabularx}
                   
! Illegal unit of measure (pt inserted).
<to be read again> 
                   }
l.17 \end{tabularx}
                   
! Missing number, treated as zero.
<to be read again> 
                   \tex_let:D 
l.17 \end{tabularx}
...
SNIP
XeLaTeX, TeX Live, vim-latexsuite

Gast

Beitrag von Gast »

Wenn du die Verwendung von \centerdots aus der [d]array[/d]-Anleitung kopierst, solltest du natürlich auch die Definition von \centerdots aus eben dieser Anleitung kopieren …

Für einfachere Tabellenaufgaben sie auf tabsatz.pdf verwiesen (siehe Wichtige Netzdokumente). Für ausführlichere Informationen zum Tabellensatz auf Tabellen mit LaTeX.

tabularx ist für mich nur sinnvoll, wenn man (min.) eine Spalte hat, die mehrzeiligen Text ausnehmen muss. Hat man keine solche Spalte, ist es für mich sinnvoller, eine normale tabular mit l-, c-, r- und S-Spalten (letzteres mit siunitx wie von Ulrike gezeigt, wobei man bei Bedarf auch die Spaltenbreite per Option angeben kann) zu verwenden. Tabellen mit grundlos gestreckten Spalten sehen dagegen meist hässlich aus und sind wegen des überflüssigen Leerraums schlechter zu lesen. Will man in Ausnahmefällen dann doch strecken, genügt tabular* (sollte in jeder ausführlichen LaTeX-Einführung erklärt sein).

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Anonymous hat geschrieben:tabularx ist für mich nur sinnvoll, wenn...
Vielen Dank dafür! Genau solche Entscheidungshilfen fehlten mir bisher immer, bei der Frage welche Tabellen-Umgebung ich jetzt nehmen oder kombinieren sollte.

tabsatz kommt sofort in mein Archiv . War mir tatsächlich neu.

Achtung ich schweife jetzt ab...
Den Wink mit der LaTeX-Einführung hab ich schon verstanden. Tatsächlich habe ich bisher nur eine wirklich von Vorne bis Hinten gelesen. Die war aber im Detail bereits veraltet.
Problem bei diesen "Einführungen" (incl. Büchern) ist immer die Zielgruppe. Entweder sind sie für totale TeX-Neulinge gedacht, oder für TeX-Profis.
Was ich bisher noch nicht gefunden habe, ist etwas, was einen WYSIWYG-User da abholt wo er steht.

Biser war [d]scrguide[/d] bisher am hilfreichsten bezüglich des tieferen Verständnisses von *TeX und seiner Konzepte. Auch die Doku ist durchaus Win-DAU-tauglich.

Meine (tatsächlich vorhandene) IT-Kentnisse und mein Grundverständnis diverser TeX-Konzeptes ist im Alltag nicht hilfreich, weil mir da der Transfer-Schritt fehlt. Mein Wissen über TeX-Konzepte kann ich im Alltag meist nicht anwenden, weil ich nicht drauf komme. Über die krückenhafte Lösung mit \hspace{0pt} am Absatzanfang, um Tabellentext umbrechen zu lassen, bin ich schon zich mal gestolpert - komme aber jedes Mal nicht darauf und muss erst wieder suchen.

*TeX is mächtig, sinnvoll und logisch. Die Useability muss nicht Win-DAU-tauglich sein, aber es gibt insbesondere bei der Doku immer viel Potential. IMO liese sich sowas durch Qualitäts-Richtlinien oder Empfehlungen seitens CTAN ein bisschen beeinflussen.
XeLaTeX, TeX Live, vim-latexsuite

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

MoonKid hat geschrieben:*TeX is mächtig, sinnvoll und logisch. Die Useability muss nicht Win-DAU-tauglich sein, aber es gibt insbesondere bei der Doku immer viel Potential. IMO liese sich sowas durch Qualitäts-Richtlinien oder Empfehlungen seitens CTAN ein bisschen beeinflussen.

Mehr als zweitausend Menschen haben in den letzten Jahrzehnten dazu beigetragen, dass du TeX Live inklusive Paketdokus kostenlos nutzen kannst. CTAN ist davon unabhängig, MikTeX auch. Helfer hier im Forum und in anderen Foren haben Bücher geschrieben, andere Hilfen. Ein paar haben ein Wikibook zusammeneschustert.

Und da willst du Qualitätsstandards implementieren, die Autoren die Zeit raubt?

Du kannst nicht immer vom Urschleim anfangen, oder zu jedem Paket drei Anleitungen schreiben (und ja, es gibt Pakete mit Anleitungen für Anfänger und Experten), ab und ann muss man auch Wissen vorraussetzen. Und die Grundlage kann und darf nicht das Starten des Computers sein.

Helfer können sich das auch nicht alles merken, deswegen ist der Blick in die Doku immer und immer und immer wieder notwendig. Selbst Paketautoren müssen die Anleitungen ihrer eigenen Pakete lesen.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Auch ein

Beitrag von Auch ein »

Johannes_B hat geschrieben:Selbst Paketautoren müssen die Anleitungen ihrer eigenen Pakete lesen.
Stimmt. Teilweise sogar immer wieder dieselben Stellen, weshalb eine Version meiner Anleitung mal am Rand mit mehreren Dutzend Fähnchen in vier verschiedenen Farben versehen war. Die auf die nächste Version der Anleitung zu übertragen war mir dann zu aufwändig, so dass ich noch einige Zeit immer wieder zur veralteten Fassung gegriffen habe.

Fähnchen? Ja, genau, ich arbeite noch immer mit Papier – nicht ausschließlich, aber intensiv.

Man sollte übrigens nicht davon ausgehen, dass Paketanleitungen und LaTeX-Einführungen auch zwangsläufig erklären, was typografisch sinnvoll ist. Das kommt vor (beispielsweise bei [d]booktabs[/d] bzw. [d]booktabs-de[/d]). Es ist aber nicht selbstverständlich. Wer also wissen will, was typografisch sinnvoll ist, sollte sich mit typografischer Literatur eindecken. Ich erwarte ja auch von der Anleitung zu Excel keine Erklärung, was unter der Standardabweichung zu verstehen ist und wie man statistische Extrema zu bewerten hat.

Und ja, zu einigen Paketen gibt es in der Tat auch Anleitungen auf Deutsch. Die sind nicht in jedem Fall absolut aktuell, aber für einen Überblick über die Funktion des jeweiligen Pakets durchaus geeignet. Eine halbwegs aktuelle, deutschsprachige LaTeX-Einführung können diese Anleitungen aber natürlich nicht ersetzen – auch nicht die erwähnte KOMA-Script-Anleitung, die übrigens immer wieder dafür gescholten wird, dass sie zu weitschweifig sei und zu sehr erkläre, was man tun und lassen soll, statt sich darauf zu beschränken, wie man das, was man machen will, machen kann.

Und mal ganz am Rande erwähnt: Als ich LaTeX gelernt habe, gab es dazu gerade mal ein Buch auf Deutsch, das didaktisch nicht gerade der Bringer war und stilistisch und typografisch fragwürdige Dinge verbreitet hat. Außerdem waren die drei Bände + TeXbook + Metafont für mich unerschwinglich. Also musste Band I + gebrauchtes TeXbook + gebrauchtes Metafont-Buch reichen. Wozu man Metafont gebraucht hat? Damals hat man noch Zeichnungen als Font realisiert.

Am meisten habe ich damals durch ausprobieren gelernt. Mal eben schnell fragen, wie man etwas gut macht, war auch nicht. Stattdessen saß ich mehrere Nachmittage und Abende in der Uni-Bibliothek und habe mir Notizen aus Typografiebücher heraus geschrieben. Danach habe ich dann probiert diese Dinge umzusetzen. Dazu habe ich im schwer verständlichen TeXbook gelesen und Quellcode von fremden Style-Files studiert. Das war hart, aufwändig und hat sich extrem gelohnt. Trotzdem finde ich heute noch manchmal Code von mir, der aus jener Zeit stammt und bei dem ich die Augen verdrehe. ;-)

Heute steht dem Anwender fast alles (jedenfalls die sinnvollen Dinge) in Form fertiger Pakete mit brauchbaren Anleitungen zur Verfügung. Lesen und Ausprobieren sollte man natürlich noch immer. Aber das Lesen erstreckt sich nicht mehr auf Quellcode von LaTeX oder Klassen und Paketen. Und selbst von Grund auf neu erschaffen muss man eigentlich nicht mehr. Für das tiefe Verständnis war das damals zwar nützlich, dem schnellen Erfolg war es aber sehr hinderlich.

Wer heute LaTeX lernt ist sich gar nicht bewusst, in welch einem Paradies erlebt. Vor zwanzig Jahren hat man noch einen Anschiss kassiert, wenn man sich über irgend eine nicht vorhandene oder unzureichende Anleitung beschwert hat, und wurde umgehend dazu rekrutiert, die Mängel selbst zu beseitigen. Heute darf man als Paketautor nicht einmal mehr das Wort "Anschiss" in den Mund nehmen, ohne geteert und gefedert zu werden, und kassiert selbst einen solchen, wenn man auf eine der vorhandenen (und großteils wirklich guten) Anleitungen verweist.

Antworten