PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeilenumbruch in multicolumn



runningsouth
22-07-2009, 12:56
Hallo,

ich habe eine etwas größere Tabelle erstellt und habe nun das Problem, dass wenn ich multicolumns verwende der Text nicht automatisch umbricht und die Tabelle dann größer wird wie die Seite. Wie kann ich Latex dazu bringen, dass es die eigentlich vorgegebene Breite akzeptiert?

\documentclass[12pt]{scrreprt}
\usepackage{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\usepackage{lscape}
\usepackage{longtable}
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption}
\renewcommand{\thetable}{\arabic{table}}
\begin{document}


\begin{landscape}
\newlength{\breite}
\breite14.5mm
\begin{table}[t]
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{blablabla}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}||p{\breite}||p{\br eite}||}
\hline
&\multicolumn{5}{|c||}{Aktivität}&\multicolumn{3}{|c||}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\multicolumn{3}{|c||}{RL}&\multicolumn{2}{|c||}{MiniPol}&\multicolumn{2}{|c||}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&blabla&blablabl&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline\hline
\end{tabular}
\end{table}
\end{landscape}
\end{document}

Danke vielmals,
Markus

mechanicus
22-07-2009, 13:04
Hallo,

warum nimmst du eigentlich nicht die tabularx-Umgebung?

Hier mal mit deinem MB:

\documentclass[12pt]{scrreprt}
\usepackage{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\usepackage{calc}
\usepackage{lscape}
\usepackage{longtable}
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption}
\renewcommand{\thetable}{\arabic{table}}
\def\MC#1#2{\multicolumn{#1}{|p{#1\breite-3\tabcolsep}||}{#2}}
\begin{document}


\begin{landscape}
\newlength{\breite}
\breite14.5mm
\begin{table}[t]
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{blablabla}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}||p{\breite}||p{\br eite}||}
\hline
&\MC{5}{Aktivität}&\MC{3}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\MC{3}{RL}&\MC{2}{MiniPol}&\MC{2}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&blabla&blablabl&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline\hline
\end{tabular}
\end{table}
\end{landscape}
\end{document}

Gruß
Marco

runningsouth
22-07-2009, 13:07
gute Frage :-) Danke Dir auf alle Fälle, es funktioniert :-))

Gruß,
Markus

runningsouth
22-07-2009, 13:15
ok, sorry, zu früh gefreut. Minimalbeispiel klappte zwar, aber der Text in den multicolumns war nicht zentriert und wenn ich
\MC{2}{|c||}{replikative Intermediate} einfügte hat er auch nur Mist gebaut :-(
Außerdem beschwert sich Latex in meiner Arbeit wenn ich setze, dass "overfull \vbox (...) has occurred while..." und missing number, treated as zero.

Nochmals danke,
Markus

runningsouth
22-07-2009, 13:19
oder, dumme Frage, muss ich den Befehl
\def\MC#1#2{\multicolumn{#1}{|p{#1\breite-3\tabcolsep}||}{#2}} erweitern, je nachdem über wieviele Spalten meine multicolumn geht? Also 2, 3 oder 5?

mechanicus
22-07-2009, 13:52
oder, dumme Frage, muss ich den Befehl
\def\MC#1#2{\multicolumn{#1}{|p{#1\breite-3\tabcolsep}||}{#2}} erweitern, je nachdem über wieviele Spalten meine multicolumn geht? Also 2, 3 oder 5?
Hallo,

du musst nichts erweitern. Du gibst ja zwei Parameter ein. Der Erste gibt an, wieviele Spalten und der Zweite gibt an, was rein soll.

dann lade das Paket ragged2e und nutze dann den Befehl:


\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}}


Gruß
Marco

runningsouth
22-07-2009, 14:02
danke für Deine Hilfe, ich bekomme es aber irgendwie nicht hin, selbst das MB funktioniert nicht mehr.

\documentclass[12pt]{scrreprt}
\usepackage{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\usepackage{calc}
\usepackage{lscape}
\usepackage{longtable}
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption}
\usepackage{ragged2e}
\renewcommand{\thetable}{\arabic{table}}
\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}}

\begin{document}


\begin{landscape}
\newlength{\breite}
\breite14.5mm
\begin{table}[t]
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{blablabla}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}||p{\breite}||p{\br eite}||}
\hline
&\MC{5}{Aktivität}&\MC{3}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\MC{3}{RL}&\MC{2}{MiniPol}&\MC{2}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&blabla&blablabl&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline\hline
\end{tabular}
\end{table}
\end{landscape}
\end{document}


