PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabelle zu breit



canada-cat
27-05-2007, 01:49
Hallo!

Wie so viele andere habe ich auch das Problem, dass meine Tabelle rechts über den Seitenrand hinausragt oder häßlich aussieht, wenn ich manuell dran rumformatiere.
Ich hab mich nun schon über Stunden hier durchs Forum gesucht und verschiedene Lösungen ausprobiert, u.a. auch tabularx, aber bisher klappt es immernoch nicht :confused:

Hier mein Minimalbeispiel, in dem ich allerdings die Original-Spaltennamen drin gelassen habe, damit ihr seht, wie lang die Biester sind. Eigentlich möchte ich einfach nur eine Tabelle mit möglichst gleich hohen und gleich breiten Zellen, daher soll LaTex die Inhalte wo nötig umbrechen. Mit {|c|usw.|p{2cm}} bricht er mir zwar den Text in der letzten Zelle brav um, aber richtet das Ganze dann linksbündig, nicht mehr zentriert aus. Das Problem hatte auch schon jemand anderes hier im Forum und leider funzt die dort angegebene Lösung, die ihm geholfen hat, bei mir nicht :(

\documentclass{scrartcl}
\begin{document}
\begin{table}[h]
\begin{tabular}{|p{2cm}|p{2cm}|c|c|c|p{2cm}|}
\hline
\multicolumn{6}{|c|}{Kulturdimensionen}\\ \hline\hline
& \textbf{Macht\-distanz} & \textbf{Un\-sicher\-heits\-verm.} & \textbf{Ind./Koll.} & \textbf{Mas./Fem.} & \textbf{Lang-/Kurzfrist\-orient.} \\ \hline
USA & 1 & 1 & 1 & 1 & 1 \\ \hline
Kanada & 1 & 1 & 1 & 1 & 1 \\ \hline
GB & 1 & 1 & 1 & 1 & 1 \\ \hline
Irland & 1 & 1 & 1 & 1 & 1 \\ \hline
Australien & 1 & 1 & 1 & 1 & 1 \\ \hline
Neuseeland & 1 & 1 & 1 & 1 & 1 \\ \hline
\O Anglo & 1 & 1 & 1 & 1 & 1 \\ \hline
Deutschland & 1 & 1 & 1 & 1 & 1 \\ \hline
\end{tabular}
\caption{Kulturdimensionen nach Hofstede}
\label{tab:Hof}
\end{table}
\end{document}

Ich hoffe, ihr könnt mir helfen. Vielen Dank schonmal!

Janine

rais
27-05-2007, 04:13
Moin Janine,


Ich hab mich nun schon über Stunden hier durchs Forum gesucht und verschiedene Lösungen ausprobiert, u.a. auch tabularx, aber bisher klappt es immernoch nicht :confused:

Afaik darf \multicolumn keine X-Spalten von tabularx umspannen.


Hier mein Minimalbeispiel, in dem ich allerdings die Original-Spaltennamen drin gelassen habe, damit ihr seht, wie lang die Biester sind. Eigentlich möchte ich einfach nur eine Tabelle mit möglichst gleich hohen und gleich breiten Zellen, daher soll LaTex die Inhalte wo nötig umbrechen. Mit {|c|usw.|p{2cm}} bricht er mir zwar den Text in der letzten Zelle brav um, aber richtet das Ganze dann linksbündig, nicht mehr zentriert aus.
Zentrierte Spalten mit fester Breite also...
Hier mal ein Ansatz über ein (hoffentlich) nachvollziehbares Makro:


\documentclass[ngerman]{scrartcl}
\usepackage{array,babel,capt-of}
\usepackage[utf8]{inputenc}%<--`utf8´ ist ggf. durch das von Deinem Editor verwendete Encoding zu ersetzen (latin1, latin9, ansinew, applemac -- oder was weiß ich)
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}%<--neuer Spaltentyp: zentriert mit anzugebener Breite
\newlength{\mytabw}%f. gesamte Breite
\newlength{\mytabt}%f. \calctabw, temp.
\newcommand\calctabw[2][\empty]{%
\ifx#1\empty\setlength{\mytabt}{0pt}\else
\setlength{\mytabt}{#1\arrayrulewidth} %Anzahl vert. Linien
\fi
\addtolength{\mytabt}{#2\tabcolsep} %Anzahl Spalten x Spaltenseparator
\addtolength{\mytabt}{#2\tabcolsep} %2x
\setlength{\mytabw}{\linewidth} %Textbreite
\addtolength{\mytabw}{-\mytabt} %- Lücken = zur Verfügung stehende Breite
}%\calctabw[Anzahl vertikaler Linien]{Anzahl Spalten}
\begin{document}
%\begin{table}[h]<--erst gleiten lassen, um dann `hier´ verlangen zu wollen? Siehe dazu auch l2picfaq und suche nach "Tabelle"
\begin{center}
\calctabw[7]{6}%
\rule{\linewidth}{1pt}%so breit soll die Tabelle insgesamt werden

\rule{\mytabw}{1pt}%so viel Platz steht für die Spalten zur Verfügung

\begin{tabular}{*{6}{|C{0.1666\mytabw}}|}
\hline
\multicolumn{6}{|c|}{Kulturdimensionen}\\ \hline\hline
\textbf{Staat} & \textbf{Macht\-distanz} & \textbf{Un\-sicher\-heits\-verm.} & \textbf{Ind./Koll.} & \textbf{Mas./Fem.} & \textbf{Lang-/Kurzfrist\-orient.} \\ \hline
USA & 1 & 1 & 1 & 1 & 1 \\ \hline
Kanada & 1 & 1 & 1 & 1 & 1 \\ \hline
GB & 1 & 1 & 1 & 1 & 1 \\ \hline
Irland & 1 & 1 & 1 & 1 & 1 \\ \hline
Australien & 1 & 1 & 1 & 1 & 1 \\ \hline
Neuseeland & 1 & 1 & 1 & 1 & 1 \\ \hline
\O Anglo & 1 & 1 & 1 & 1 & 1 \\ \hline
Deutschland & 1 & 1 & 1 & 1 & 1 \\ \hline
\end{tabular}
\captionof{table}{Kulturdimensionen nach Hofstede}
\label{tab:Hof}
\end{center}
\end{document}



Das Problem hatte auch schon jemand anderes hier im Forum und leider funzt die dort angegebene Lösung, die ihm geholfen hat, bei mir nicht :(

in dem Fall hilft eher ein auf die dort (wo auch immer) angegebene Lösung aufbauendes Minimalbeispiel... oder ein Eintrag in dem entsprechenden Thread `Heh, so klappt dat bei mir nich´ (oder so ähnlich) -- könnte sich ja auch n Typo da eingeschlichen haben;)

MfG,

bischi
27-05-2007, 08:57
Schlimmstenfalls kannst du auch ne resizebox oder ne scalebox um die Tabelle rum machen.

MfG Bischi

cookie170
27-05-2007, 11:43
Hallo Janine,

wenn ich Dich richtig verstehe, liegt die Lösung in der Verwendung des Paktes array:


\documentclass{scrartcl}
\usepackage{array}
\newcolumntype{V}{m{0.15\linewidth}}
\begin{document}

\begin{table}[h]
\begin{tabular}{|c|c|c|c|c|c|}
\hline
\multicolumn{6}{|c|}{Kulturdimensionen}\\ \hline\hline
& \multicolumn{1}{|V}{\textbf{Macht\-distanz}} & \multicolumn{1}{|V}{\textbf{Un\-sicher\-heits\-verm.}} & \multicolumn{1}{|V}{\textbf{Ind./Koll.}} & \multicolumn{1}{|V}{\textbf{Mas./Fem.}} & \multicolumn{1}{|V|}{\textbf{Lang-/Kurzfrist\-orient.}} \\ \hline
USA & 1 & 1 & 1 & 1 & 1 \\ \hline
Kanada & 1 & 1 & 1 & 1 & 1 \\ \hline
GB & 1 & 1 & 1 & 1 & 1 \\ \hline
Irland & 1 & 1 & 1 & 1 & 1 \\ \hline
Australien & 1 & 1 & 1 & 1 & 1 \\ \hline
Neuseeland & 1 & 1 & 1 & 1 & 1 \\ \hline
\O Anglo & 1 & 1 & 1 & 1 & 1 \\ \hline
Deutschland & 1 & 1 & 1 & 1 & 1 \\ \hline
\end{tabular}
\caption{Kulturdimensionen nach Hofstede}
\label{tab:Hof}
\end{table}
\end{document}

Derartige Lösungen sind sehr gut aufbereitet in dem Buch von Elke und Michael Niedermair enthalten. Das hat mir schon viel googeln erspart.

Gruß,
Alexander

babelfish
27-05-2007, 15:20
Für Tabellen ists das einfachste du schreibst sie generell in excel, wo du auch zeilenbreite und rahmen festlegst.
Über ein kleines wunderbares plug-in(kostet nix ;-) ) von www.jam-software.de kannst du dir die tabelle in ein extra tex-file konvertieren lassen.
Einbindung mittel:
\begin{table}
\centering%
\label{tab:blabla}
\caption{dfdfdgs}
\input{beispiel}
\end{table}

Hat den Riesenvorteil, dass man bei Änderungen von Berechnungen oder Werten dies nur in Excel machen muss. Dann einfach neu über dass plug-in mit selben Namen konvertieren.

rais
27-05-2007, 15:38
Hallo Alexander,
spätestens mit array v2.4b (liegt u.A. texlive`07 bei) passt es so nicht: die erste \multicolumn{1}{|V}{..} sorgt für eine Verdopplung der ihr links liegenden vertikalen Linie, die anderen innen liegenden Trennlinien in dieser Reihe werden entsprechend um Linienbreite nach rechts verschoben -> jeweils \multicolumn{1}{V|} {..} sollte passen.
Apropos passen: so ganz passt es so mit der Textbreite nicht, 5 x 0.15\linewidth kommt zwar nur auf 3/4 der Textbreite, aber dann ist da noch die erste Spalte -- und die ganzen zusätzlichen Abstände... deshalb hatte ich ja gerade so ein Makro gebastelt, damit man sich um so etwas nicht mehr selbst zu kümmern braucht.:D
BTW: wenn Du Deinem Spaltentyp V entsprechend >{\centering\arraybackslash} mitgibst, dann kannst Du mit \begin{tabular}{|c|*{5}{V|}} sogar die ganzen \multicolumn{1}{..}{..} einsparen -- wieder ein Problem weniger ;)

