PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit tabularx und linksbündig (raggedright)



Kathrin_B
14-09-2009, 12:23
Hallo zusammen,

ich schreibe in Tabellen den Text gerne linksbündig. Allerdings führt das in Verbindung mit tabularx bei mir leider zu Fehlern. Hier ein Minimalbeispiel mit zwei kleinen Tabellen:


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{booktabs}

\newcolumntype{x}[1]{>{\hsize=#1\hsize}X}
\newcolumntype{y}[1]{>{\raggedright\hsize=#1\hsize}X}

\begin{document}

\begin{tabularx}{\linewidth}{y{0.9}x{1.1}}
\raggedright %nützt an dieser Stelle leider nichts
A & Testbeispielzelle Testbeispielzelle Testbeispielzelle Testbeispielzelle \\
A & B \\\bottomrule
\end{tabularx}

\begin{tabularx}{\linewidth}{y{0.6}y{1.1}y{1.1}y{1 .1}y{1.1}}
%\raggedright %Fehler beim Kompilieren falls auskommentiert
\toprule
A & B & C & \multicolumn{2}{c}{D} \\\midrule
Zelle A Zelle A & Zelle B Zelle B Zelle B & Zelle C Zelle C & Zelle D Zelle D & Zelle E Zelle E Zelle E \\%\midrule
\end{tabularx}

\end{document}

In der ersten Tabelle funktioniert es leider nicht mehr, wenn ich auch die zweite Spalte auf den Typ y setze (linksbündig). Schreibe ich ein raggedright in die Tabelle (vor die erste Zelle) nützt es leider gar nichts, wie man im Beispiel sieht.

In der zweiten Tabelle bekomme ich einen Fehler, sobald ich das auskommentierte \midrule nach der zweiten Zeile wieder mit hinein nehme.

Hier das Minimalbeispiel nochmal, welches nicht funktioniert:


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{booktabs}

\newcolumntype{x}[1]{>{\hsize=#1\hsize}X}
\newcolumntype{y}[1]{>{\raggedright\hsize=#1\hsize}X}

\begin{document}

\begin{tabularx}{\linewidth}{y{0.9}y{1.1}}
%\raggedright %nützt an dieser Stelle leider nichts
A & Testbeispielzelle Testbeispielzelle Testbeispielzelle Testbeispielzelle \\
A & B \\\bottomrule
\end{tabularx}

\end{document}

und


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{booktabs}

\newcolumntype{x}[1]{>{\hsize=#1\hsize}X}
\newcolumntype{y}[1]{>{\raggedright\hsize=#1\hsize}X}

\begin{document}

\begin{tabularx}{\linewidth}{y{0.6}y{1.1}y{1.1}y{1 .1}y{1.1}}
%\raggedright %Fehler beim Kompilieren falls auskommentiert
\toprule
A & B & C & \multicolumn{2}{c}{D} \\\midrule
Zelle A Zelle A & Zelle B Zelle B Zelle B & Zelle C Zelle C & Zelle D Zelle D & Zelle E Zelle E Zelle E \\\midrule
\end{tabularx}

\end{document}

Hat jemand eine Ahnung wie ich linksbündige Tabellen mit tabularx erstellen kann?

Grüße,
Kathrin

Stefan_K
14-09-2009, 12:32
Hallo Kathrin,

das sind ja sehr gute Minimalbeispiele. Ich habe mir mal das letzte hergenommen, hier kann man die Übersetzungsfehler beseitigen, indem man \arraybackslash einfügt:

\newcolumntype{y}[1]{>{\raggedright\arraybackslash\hsize=#1\hsize}X}
\raggedright verändert das \\-Makro, \arraybackslash stellt einfach nur den gewohnten Zeilenumbruch her und ist in array.sty definiert als \let\\\tabularnewline.

Viele Grüße,

Stefan


--
TeXblog (http://texblog.net)

Kathrin_B
14-09-2009, 12:46
Hallo Stefan,

mit deiner Lösung funktioniert auch das erste Beispiel :-) Vielen Dank!

Allerdings trennt LaTeX jetzt nicht mehr automatisch in der zweiten Zelle, wenn ich es nicht linksbündig mache (also automatischer Blocksatz) trennt LaTeX. Siehe Minimalbeispiel:


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{booktabs}

\newcolumntype{x}[1]{>{\hsize=#1\hsize}X}
\newcolumntype{y}[1]{>{\raggedright\arraybackslash\hsize=#1\hsize}X}

\begin{document}

\begin{tabularx}{\linewidth}{y{0.9}y{1.1}}
%\raggedright %nützt an dieser Stelle leider nichts
A & Testbeispielzelle Testbeispielzelle Test\-beispielzelle Testbeispielzelle \\
A & B \\\bottomrule
\end{tabularx}

\begin{tabularx}{\linewidth}{y{0.9}x{1.1}}
%\raggedright %nützt an dieser Stelle leider nichts
A & Testbeispielzelle Testbeispielzelle Test\-beispielzelle Testbeispielzelle \\
A & B \\\bottomrule
\end{tabularx}

\end{document}

Vielleicht hat hier ja noch jemand eine Lösung für mich, damit die Trennung funktioniert.

Grüße,
Kathrin

Stefan_K
14-09-2009, 13:02
Hallo Kathrin,

mit ragged2e und \RaggedRight ginge das:

\usepackage{ragged2e}
\newcolumntype{y}[1]{>{\RaggedRight\arraybackslash\hsize=#1\hsize}X}
Stefan

Kathrin_B
14-09-2009, 13:04
Super, auch das funktioniert! Tausend Dank

Stefan_K
14-09-2009, 13:06
Übrigens gibt es zumindest im Minimalbeispiel eine overfull \hbox, die Du mit \noindent vor der Tabelle beseitigen kannst, die ja über die gesamte Breite gehen soll und daher vorher keinen Einzug haben sollte.

Stefan

Kathrin_B
14-09-2009, 13:15
Ja, das stimmt, danke für den Tipp. Aber in meinem normalen Dokument habe ich den Absatzeinzug ausgestellt bzw. auf 0 gesetzt, deshalb ist \noindent dort nicht notwendig.

Stefan_K
14-09-2009, 13:38
Aha. Verwendest Du auch microtype? Gerade in Tabellen kann das Umbruch und Zwischenraumausgleich erheblich verbessern, zusammen mit pdfLaTeX, siehe microtype-Beispiel (http://texblog.net/latex-archive/layout/pdflatex-microtype/).

Stefan

voss
14-09-2009, 13:49
mit ragged2e und \RaggedRight ginge das:

\usepackage{ragged2e}
\newcolumntype{y}[1]{>{\RaggedRight\arraybackslash\hsize=#1\hsize}X}
Stefan

wenn man \RaggedRight statt \raggedright benutzt, sollte das
\arraybackslash eigentlich nicht mehr notwendig sein.

HErbert

Stefan_K
14-09-2009, 14:03
Hallo Herbert,

wenn man \RaggedRight statt \raggedright benutzt, sollte das
\arraybackslash eigentlich nicht mehr notwendig sein.


das ist richtig, man kann es weglassen, es sei denn, man schreibt etwa, was wenig sinnvoll ist:

\justifying\RaggedRight ...
dann würde ohne \arraybackslash wieder ein Fehler auftreten. Nur der Vollständigkeit halber, denn so eine Kombination wird man ja nicht verwenden.

Viele Grüße,

Stefan

Kathrin_B
14-09-2009, 16:59
Hallo Stefan,

ja, ich verwende microtype. Allerdings ist es meistens ausgeschaltet, weil ich die Option draft aktiviert habe, um die overfull boxes besser sehen zu können.

Ich habe noch ein weiteres Problem in meinen Tabellen: meine Zellen werden leider nicht vertikal zentriert. Eigentlich hatte ich als Lösung die m-Spalten gefunden, aber leider wird dort nichts zentriert. Was kann ich hier tun?


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{array}
\usepackage{ragged2e}

\newcolumntype{y}[1]{>{\RaggedRight\arraybackslash\hsize=#1\hsize}X}

\begin{document}

\begin{tabularx}{3cm}{m{1cm}y{1}}
Text & mehrzeiliger Text in der Zelle \\
\end{tabularx}

\end{document}

Grüße,
Kathrin

u_fischer
14-09-2009, 17:06
Du musst in der X-Spalte den m-Typ benutzen:


\documentclass{scrbook}
\usepackage{tabularx}
\usepackage{array}
\usepackage{ragged2e}


\newcolumntype{y}[1]{>{\RaggedRight\arraybackslash\hsize=#1\hsize}X}

\begin{document}

\def\tabularxcolumn#1{m{#1}}
\begin{tabularx}{3cm}{m{1cm}y{1}}
Text & mehrzeiliger Text in der Zelle \\
\end{tabularx}

\end{document}

Kathrin_B
14-09-2009, 17:16
Hallo Ulrike,

das funktioniert zwar, allerdings sind dann alle x-Spalten vertikal zentriert. Ich möchte es aber schon gerne bestimmen, wann es zentriert wird. In einer normalen Tabelle mit tabular bekomme ich auch keine vertikal zentrierten Zellen hin.

\documentclass{scrbook}
\usepackage{array}

\begin{document}

\begin{tabular}{m{1cm}p{1cm}}
Text & mehrzeiliger Text in der Zelle \\
\end{tabular}

\end{document}

Grüße,
Kathrin

u_fischer
14-09-2009, 17:36
Du musst die Spalten, durch die die Grundlinie der Zeile in der Mitte verlaufen soll als m-Spalten definieren:


\documentclass{scrbook}
\usepackage{array}

\begin{document}

\begin{tabular}{lp{1cm}m{1cm}}
ich bin die Grundlinie&
Text & mehrzeiliger Text in der Zelle \\
\end{tabular}

\end{document}

Soweit ich sehe, sind X-Spalten einer tabularx immer vom gleichen Typ (also p oder m-Spalten etc je nach Definition von \tabularxcolumn. Zwischendrin wechseln is nicht.