Gruß,
verzweifelter Markus

runningsouth
22-07-2009, 14:06
Noch eine Frage zu Deiner letzten Aussage (und meiner Frage zu dem erweiterten Befehl). Du sagtest, dass die zwei Parameter angeben über wieviele Spalten es gehen soll und was hineinkommt. Wenn meine multicolumn nun aber über 3 bzw. 5 Spalten gehen soll, muss ich das dann da nicht angeben?

Markus

mechanicus
22-07-2009, 14:16
Hallo,

erstmal das MB:
(habe vergessen array zu erwähnen)

\documentclass[12pt]{scrreprt}
\usepackage{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\usepackage{calc}
\usepackage{lscape}
\usepackage{longtable}
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption}
\usepackage{array,ragged2e}
\renewcommand{\thetable}{\arabic{table}}
\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}}

\begin{document}


\begin{landscape}
\newlength{\breite}
\breite14.5mm
\begin{table}[t]
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{blablabla}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}||p{\breite}||p{\br eite}||}
\hline
&\MC{5}{Aktivität}&\MC{3}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\MC{3}{RL}&\MC{2}{MiniPol}&\MC{2}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&blabla&blablabl&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline\hline
\end{tabular}
\end{table}
\end{landscape}
\end{document}


Noch eine Frage zu Deiner letzten Aussage (und meiner Frage zu dem erweiterten Befehl). Du sagtest, dass die zwei Parameter angeben über wieviele Spalten es gehen soll und was hineinkommt. Wenn meine multicolumn nun aber über 3 bzw. 5 Spalten gehen soll, muss ich das dann da nicht angeben?
Doch. du gibst an:
\MC{ANZAHL DER SPALTEN}{HIER DER TEXT}

Oder reden wir aneinander vorbei :confused:

Gruß
Marco

runningsouth
22-07-2009, 14:23
ok, das mit array hat schon mal geklappt, erster Punkt abgehakt :-) Beim anderen mit der Spaltenanzahl reden wir glaube ich etwas aneinander vorbei denn ich meinte jetzt nicht die Zahl in der Tabelle selber (also \MC{2}{}text) sondern in der Präambel bei
\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}}
Problem ist, dass meine multicolumns teilweise über 2, 5 oder 3 Spalten gehen. Durch die veränderten Sachen von Dir ist der Text zwar zentriert, aber nur über 3 oder 2 Spalten, obwohl die multicolumn länger ist (war jetzt vermutlich etwas dumm ausgedrückt, aber vielleicht verstehst Du was ich meine. Der Text nimmt nicht die gesamte Breite der multicolumn ein sondern geht davon aus, dass die Spalte schmaler ist, obwohl sie es ersichtlicherweise nicht ist).

Ähm, ja, war jetzt vermutlich nicht gerade verständlich erklärt :-(
Markus

runningsouth
22-07-2009, 14:28
ich geb hier nochmals ein etwas erweitertes MB an, da ich in meiner Diss eben immer noch Fehlermeldungen habe wegen overfull \vbox etc.

\documentclass[12pt]{scrreprt}
\parindent0pt
\usepackage[ngerman]{babel} %evtl. ngerman und babel weg und nur {ngerman} setzen
\usepackage[headsepline,plainheadsepline]{scrpage2}
\usepackage[T1]{fontenc}
\usepackage[applemac]{inputenc}
\usepackage{graphicx} %zum Einfügen von Grafiken
\usepackage{setspace} %um den Zeilenabstand einzustellen
\usepackage{typearea} %Seite einrichten
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption} %Beschriftung von Abbildungen
\areaset{15cm}{22,5cm} %Textbreite und -höhe
\onehalfspacing %1,5-facher Zeilenabstand
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{lscape}
\usepackage{chngcntr} %ändert Nummerierung der Tabellen
\usepackage[square]{natbib}
\usepackage{ulem}
\usepackage{array, ragged2e} %für Zentrierung des Textes in Tabelle/multicolumn

\renewcommand{\thetable}{\arabic{table}}
\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}} %definiert multicolumn
\begin{document}

\begin{landscape}
\newlength{\breite}
\breite13.5mm
\begin{table}[t]
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{text}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}|p{\breite}||p{\bre ite}||}
\hline
&\MC{5}{Aktivität}&\MC{3}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\MC{3}{RL}&\MC{2}{MiniPol}&\MC{2}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&pgRNA Verpackung&DNA-Synthese&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline
\end{tabular}
\end{table}
\end{landscape}
\end{document}
er schmeißt auch im MB Fehler aus, die etwas anders klingen als in der eigentlich Arbeit aber vielleicht weißt Du, was das Problem ist.