OTOH: Für eine einzelne Tabelle ist es eh gehupft wie gesprungen, bei mehreren hingegen überlegt man sich dann vllt doch, ob man solche Berechnungen nicht lieber dem Kasten vor seiner Nase überlässt;-)


Huch, da hat sich doch jemand dazwischengemogelt:D
@babelfish: wozu der Umstand für eine so vergleichsweise simple Tabelle?
Dann wäre noch die Frage, ob Excel denn ebenso frei verfügbar ist?
Und gibt es bei Excel und LaTeX gleiche Zeichensätze?
BTW: Du solltest Dir angewöhnen, erst die \caption zu setzen, dann das \label, sonst verweist ein dazugehöriger \ref wohlmöglich ins Nirvana...

PS) dabei benutze ich am liebsten booktabs in meinen Tabellen...hab' mit vertikalen Trennlinien also eigentlich gar nix am Hut -- deshalb ja auch der optionale Parameter für die Anzahl dieser Trennlinien in meinem Makro, nicht umsonst hab' ich den mit \empty vorbelegt :D

MfG,

babelfish
27-05-2007, 16:15
@rais:
=>so ein plug-in existiert glaube ich auch für die openoffice variante(müsste man googeln)
=>es hindert einen ja keiner daran im tabellenkopf z.B.: "Temperatur T [ $\circ$ ]"
oder ähnliches zu schreiben.....kannst also getrost alle latexsonderzeichen einbauen...wird ja wie gesagt nach tex konvertiert....ist auch sehr harmlos(ein mausklick)
auch für kleine tabellen sehr nützlich, da eben die zeilenbreite so vorher bestimmbar ist!......nutze latex schon ne ganze weile, aber tabellen fand ich immer nervig

