Seite 1 von 1
Zeilenumbruch in verschachtelter Tabelle mit multirow
Verfasst: Di 12. Aug 2014, 10:25
von orikson
Ich habe eine etwas verschachtelte Tabelle mit multicolumn und multirow. In einer Zelle, die sich über zwei Zeilen erstreckt, habe ich einen etwas längeren Text der aber nicht in eine Zeile passt.
Ich habe schon alles mögliche versucht und die Tabelle selbst passt dann auch auf die Seite, aber der Text geht nach wie vor über den Rand hinaus. Wo muss ich den mein p{} oder mein L{} setzten damit ich einen Umbruch hinbekomme?
\documentclass[12pt, oneside, a4paper, listof=numbered, listof=leveldown]{scrreprt}
% inputenc wird zur direkten Eingabe von Umlauten benötigt
\usepackage[utf8]{inputenc}
% fontenc ermöglicht die Trennung von Umlauten
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
% Funktionen für Tabellen
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} %linksbündiger Text in Zelle mit Breitenangabe und Umbruch
\renewcommand{\arraystretch}{1.5} % mehr Abstand zwischen zwei Tabellenzeilen
\newcommand{\lightrule}{\midrule[0.1\lightrulewidth]}
% Beginn des eigentlichen Dokuments
\begin{document}
\begin{table}
\begin{tabular}{rccl}
\toprule
\multicolumn{1}{c}{\multirow{2}[3]{*}{Interrupt}} & \multicolumn{2}{c}{Priorität} & \multicolumn{1}{c}{\multirow{2}[3]{*}{Beschreibung}} \\
\cmidrule(rl){2-3}
\multicolumn{1}{c}{} & alt & Neu & \multicolumn{1}{c}{} \\
\midrule
DAC (TIM7) & 2.2 & 1.0 & bla bla \\
ADC (TIM6) & 0.0 & -- & \multicolumn{1}{c}{\multirow{2}[4]{*}{hier steht richtig viel Text. So viel, %
dass eine Zweite Zeile dringend nötig ist!}} \\
DMA & -- & 2.0 & \multicolumn{1}{c}{} \\
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
Verfasst: Di 12. Aug 2014, 10:43
von Johannes_B
So ganz versteh ich nicht, warum du in der Tabelle so viele Multicolumns und Multirows hast, baer schau mal:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
%\usepackage{multirow}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} %linksbündiger Text in Zelle mit Breitenangabe und Umbruch
%\renewcommand{\arraystretch}{1.5} % mehr Abstand zwischen zwei Tabellenzeilen
%\newcommand{\lightrule}{\midrule[0.1\lightrulewidth]}
\usepackage{showframe}
% Beginn des eigentlichen Dokuments
\begin{document}
\begin{tabular}{rccL{4cm}}
\toprule
Interrupt & \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt & Neu & \\
\midrule
DAC (TIM7) & 2.2 & 1.0 & bla bla \\
ADC (TIM6) & 0.0 & -- & {hier steht richtig viel Text. So viel, dass eine Zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0 & \\
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabular}
\bigskip
\noindent\begin{tabularx}{\textwidth}{rccX}
\toprule
Interrupt & \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt & Neu & \\
\midrule
DAC (TIM7) & 2.2 & 1.0 & bla bla \\
ADC (TIM6) & 0.0 & -- & {hier steht richtig viel Text. So viel, dass eine Zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0 & \\
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabularx}
\end{document}
Verfasst: Di 12. Aug 2014, 11:45
von orikson
Johannes_B hat geschrieben:So ganz versteh ich nicht, warum du in der Tabelle so viele Multicolumns und Multirows hast, baer schau mal
Das funktioniert, aber so sollte es eigentlich nicht sein. Im Vergleich zu der ursprünglichen Tabelle sind die Überschriften nämlich weder horizontal noch vertikal Zentriert. Dafür werden die Multicolumns und Multirows benötigt.
Selbes gilt für den langen Text, vielleicht habe ich mich auch ein wenig unklar ausgedrückt, der Text bezieht sich auf beide Einträge links, soll also in die Zweite Zeile imgebrochen werden. So solls aussehen:

[/img]
Verfasst: Di 12. Aug 2014, 14:26
von Johannes_B
Für sowas eignen sich m-Spalten.
Wie kann ich innerhalb einer Tabellenzelle vertikal zentrieren?
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
%\usepackage{multirow}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} %linksbündiger Text in Zelle mit Breitenangabe und Umbruch
\newcolumntype{G}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{H}[1]{>{\centering\arraybackslash}m{#1}}
%\renewcommand{\arraystretch}{1.5} % mehr Abstand zwischen zwei Tabellenzeilen
%\newcommand{\lightrule}{\midrule[0.1\lightrulewidth]}
%\usepackage{showframe}
% Beginn des eigentlichen Dokuments
\begin{document}
\centering
\begin{tabular}{H{6em}ccG{6cm}}
\toprule
Interrupt & \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt & Neu & \\
\midrule
DAC (TIM7) & 2.2 & 1.0 & bla bla \\
ADC (TIM6) & 0.0 & -- & {hier steht richtig viel Text. So viel, dass eine Zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0 & \\
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabular}
\bigskip
\begin{tabular}{rccL{4cm}}
\toprule
Interrupt & \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt & Neu & \\
\midrule
DAC (TIM7) & 2.2 & 1.0 & bla bla \\
ADC (TIM6) & 0.0 & -- & {hier steht richtig viel Text. So viel, dass eine Zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0 & \\
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabular}
\end{document}
Verfasst: Di 12. Aug 2014, 16:09
von orikson
diese m-Spalten helfen mir bei meinem eigentlichem Problem aber nicht weiter, oder?

Verfasst: Di 12. Aug 2014, 17:52
von esdd
In Deinem verlinkten Bild ist interessanter Weise nichts zentriert. Die Spaltenüberschriften würde ich auf keinem Fall vertikal zentrieren, sondern unbedingt den viel übersichtlicheren Vorschlag von Johannes übernehmen. Außerdem würde ich auch die erste Spalte linksbündig setzen.
Den längeren Text innerhalb der Tabelle kannst Du schon mit \multirow setzen, musst Dir aber bewusst sein, dass da immer Kontrolle und Handarbeit notwendig ist. Wenn der Text zum Beispiel noch etwas länger wird und 3 Zeilen benötigt, dann musst Du in den anderen Spalten Platz dafür schaffen und die multirow Zelle eventuell zusätzlich vertikal ausrichten. Außerdem würde die Änderung von \arraystretch zu unterschiedlichen Zeilenabständen führen.
Hier sind zwei Vorschläge, die auf denen von Johannes basieren. Der untere gefällt mir wesentlich besser.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\newcolumntype{G}{>{\raggedright\arraybackslash}X}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
%\renewcommand{\arraystretch}{1.5} % mehr Abstand zwischen zwei Tabellenzeilen
%\newcommand{\lightrule}{\midrule[0.1\lightrulewidth]}
%\usepackage{showframe}
\begin{document}
\begin{table}
\begin{tabularx}{\linewidth}{C{6em}ccG}
\toprule
Interrupt& \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt& neu& \\
\midrule
DAC (TIM7) & 2.2& 1.0 & bla bla \\ \addlinespace
ADC (TIM6) & 0.0 & -- &
\multirow{2}{\linewidth}{Hier steht richtig viel Text. So viel, dass eine zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0& \\ \addlinespace
ADC (TIM6)& 0.0 & -- & \multirow{2}{\linewidth}{Hier steht Text } \\
DMA & -- & 2.0& \\ \addlinespace
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{\linewidth}{L{6em}ccG}
\toprule
Interrupt& \multicolumn{2}{c}{Priorität} & Beschreibung \\
\cmidrule(rl){2-3}
& alt& neu& \\
\midrule
DAC (TIM7) & 2.2& 1.0 & bla bla \\ \addlinespace
ADC (TIM6) & 0.0 & -- &
\multirow{2}{\linewidth}{Hier steht richtig viel Text. So viel, dass eine zweite Zeile dringend nötig ist!} \\
DMA & -- & 2.0& \\ \addlinespace
ADC (TIM6)& 0.0 & -- & \multirow{2}{\linewidth}{Hier steht Text } \\
DMA & -- & 2.0& \\ \addlinespace
EXTI 1 & 1.1 & 0.1 & bla bla \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
Gruß
Elke
Verfasst: Mi 13. Aug 2014, 10:21
von orikson
esdd hat geschrieben:In Deinem verlinkten Bild ist interessanter Weise nichts zentriert.
Wie gesagt, um irgendwelche Zentrierungen will ich mich erst mal gar nicht kümmern. Ich will erst mal nur den Text über die beiden verbundenen Zellen umgebrochen haben.
Mit deinem Vorschlag funktioniert das aber jetzt, vielen Dank!