Tausend Dank im Voraus,
Markus

mechanicus
22-07-2009, 14:40
Hallo,

ja jetzt weiß ich, was das Problem ist. Ich habe mich verrechnet. :D Ich glaube aufgrund dessen, dass du mal doppelte vertikale Linien und mal einfache genommen hast, die Berechnung so nicht passt.

Allerdings solltest du dir überlegen, solche Excel-Tabellen komplett rauszulassen. Vertikale Linien sind ein Tabu und horizontale sind auch nur dezent zu verwenden.

Das soll jetzt keine Ausrede sein. :p

EDIT: Und anstatt landscape zu missbrauchen, solltest du lieber die von rotating bereitgestellte Umgebung sidewaystable nutzen.

Gruß
Marco

mechanicus
22-07-2009, 14:43
Hallo,

du hast vergessen das Paket calc zu laden:

\documentclass[12pt]{scrreprt}
\parindent0pt
\usepackage[ngerman]{babel} %evtl. ngerman und babel weg und nur {ngerman} setzen
\usepackage[headsepline,plainheadsepline]{scrpage2}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx} %zum Einfügen von Grafiken
\usepackage{setspace} %um den Zeilenabstand einzustellen
\usepackage{typearea} %Seite einrichten
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption} %Beschriftung von Abbildungen
\areaset{15cm}{22,5cm} %Textbreite und -höhe
\onehalfspacing %1,5-facher Zeilenabstand
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{lscape}
\usepackage{chngcntr} %ändert Nummerierung der Tabellen
\usepackage[square]{natbib}
\usepackage{ulem}
\usepackage{array, ragged2e,calc} %für Zentrierung des Textes in Tabelle/multicolumn
\usepackage{rotating}
\renewcommand{\thetable}{\arabic{table}}
\def\MC#1#2{\multicolumn{#1}{|>{\Centering}p{#1\breite-3\tabcolsep}||}{#2}} %definiert multicolumn
\begin{document}

\begin{sidewaystable}
\newlength{\breite}
\breite13.5mm
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{text}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}|p{\breite}||p{\bre ite}||}
\hline
&\MC{5}{Aktivität}&\MC{3}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\MC{3}{RL}&\MC{2}{MiniPol}&\MC{2}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&pgRNA Verpackung&DNA-Synthese&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline
\end{tabular}
\end{sidewaystable}
\end{document}

Die eine Warnung kannst du beheben, wenn du mal in die log-Datei schaust.

Gruß
Marco

runningsouth
22-07-2009, 14:47
ah, gut, wenigstens wäre das geklärt, was das Problem ist. Ähm, nur wie löse ich es? Problem ist, ich brauche die Linien, da die Tabelle größer ist, als ich sie gezeigt habe (insgesamt 17 Zeilen) um es einfach übersichtlicher zu machen. Und doppelte Linien hatte ich zur besseren Abgrenzung von verschiedenen Versuchen (doppelte vertikale Linien) bzw von verschiedenen untersuchten Gruppen (doppelte horizontale Linien).
Und wie müsste die Berechnung aussehen, denn leider bin ich aus deinem \def-Befehl nicht schlau geworden und konnte daher nur copy&paste machen ;-)

Markus

runningsouth
22-07-2009, 14:48
Mist, Deine Antwort kam zu schnell, muss das erst testen :-)

runningsouth
22-07-2009, 14:53
Marco, Du bekommst heute die Heldenpunkte von mir :-) Es scheint jetzt tatsächlich funktioniert zu haben!! Super!! (Ich beschwere mich auch nicht, dass es so lange gedauert hast, bis Du die Lösung hattest;)). Nein, vielen Dank Dir!

Gruß,
Markus

mechanicus
22-07-2009, 15:03
Hallo,

es sollte noch gar nicht passe. Habe die Breite noch nicht angepasst :D

Gruß
Marco

mechanicus
22-07-2009, 15:05
Hallo,

jetzt aber:

