PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : minipage vs. textwidth



fatsack
22-07-2009, 20:04
Hallo,

ich versuche eine Art tabellarische Übersicht (wie bspw. beim Lebenslauf) mit minipages zu erstellen. Dabei will ich die gesamte Breite der Seite ausnutzen, d.h. wenn die linke minipage die Breite l hat, dann soll die rechte minipage die Breite r = Textbreite - l besitzen.

Mein Code sieht folgendermaßen aus:


\documentclass[11pt,a4paper,draft]{scrartcl}
\usepackage[scale=0.8]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\newlength{\leftside}
\setlength{\leftside}{.175\textwidth}
\newlength{\rightside}
\setlength{\rightside}{\textwidth}
\addtolength{\rightside}{-\leftside}

\begin{document}

\setlength{\parindent}{0pt}
\hspace*{\leftside}Rechts 0\\
\hspace*{\leftside}\rule[3mm]{\rightside}{.25ex}

\begin{minipage}[c]{\leftside}
Links 1
\end{minipage}
\begin{minipage}[c]{\rightside}
\raggedright
Rechts 1
\end{minipage}\\
\begin{minipage}[c]{\leftside}
Links 2
\end{minipage}
\begin{minipage}[c]{\rightside}
\raggedright
Rechts 2
\end{minipage}

\end{document}


Das Problem ist jetzt, dass die beiden minipages Overfull hbox Warnungen erzeugen obwohl ich ja die Breiten explizit so definiert habe, dass sie gerade der Textbreite entsprechen. Scheinbar setzt LaTeX die Größe der linken minipage falsch oder LaTeX setzt einen gewissen Pufferraum zwischen die linke und die rechte minipage. Ich vermute mal, dass die rechte minipage dadurch ein Stück nach rechts verschoben wird und die Overfull hbox Warnung erzeugt.

Man sieht diesen Fehler auch daran, dass zwar "Rechts 1" und "Rechts 2" schön aneinander ausgerichtet untereinander stehen; allerdings steht der Text "Rechts 0" ein ganzes Stück weiter links als "Rechts 1" und "Rechts 2".

Die Ausrichtung von "Rechts 0" mit "Rechts 1" und "Rechts 2" bekomme ich dadurch in den Griff, dass ich auch die Überschrift, also "Rechts 0" + Linie mit minipages erzeuge:


\begin{minipage}[c]{\leftside}
~
\end{minipage}
\begin{minipage}[c]{\rightside}
Rechts 0\\
\rule[3mm]{\rightside}{.25ex}
\end{minipage}\\

Genau wie bei den minipages im obigen Minimalbeispiel wirft mir das halt gleich die nächste Overfull hbox Warnung - ist ja das gleiche Problem.

Danke für die Hilfe

voss
22-07-2009, 20:29
ich versuche eine Art tabellarische Übersicht (wie bspw. beim Lebenslauf) mit minipages zu erstellen. Dabei will ich die gesamte Breite der Seite ausnutzen, d.h. wenn die linke minipage die Breite l hat, dann soll die rechte minipage die Breite r = Textbreite - l besitzen.

Mein Code sieht folgendermaßen aus:


\documentclass[11pt,a4paper,draft]{scrartcl}
\usepackage[scale=0.8]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\newlength{\leftside}
\setlength{\leftside}{.175\textwidth}
\newlength{\rightside}
\setlength{\rightside}{\textwidth}
\addtolength{\rightside}{-\leftside}

\begin{document}

\setlength{\parindent}{0pt}
\hspace*{\leftside}Rechts 0\\
\hspace*{\leftside}\rule[3mm]{\rightside}{.25ex}

\begin{minipage}[c]{\leftside}
Links 1
\end{minipage}%
\begin{minipage}[c]{\rightside}
\raggedright
Rechts 1
\end{minipage}\\
\begin{minipage}[c]{\leftside}
Links 2
\end{minipage}%
\begin{minipage}[c]{\rightside}
\raggedright
Rechts 2
\end{minipage}

\end{document}


Das Problem ist jetzt, dass die beiden minipages Overfull hbox Warnungen erzeugen obwohl ich ja die Breiten explizit so definiert habe, dass sie gerade der Textbreite entsprechen. Scheinbar setzt LaTeX die Größe der linken minipage falsch oder LaTeX setzt einen gewissen Pufferraum zwischen die linke und die rechte minipage. Ich vermute mal, dass die rechte minipage dadurch ein Stück nach rechts verschoben wird und die Overfull hbox Warnung erzeugt.


du hast die Leerzeichen zwischen den minipages nicht beseitigt, siehe oben!

Herbert

fatsack
22-07-2009, 20:38
Vielen Dank es funktioniert ...

... aber ich versteh nicht warum :D
Das %-Symbol dient doch zum Einleiten von Kommentaren. Wieso kann ich dadurch dann den Zwischenraum zwischen den minipages eleminieren? Kann man das irgendwo nachlesen?

voss
22-07-2009, 21:07
Vielen Dank es funktioniert ...

... aber ich versteh nicht warum :D
Das %-Symbol dient doch zum Einleiten von Kommentaren. Wieso kann ich dadurch dann den Zwischenraum zwischen den minipages eleminieren? Kann man das irgendwo nachlesen?

Ein Zeilenende ist dasselbe wie ein Leerzeichen. Durch % beginnt die
folgende Zeile aber direkt hinter der vorhergehenden. Leerzeichen am Zeilenanfang
werden dabei grundsätzlich ignoriert.

Herbert

fatsack
23-07-2009, 22:24
Vielen Dank für die Erklärung voss.

Ein letztes Problemchen habe ich jetzt noch: bei mehrzeiligen minipages stimmt der Zeilenabstand zur nächsten - d.h. zur darunterliegenden - minipage nicht mehr (der Zeilenabstand innerhalb der minipages ist aber weiterhin korrekt und auch der Zeilenabstand zur darüberliegenden minipage ist korrekt sofern die darüberliegende minipage nicht auch mehrzeilig ist).



\documentclass[11pt,a4paper,draft]{scrartcl}
\usepackage[scale=0.8]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\newlength{\leftside}
\setlength{\leftside}{.175\textwidth}
\newlength{\rightside}
\setlength{\rightside}{\textwidth}
\addtolength{\rightside}{-\leftside}

\begin{document}

\setlength{\parindent}{0pt}
\hspace*{\leftside}Rechts 0\\
\hspace*{\leftside}\rule[3mm]{\rightside}{.25ex}

\begin{minipage}[t]{\leftside}
Links 1
\end{minipage}%
\begin{minipage}[t]{\rightside}
\raggedright
Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1
Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1
Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1 Rechts 1
\end{minipage}\\
\begin{minipage}[t]{\leftside}
Links 2
\end{minipage}%
\begin{minipage}[t]{\rightside}
\raggedright
Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2
Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2
Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2
Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2 Rechts 2
\end{minipage}
\begin{minipage}[t]{\leftside}
Links 3
\end{minipage}%
\begin{minipage}[t]{\rightside}
\raggedright
Rechts 3
\end{minipage}\\
\begin{minipage}[t]{\leftside}
Links 4
\end{minipage}%
\begin{minipage}[t]{\rightside}
\raggedright
Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4
Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4
Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4 Rechts 4
\end{minipage}

\end{document}


Wäre toll, wenn ihr mir dabei nochmal helfen könntet.

rais
24-07-2009, 18:14
Moin moin,
warum nimmst Du hier nicht einfach eine Tabelle?

MfG

fatsack
24-07-2009, 20:41
Hi,

das liegt zum einen daran, dass es mich einfach interessiert, warum der Zeilenabstand nach mehrzeiligen minipages nicht mehr stimmt (und natürlich wie man das Problem lösen kann) und zum anderen liegt's daran, dass ich's ursprünglich mit Tabellen versucht (und zu meiner Schande nicht hinbekommen) habe.

Zunächst hatte ich versucht alles mit einer Tabelle zu machen, also sowohl die Überschrift mit der Linie darunter in der erstem Zeile in der rechten Spalte und darunter dann eben die eigentlichen Inhalte bestehend aus einem linken und einem rechten Textteil. Allerdings weis ich nicht, wie ich bei Tabellen die horizontale Linie formatieren kann, so dass sie eine bestimmte Farbe und Dicke hat.

Aus diesem Grund habe ich dann die Überschrift mit der Linie darunter wie in den obigen Codebeispielen erstellt (mit \hspace*{\leftside}) und nur die Inhalte mit Hilfe einer Tabelle. Dabei bekomme ich dann aber eine Overfull hbox Warnung und die Einträge der rechten Spalte stehen aus diesem Grund nicht mehr unter der Überschrift (bei dem Minimalbeispiel unten sind die Einträge R1 und R2 rechts von R0; wenn ich p{\leftside} durch X ersetze verschwindet zwar die Overfull hbox Warnung, R1 und R2 stehen dann aber links von R0; wenn ich p{\rightside} durch X ersetze verschwindet die Overfullhbox Warnung zwar ebenfalls, dafür stehen R1 und R2 wieder rechts von R0).



\documentclass[11pt,a4paper,draft]{scrartcl}
\usepackage[scale=0.8]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\usepackage{color}

\newlength{\leftside}
\setlength{\leftside}{.175\textwidth}
\newlength{\rightside}
\setlength{\rightside}{\textwidth}
\addtolength{\rightside}{-\leftside}

\definecolor{grau}{rgb}{0.65,0.65,0.65}
\definecolor{schwarz}{rgb}{0,0,0}

\begin{document}

\setlength{\parindent}{0pt}
\hspace*{\leftside}Rechts 0\\
\hspace*{\leftside}\color{grau}\rule[3mm]{\rightside}{.25ex}
\color{schwarz}

\begin{tabularx}{\textwidth}{p{\leftside}p{\rights ide}}
Links 1&Rechts 1\\
Links 2&Rechts 2
\end{tabularx}

\end{document}


Die Überschrift mit der Linie mal ganz außen vor gelassen ist diese Situation (Tabelle über die gesamte Breite mit zwei fest vorgegebenen Spalten) schon wieder so ein Paradebeispiel wo ich langsam echt vom Glauben abfalle. Was ist bitte an


\begin{tabularx}{\textwidth}{p{\leftside}p{\rights ide}}
Links 1&Rechts 1\\
Links 2&Rechts 2
\end{tabularx}

so verkehrt? \leftside plus \rightside ergibt bei mir exakt \textwidth. Wieso klappt dann die obige Definition nicht ohne Overfull hbox Warnung? Scheinbar hat die Tabelle noch irgendeinen Innen- oder Außenabstand und wird deswegen zu groß. Aber wieso klappt's nichtmal, dass der Text der rechten Spalte unter der Überschrift steht, wenn ich


\begin{tabularx}{\textwidth}{p{\leftside}X}
Links 1&Rechts 1\\
Links 2&Rechts 2
\end{tabularx}

angebe? Die linke Spalte sollte jetzt wohl exakt so breit sein, wie \hspace*{\leftside} und der Text in der rechten Spalte demnach unter der Überschrift. Aber Pustekuchen... .


Ich denke die einzig gangbare Vorgehensweise ist es, wenn ich tatsächlich auch die Überschrift mit Hilfe der Tabelle erstelle, d.h. die horizontale Linie so formatiert bekomme, wie ich mir das vorstelle (im Moment hieße das eh nur Dicke und Farbe).

voss
24-07-2009, 21:16
Die Überschrift mit der Linie mal ganz außen vor gelassen ist diese Situation (Tabelle über die gesamte Breite mit zwei fest vorgegebenen Spalten) schon wieder so ein Paradebeispiel wo ich langsam echt vom Glauben abfalle. Was ist bitte an


\begin{tabularx}{\textwidth}{p{\leftside}p{\rights ide}}
Links 1&Rechts 1\\
Links 2&Rechts 2
\end{tabularx}

so verkehrt? \leftside plus \rightside ergibt bei mir exakt \textwidth. Wieso klappt dann die obige Definition nicht ohne Overfull hbox Warnung? Scheinbar hat die Tabelle noch irgendeinen Innen- oder Außenabstand und wird deswegen zu groß. Aber wieso klappt's nichtmal, dass der Text der rechten Spalte unter der Überschrift steht, wenn ich


dir müsste doch mal auffallen, dass zwischen Tabellenspalten ein Freiraum ist.
Den gibt es auch noch links und rechts von der Tabelle. Insgesamt pro Spalte
2\tabcolsep


\begin{tabularx}{\textwidth}{@{}p{\leftside}@{}p{\ rightside}@{}}

ist dann erst exakt, wobei hier eine tabularx witzlos ist, da reicht eine tabular.

Herbert