canada-cat
01-06-2007, 14:24
Hallo!

Erstmal sorry, dass ich mich erst heute wieder melde. Ich lag mit ner Grippe im Bett und musste deshalb erstmal Tabelle Tabelle sein lassen. Vielen Dank für eure zahlreichen und schnellen Vorschläge!

@Rainer: Dein Beispiel funzt bisher am besten. Hab es auch schon bei mir eingestrickt und sogar meine Fußnoten unterbringen können, allerdings stört mich die dicke schwarze Linie über der obersten Tabellenzeile "Kulturdimensionen". Bekomme ich die noch irgendwie weg? :o

Liebe Grüße

Janine

rais
02-06-2007, 09:46
Hallo Janine,
stell mal ein `%´ vor die beiden \rule{..}{..}-Befehle, die sind eh nur zur Veranschaulichung der entsprechenden Breiten drin... oder was versteh' ich nicht?
MfG,

canada-cat
02-06-2007, 10:13
Guten Morgen, Rainer!

Jetzt sind die Striche weg und es ist immernoch alles schön zentriert und nur so breit wie der Text.

Vielen, vielen Dank!:D

Janine

DA-Knecht
08-10-2008, 18:54
Schlimmstenfalls kannst du auch ne resizebox oder ne scalebox um die Tabelle rum machen.

MfG Bischi

Hi! Habe das gleiche Problem, rechts ragen die Zeilen über das Blattende hinaus.

Habe mit Excel2Latex den Latexcode generiert.



\begin{tabular}{r|l}

{\bf Variable} & {\bf Berechnung} \\
\hline \hline
Tobin's Q & =(Total Assets - Shareholder's Equity + Market Value Equity)/Total Assets \\

& =(data89 - data135 + WC08001)/data89 \\

& \\

ROA & =Operating Income before depreciation/Total Assets \\

(Bhagat Bolton (2008)) & =data14/data89 \\

{\bf } & {\bf } \\

Cash Holdings 1 & =Cash and Short-term investments/Sales \\

& =data60/data1 \\

& \\

Cash Holdings 2 & =(Cash and Short-term investments) / (Total Assets - Cash and Marketable Securities) \\

& =(data60/(data89 - data60) \\

& \\

Ownership Concentration & =Summe der quadrierten Anteile, die mehr als 5\% des stimmberechtigen Kapitals umfassen \\

& \\

Block ownership & =Summe der Anteile, die mehr als 5\% des stimmberechtigen Kapitals umfassen \\

& \\

Mandates Chairman & =Anzahl aller weiteren Kontrollmandate des Vorsitzenden bzw. der Vorsitzenden \\

& \\

Ratio Outside Directors & =Anzahl Outsider im Aufsichtsrat / Gesamtgröße Aufsichtsrat \\

& \\

Size Supervisory Board & =Gesamtgröße Aufsichtsrat \\

& \\

Assets & =ln(Total Assets) \\

& =ln(data89) \\

\end{tabular}

Wie kann ich möglichst einfach die Tabelle an meinen vorgegebenen Rand anpassen? Schriftgröße ändern?

Vielen Dank für eure Hilfe!

voss
08-10-2008, 18:56
Hi! Habe das gleiche Problem, rechts ragen die Zeilen über das Blattende hinaus.

Wie kann ich möglichst einfach die Tabelle an meinen vorgegebenen Rand anpassen? Schriftgröße ändern?




\noindent\resizebox{\linewidth}{!}{%
... deine Tabelle ...%
}


Herbert

mechanicus
08-10-2008, 18:59
Hallo,

am einfachsten ist, du änderst einfach den Spaltentyp der zweiten Spalte, der einen Zeilenumbruch zulässt. Also p{Breite}. Aber solche Tabellen kannst doch direkt in Latex erstellen. dann bekommst wenigstens nicht so einen Code.
Hier (http://userpage.fu-berlin.de/~latex/Materialien/tabsatz.pdf) noch ein paar Tipps dazu.

Gruß
Marco

René Geppert
08-10-2008, 19:20
hier der link nochmal korrekt: http://userpage.fu-berlin.de/~latex/Materialien/tabsatz.pdf
für alle, die nicht gern nach fehlern suchen xD

DA-Knecht
08-10-2008, 19:24
\noindent\resizebox{\linewidth}{!}{%
... deine Tabelle ...%
}


Herbert

Super! :) Damit hat es direkt geklappt. Ich nehmen an, dass das {!} die variable Spaltenbreite festlegt?

DA-Knecht
08-10-2008, 19:27
Hallo,

am einfachsten ist, du änderst einfach den Spaltentyp der zweiten Spalte, der einen Zeilenumbruch zulässt. Also p{Breite}. Aber solche Tabellen kannst doch direkt in Latex erstellen. dann bekommst wenigstens nicht so einen Code.
Hier (http://http://userpage.fu-berlin.de/~latex/Materialien/tabsatz.pdf) noch ein paar Tipps dazu.

Gruß
Marco

Einen Zeilenumbruch möchte ich bei dieser Tabelle nicht haben.
Dennoch interessehalber: kann ich den Befehl p{Breite} einfach so einfügen oder brauche ich dazu ein Package? Wo genau füge ich den ein?

René Geppert
08-10-2008, 19:34
den beitrag in seiner gänze lesen, hätte dir die antwort schon gebracht
in dem link steht bereits auf folie 4, dass es sich dabei um einen spaltentyp handelt (und dieser wird bereits im ersten beitrag dieses threads – quasi selbsterklärend – verwendet)

DA-Knecht
09-10-2008, 15:53
Mittlerweile habe ich leider wieder ein Problem.
Beim Kompilieren erscheint immer folgender Fehler:

"Latex error: not in outer par mode."

Hier der Code meiner Tabelle:


\noindent\resizebox{\linewidth}{!}{%
\begin{table}

\footnotesize

\caption{Variablendefinitionen}
%\centering
\begin{tabular}{rl}

Tabelleninhalt

\end{tabular}

\end{table}
}

Damit klappt es nicht. "Verträgt" sich der \noindent nicht mit dem tabular?

DA-Knecht
09-10-2008, 17:00
So, laut Boardregeln soll man ja etwaige selbst gefundene Lösungen nicht vorenthalten. Dem will ich mich nicht verweigern.

Die Fehlermeldung Not in outer par mode wird hier erklärt. (http://www.tex.ac.uk/cgi-bin/texfaq2html?label=ouparmd)

Meine Lösung:

\begin{table}

\caption{Variablendefinitionen}
\label{Kapitel3_Variablentabelle}
\noindent\resizebox{\linewidth}{!}{
\begin{tabular}{rl}

Tabelleninhalt

\end{tabular}
}
\end{table}

Damit funktioniert es.