\documentclass[12pt]{scrreprt}
\parindent0pt
\usepackage[ngerman]{babel} %evtl. ngerman und babel weg und nur {ngerman} setzen
\usepackage[headsepline,plainheadsepline]{scrpage2}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx} %zum Einfügen von Grafiken
\usepackage{setspace} %um den Zeilenabstand einzustellen
\usepackage{typearea} %Seite einrichten
\usepackage[margin=10pt, font=small, labelfont=bf, format=plain, labelsep=colon]{caption} %Beschriftung von Abbildungen
\areaset{15cm}{22,5cm} %Textbreite und -höhe
\onehalfspacing %1,5-facher Zeilenabstand
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{lscape}
\usepackage{chngcntr} %ändert Nummerierung der Tabellen
\usepackage[square]{natbib}
\usepackage{ulem}
\usepackage{array, ragged2e,calc} %für Zentrierung des Textes in Tabelle/multicolumn
\usepackage{rotating}
\renewcommand{\thetable}{\arabic{table}}

\newcolumntype{C}[1]{>{\Centering}p{#1}}
\begin{document}

\begin{sidewaystable}
\newlength{\breite}
\breite13.5mm
\captionsetup{margin={0pt, 1 cm},singlelinecheck=false}
\caption{text}
\begin{tabular}{|p{\breite}||p{\breite}|p{\breite} |p{\breite}||p{\breite}|p{\breite}||p{\breite}|p{\ breite}||p{\breite}||p{\breite}|p{\breite}||p{\bre ite}||}
\hline
&\multicolumn{5}{C{5\breite+10\tabcolsep}||}{\rule{ \linewidth}{2pt}\newline Aktivität}&\multicolumn{3}{C{3\breite+4\tabcolsep}||}{dieser Text ist viel zu lang und sollte umgebrochen werden}&&&\\\hline
&\multicolumn{3}{C{3\breite+4\tabcolsep}||}{RL}&\multicolumn{2}{C{2\breite+2\tabcolsep}||}{MiniPol }&\multicolumn{2}{C{2\breite}||}{text}&text&1&2&noch mehr text\\\hline\hline
&dGTP&dATP +dNTP&dATP -dNTP&dGTP&dATP&pgRNA Verpackung&DNA-Synthese&&&&\\
\hline\hline
wt &100&100&100&100&100&+++&+++&+++&+++&+++&\\
\hline
\end{tabular}
\end{sidewaystable}
\end{document}

Bin aber immer noch gegen vertikale Linien ;)

Gruß
Marco

runningsouth
22-07-2009, 15:10
ok, aber warum hat es dann bei mir funktioniert??? Muss ich glaube ich jetzt nicht verstehen :-) Ok, trotzdem, damit ich total verwirrt bin (und Dich noch mehr nerve ;)): Beim letzten MB zieht er über die erste multicolumn einen dicken Strich über den Text. Sieht zwar nett aus, aber ist irgendwie fehl am Platz ;-)

Vielen Dank Dir nochmals, aber irgendwie habe ich das Gefühl, dass ich Latex wohl nie wirklich beherrschen werde.
Markus

PS: Die vertikalen Linien machen die doch etwas große Tabelle übersichtlicher, finde ich. Und: Ich habe landscape übrigens nicht missbraucht, so!!!! :-)

mechanicus
22-07-2009, 15:26
Hallo,

die Linie habe ich erzeugt. Ist die Anweisung \rule. Wollte damit was testen.

Falls du mal Beispiele sehen möchtest, die ohne vertikale Linien auskommen:
KLICKE MICH (http://userpage.fu-berlin.de/~latex/Materialien/tabsatz.pdf)



irgendwie habe ich das Gefühl, dass ich Latex wohl nie wirklich beherrschen werde.

Wer kann das schon von sich behaupten. Ich glaube , das Makropaket ist für einen nicht beherrschbar ;)

Mit sidewaysfigure geht es auch :D

Gruß
Marco

runningsouth
22-07-2009, 16:05
Mist, die Tabellen mit nur wenig Linien sehen ja wirklich nicht schlecht aus, muss ich zugeben. Aber das wäre vermutlich auch wieder etwas mehr Arbeit, das alles umzustellen, oder? Also horizontale Linien unter den Überschriften bräuchte ich aber schon :-)

Gruß,
Markus

mechanicus
22-07-2009, 16:16
Mist, die Tabellen mit nur wenig Linien sehen ja wirklich nicht schlecht aus, muss ich zugeben. Aber das wäre vermutlich auch wieder etwas mehr Arbeit, das alles umzustellen, oder? Also horizontale Linien unter den Überschriften bräuchte ich aber schon :-)

Gute Erkenntnis:D

Schicke mir mal per PN eine komplette Tabelle. Dann schaue ich mal rüber :D

Gruß
Marco