Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Tabelle: vertikale Zentrierung und Silbentrennung funktionieren nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.07.2010
    Beiträge
    9

    Tabelle: vertikale Zentrierung und Silbentrennung funktionieren nicht

    Hallo zusammen,

    ich arbeite mich gerade in das Thema Tabellen ein und fand dabei insbesondere diese Anleitung hier sehr hilfreich: http://www.vision.ime.usp.br/~jmena/...with_latex.pdf

    Nun habe ich aber folgende Probleme:
    • In meiner Tabelle, die in folgendem Minimalbeispiel enthalten ist, wird der Inhalt der Multirow-Zellen (erste Spalte) nicht vertikal zentriert. Auch wenn ich m{} aus dem Array Paket verwende klappt das nicht.
    • Die Silbentrennung scheint in den ersten beiden Spalten nicht richtig zu funktionieren (nur an manchen Stellen), der Text ragt in die benachbarte Zelle hinein.


    So hier nun der Code:
    Code:
    \documentclass[a4paper]{scrreprt}
    
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{multirow}
    \usepackage{booktabs}
    \usepackage{tabularx}
    \usepackage{array}
    
    % Neue Spalte in Tabularx für linksbündig
    \newcolumntype{Y}{>{\raggedright\arraybackslash}X}
    
    % Neuer Command für Linien unter dem Heading
    \newcommand{\otoprule}{\midrule[\heavyrulewidth]}
    
    \begin{document}
    
    \begin{table}
    \centering
    	\begin{tabularx}{\textwidth}{YYp{2.8cm}p{5cm}}
    	\toprule
     	\multicolumn{2}{l}{Leistungskriterien}	& Bewertung	& Blindtext\\
     	\otoprule
    	\multirow{2}{2cm}{Argumentationsleistung Präsentation} & Rein diskussionsorientiert & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\
    	\cmidrule(l){2-4}
    	& Überzeugungskraft & sehr gut (+++) & Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Themenschwerpunkt & sehr gut (+++) & So, jetzt ist mein supertoller Blindtext riesengroß geworden und geht sogar über vier Zeilen, hammer!\\
    	\midrule
    	\multirow{2}{2cm}{Argumentationsleistung Diskussion} & Überzeugungs- und Durchsetzungsvermögen & OK (0)			& Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Fachkundigkeit & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\\bottomrule
    	\end{tabularx}
    \caption{Meine super Tabelle}
    \end{table}
     
    \end{document}
    Hat jemand schon mal ein ähnliches Problem gehabt? Ich wäre für jeden Hinweis dankbar - habe schon das ganze Web abgegrast und bin total ratlos...

  2. #2
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Die fehlende Trennung scheint daran zu liegen, dass LaTeX die Wörter nicht kennt. Gib die Trennungen mal vor, dann sollte es klappen, also etwa "Argumentations\-leistung"

    Das Problem bei multirow lässt sich im MB lösen, indem man \multirow{5}{2cm}{...} vorgibt statt 2, denn mit den automatischen Umbrüchen werden 5 Zeilen gebraucht.
    Allerdings hoffe ich, dass es dafür mittlerweile eine elegantere Lösung gibt.

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.05.2010
    Beiträge
    79
    Hallo,
    ich hab mal nen bisschen rumprobiert und festgestellt, dass es wohl daran liegt, dass das Wort breiter ist als die Spalte. Die Trennung an sich macht kein Problem, wenn vorher noch ein kurzes Wort steht:

    Code:
    \documentclass[a4paper]{scrreprt}
    
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    
    \begin{document}
    
    \begin{tabular}{p{3cm}p{3cm}}
    Argumentationsleistung & hallo Argumentationsleistung
    \end{tabular}
    
    
    \end{document}
    lg
    karlo

  4. #4
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

    mal \usepackage[babel]{microtype} einbinden und ecentuell deiner p spalte noch \RaggedRight aus dem ragged2e paket mitgeben.

    gruss
    Mein Ball ist umgefallen

  5. #5
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von Xenara Beitrag anzeigen
    Die fehlende Trennung scheint daran zu liegen, dass LaTeX die Wörter nicht kennt. Gib die Trennungen mal vor, dann sollte es klappen, also etwa "Argumentations\-leistung"
    Die fehlende Trennung liegt daran, dass TeX das erste Wort eines Absatzes nicht auf mögliche Trennstellen überprüft (was in schmalen Tabellenspalten keine gute Idee ist). Füge vor "Argumentationsleistung" \hspace{0pt} ein, dann wird korrekt getrennt.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.07.2010
    Beiträge
    9
    Hallo zusammen,

    herzlichen Dank für das umfangreiche Feedback - das ist ja super!

    Zitat Zitat von Xenara
    Das Problem bei multirow lässt sich im MB lösen, indem man \multirow{5}{2cm}{...} vorgibt statt 2, denn mit den automatischen Umbrüchen werden 5 Zeilen gebraucht.
    Allerdings hoffe ich, dass es dafür mittlerweile eine elegantere Lösung gibt.
    Ok, das ist gut zu wissen. Funktioniert so - allerdings muss man eben erst in die PDF schauen und die Zeilen zählen.

    Zitat Zitat von Xenara
    Die fehlende Trennung scheint daran zu liegen, dass LaTeX die Wörter nicht kennt. Gib die Trennungen mal vor, dann sollte es klappen, also etwa "Argumentations\-leistung"
    Die manuelle Trennung funktioniert. Ich glaube aber, dass LaTeX mit einem Algorithmus trennt und es daher egal ist, ob er das Wort kennt oder nicht.

    Zitat Zitat von lockstep
    Die fehlende Trennung liegt daran, dass TeX das erste Wort eines Absatzes nicht auf mögliche Trennstellen überprüft (was in schmalen Tabellenspalten keine gute Idee ist). Füge vor "Argumentationsleistung" \hspace{0pt} ein, dann wird korrekt getrennt.
    Das ist ebenfalls gut zu Wissen und liefert dann auch die Antwort
    \hspace{0} funktioniert super, wenn es am Anfang der Zelle gesetzt wird. Ich würde das jedoch am liebsten global definieren (im Spalten command z.B.), aber das hier funktioniert nicht:

    Code:
    \newcolumntype{Y}{>{\raggedright\hspace{0pt}\arraybackslash}X}
    Kann man das irgendwie erreichen?

    @bobmalaria: Mit microtype komme ich irgendwie nicht weiter, da erhalte ich einen Fehler (! pdfTeX error (font expansion): auto expansion is only possible with scalable fonts.). In meinem vollständigen Dokument verwende ich außerdem XeLaTeX (verwende eine OpenType Font) und ich glaub das geht auch nicht ohne weiteres mit microtype?!

    Nochmal tausend dank für Eure Antworten!

  7. #7
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von ApfelQ Beitrag anzeigen
    \hspace{0} funktioniert super, wenn es am Anfang der Zelle gesetzt wird. Ich würde das jedoch am liebsten global definieren (im Spalten command z.B.), aber das hier funktioniert nicht:

    Code:
    \newcolumntype{Y}{>{\raggedright\hspace{0pt}\arraybackslash}X}
    Kann man das irgendwie erreichen?
    Dein Code funktioniert grundsätzlich durchaus (und ist die saubere Vorgangsweise) - du musst allerdings in multirow-Feldern händisch \hspace{0pt} ergänzen.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  8. #8
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von ApfelQ Beitrag anzeigen
    In meinem vollständigen Dokument verwende ich außerdem XeLaTeX (verwende eine OpenType Font) und ich glaub das geht auch nicht ohne weiteres mit microtype?!
    Möglicherweise sogar überhaupt nicht. Soferne man also nicht als Alpha-Tester für luaLaTeX agieren möchte, muss man sich derzeit noch zwischen OpenType-Schriften und mikrotypographischen Features entscheiden.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  9. #9
    Registrierter Benutzer
    Registriert seit
    05.07.2010
    Beiträge
    9
    Hallo lockstep,

    danke für Deine Antworten! Das mit dem \hspace und Multirow habe ich nun auch geschnallt. Seltsames Verhalten von Multirow...

    Nun habe ich folgendes abgeändertes Minimalbeispiel (der Einfachheit halber habe ich nur die erste Spalte vertikal zentriert):

    Code:
    \documentclass[a4paper]{scrreprt}
    
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{multirow}
    \usepackage{booktabs}
    \usepackage{tabularx}
    \usepackage{array}
    
    % Neue Spalte in Tabularx für linksbündig
    \newcolumntype{Y}{>{\raggedright\hspace{0pt}\arraybackslash}X}
    
    % Neuer Command für Linien unter dem Heading
    \newcommand{\otoprule}{\midrule[\heavyrulewidth]}
    
    
    \begin{document}
    
    \begin{table}
    \centering
    	\begin{tabularx}{\textwidth}{YYp{2.8cm}p{5cm}}
    	\toprule
     	\multicolumn{2}{l}{Leistungskriterien}	& Bewertung	& Blindtext\\
     	\otoprule
    	\multirow{9}{2cm}{\hspace{0pt}Argumentationsleistung Präsentation} & Rein diskussionsorientiert & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\
    	\cmidrule(l){2-4}
    	& Überzeugungskraft & sehr gut (+++) & Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Themenschwerpunkt & sehr gut (+++) & So, jetzt ist mein supertoller Blindtext riesengroß geworden und geht sogar über vier Zeilen, hammer!\\
    	\midrule
    	\multirow{5}{2cm}{\hspace{0pt}Argumentationsleistung Diskussion} & Überzeugungs- und Durchsetzungsvermögen & OK (0)			& Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Fachkundigkeit & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\\bottomrule
    	\end{tabularx}
    \caption{Meine super Tabelle}
    \end{table}
     
    \end{document}
    Was mich nun aber stört: In der ersten Spalte ist der Text nicht exakt vertikal zentriert. Der Abstand nach oben ist kürzer, als der nach unten zum Zellenende.

    Laut diesen hilfreichen Anmerkungen ( http://www.unix-ag.uni-kl.de/~fische...llen_in_LaTeX/ ) liegt es wohl daran, dass das Multirow-Paket nicht checkt, dass das booktabs Paket vertikale Abstände eingefügt hat und die Zeilenhöhe daher falsch berechnet. Den Lösungsvorschlag von der Seite habe ich versucht umzusetzen - erfolglos. Hier der wieder abgeänderte Code (sorry für den langen Beitrag ) - die erste Spalte wird nun komplett zerschossen (Änderungen zum ersten Minimalbeispiel dieses Posts sind rot markiert):

    Code:
    \documentclass[a4paper]{scrreprt}
    
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{multirow}
    \usepackage{booktabs}
    \usepackage{tabularx}
    \usepackage{array}
    
    % Neue Spalte in Tabularx für linksbündig
    \newcolumntype{Y}{>{\raggedright\hspace{0pt}\arraybackslash}X}
    
    % Neuer Command für Linien unter dem Heading
    \newcommand{\otoprule}{\midrule[\heavyrulewidth]}
    
    % Anpassen der vertikal zentrierten Zellen
    % Quelle:http://www.unix-ag.uni-kl.de/~fischer/blog/20070411_Tabellen_in_LaTeX/
    \usepackage{ifthen}
    \newcommand{\forloop}[5][1]{%
    \setcounter{#2}{#3}%
    \ifthenelse{#4}{#5\addtocounter{#2}{#1}%
    \forloop[#1]{#2}{\value{#2}}{#4}{#5}}%
    {}}
    
    \newcounter{crcounter}
    
    \newcommand{\compensaterule}[1]{%
    \forloop{crcounter}{1}{\value{crcounter} < #1}%
    {\vspace*{-\aboverulesep}\vspace*{-\belowrulesep}}}
    
    \newcommand{\multirowbt}[3]{\multirow{#1}{#2}%
    {\compensaterule{#1}#3}}
    
    
    \begin{document}
    
    \begin{table}
    \centering
    	\begin{tabularx}{\textwidth}{YYp{2.8cm}p{5cm}}
    	\toprule
     	\multicolumn{2}{l}{Leistungskriterien}	& Bewertung	& Blindtext\\
     	\otoprule
    	\multirowbt{9}{2cm}{\hspace{0pt}Argumentationsleistung Präsentation} & Rein diskussionsorientiert & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\
    	\cmidrule(l){2-4}
    	& Überzeugungskraft & sehr gut (+++) & Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Themenschwerpunkt & sehr gut (+++) & So, jetzt ist mein supertoller Blindtext riesengroß geworden und geht sogar über vier Zeilen, hammer!\\
    	\midrule
    	\multirowbt{5}{2cm}{\hspace{0pt}Argumentationsleistung Diskussion} & Überzeugungs- und Durchsetzungsvermögen & OK (0)			& Mein supertoller Blindtext ist größer und geht sogar über drei Zeilen\\
    	\cmidrule(l){2-4}
    	& Fachkundigkeit & gut (++) & Mein supertoller Blindtext geht über zwei Zeilen\\\bottomrule
    	\end{tabularx}
    \caption{Meine super Tabelle}
    \end{table}
     
    \end{document}
    Den eingefügten Code schnall ich nicht wirklich Habt Ihr vielleicht ne Idee an was das liegen könnte?
    Geändert von ApfelQ (08-07-2010 um 10:32 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •