Ich habe auf golatex eine Frage gesehen, die ich aus Interesse auch hier stellen möchte, da dort unbeantwortet.

Warum werden zwei minipage-Umgebungen trotz t-Parameter nicht an ihrer Oberkante ausgerichtet? Hier ein Beispiel mit zusätzlichem Rahmen:

Open in writeLaTeX
\documentclass{article} 
\usepackage{blindtext} 
\begin{document} 
  \fbox{\begin{minipage}[t]{0.4\linewidth} 
    \rule{3cm}{4cm}
   \end{minipage}}
   \fbox{\begin{minipage}[t]{0.4\linewidth} 
      \blindtext 
   \end{minipage}}
\end{document}

Wenn man am Beginn des Inhalts der jeweiligen minipage \vspace{0pt} schreibt, geht es. (Teilfrage: warum?)

gefragt 30 Jul '14, 17:57

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch sehr willkommen! Ich formuliere jetzt mal eine erste Antwort.

(30 Jul '14, 17:58) Felix

Ein häufiges Missverständnis dessen, was t bedeutet :)

(30 Jul '14, 18:14) cgnieder
1
(30 Jul '14, 18:16) cgnieder

@Clemens Dort ist nicht der Grund genannt, und mir ging es hier um die Erklärung der Ursache. Ist vielleicht einen Querverweis wert, oder man führt es zusammen (wobei bei der anderen Frage schon recht viel steht, Zusammenwerfen wird vllt. weniger übersichtlich, als ein fortführender Hinweis-Link). Im Prinzip könnte man das als Warum-Folgefrage betrachten.

Wollte nicht die Zeit von jemandem verschwenden, daher auch die Archiv-Bemerkung, dass ich schon was schreiben will. Wobei ich toll finde, das Ijon doch was geschrieben hat, was auch die Ursache klar benennt.

(30 Jul '14, 18:19) Felix

Wenn man noch etwas Text hinzufügt, sieht man genauer, was passiert:

Open in writeLaTeX
\documentclass{article} 
\usepackage{blindtext} 
\begin{document} 
  \fbox{\begin{minipage}[t]{0.4\linewidth} 
    \rule{3cm}{4cm}\Huge Text\\mehr Text
   \end{minipage}}
   \fbox{\begin{minipage}[t]{0.4\linewidth} 
      \blindtext 
   \end{minipage}}
\end{document}

LaTeX richtet an Grundlinien aus. t für top bedeutet, erste Zeile. So wird an der Grundlinie der obersten Zeile ausgerichtet, nicht an der Oberkante des Inhalts ausgerichtet. Es "passt" also eigentlich, nur ist die Zeilenhöhe unterschiedlich.

Als Workaround funktioniert, eine dummy-Zeile als erste Zeile einzufügen, sei es Text oder eine Leerzeile durch \mbox{}\\ a Beginn der minimales, oder eben das \vspace{0pt} (ohne weiteren Weißraum).

Open in writeLaTeX
\documentclass{article} 
\usepackage{blindtext} 
\begin{document} 
  \fbox{\begin{minipage}[t]{0.4\linewidth}
      \vspace{0pt}\fbox{\rule{3cm}{4cm}}
   \end{minipage} }
   \fbox{\begin{minipage}[t]{0.4\linewidth} 
      \vspace{0pt}\blindtext 
   \end{minipage} }
\end{document}

(Gern auch mit XXXXX oder \mbox{}\\ hier testen, zum Sehen und Vergleichen.)

Permanenter link

beantwortet 30 Jul '14, 18:13

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

Option t bedeutet nicht, dass mit der Oberkante ausgerichtet wird, sondern dass die oberste (oder eigentlich die erste) Grundlinie innerhalb der minipage auf der aktuellen Grundlinie ausgerichtet wird. Da bei eine Grafik oder eine \rule (bei der \rule kann man das allerdings mit dem optionalen Argument ändern) komplett auf der Grundlinie liegt, entsteht der Eindruck der nicht korrekten Ausrichtung. Tatsächlich ist diese jedoch absolut korrekt. Mit der \vspace-Anweisung am Anfang der minipage wird eine zusätzliche Zeile eingefügt, deren Grundlinie dann die oberste oder erste Grundlinie ist und damit die Ausrichtung bestimmt.

Eine Alternative zu irgendwelchen \vspace- oder auch \raisebox-Tricks bietet übrigens ds Paket adjustbox. Die angedeuteten \raisebox-Tricks veranschaulichen die Beispiele aus den wichtigen Hinweisen für das Grafik-Forum auf goLaTeX:

Open in writeLaTeX
\documentclass[parskip=full-]{scrartcl}
\usepackage[demo]{graphicx}
\begin{document}

\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}%
\hrulefill
\parbox[b]{.5\textwidth}{\raggedright Bild auf der Grundlinie,\\Text unten ausgerichtet}

\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}%
\hrulefill
\parbox[t]{.5\textwidth}{\raggedright Bild auf der Grundlinie,\\Text oben ausgerichtet}

\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}%
\hrulefill
\parbox[c]{.5\textwidth}{\raggedright Bild auf der Grundlinie,\\ Text zentriert}

\raisebox{-\totalheight}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[b]{.5\textwidth}{\raggedright Bild unter der Grundlinie,\\ Text unten ausgerichtet}

\raisebox{-\totalheight}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[t]{.5\textwidth}{\raggedright Bild unter der Grundlinie,\\ Text oben ausgerichtet}

\raisebox{-\totalheight}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[c]{.5\textwidth}{\raggedright Bild unter der Grundlinie,\\ Text zentriert}

\raisebox{\dimexpr\ht\strutbox-\totalheight\relax}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[b]{.5\textwidth}{\raggedright Bild oben ausgerichtet,\\ Text unten ausgerichtet}

\raisebox{\dimexpr\ht\strutbox-\totalheight\relax}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[t]{.5\textwidth}{\raggedright Bild oben ausgerichtet,\\ Text oben ausgerichtet}

\raisebox{\dimexpr\ht\strutbox-\totalheight\relax}{\includegraphics[height=3\baselineskip,width=.4\textwidth]{demo}}%
\hrulefill
\parbox[c]{.5\textwidth}{\raggedright Bild oben ausgerichtet,\\ Text zentriert}

\end{document}
Permanenter link

beantwortet 30 Jul '14, 18:18

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

Danke, das ist ausführlich und sehr gut! Mit meiner (hoffentlich auch richtigen) Erklärung hat man nun mehrere Erläuterungen zur Auswahl, man versteht vllt. das eine oder andere besser.

(30 Jul '14, 18:21) Felix
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×117
×68
×23

gestellte Frage: 30 Jul '14, 17:57

Frage wurde gesehen: 21,792 Mal

zuletzt geändert: 30 Jul '14, 18:26