PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objekte (Texte, Grafiken, etc) nebeneinander setzen



jonathan
03-05-2011, 01:31
Hey,

wie Ihr seht, habe ich mal wieder ein paar Fragen zur Verwendung von Latex. ;-)

Ich möchte in einem "normalen" einspaltigen Layout zwei Objekte nebeneinander anordnen (mit HTML/CSS war das so einfach...). Diese Objekte können Grafiken, Texte oder Tabellen sein. Ich habe den ganzen Abend rum probiert; mit minipage, wrapfigure... Aber das gewünschte Ergebnis kam leider nicht bei raus (zumal Gleitumgebungen in minipage eh nicht erlaubt sind).

Die Umgebungen sollten rechts und links mit dem normalen Textfluss abschließen UND der nachfolgende Text soll erst nach der (nach unten) größeren Umgebung anfangen. Ich habe es nicht hin bekommen...

Bei der Anordnung von einer Grafik neben einem Text wäre es natürlich am Besten, wenn die Größe der Grafik automatisch berechnet werden würde. Höhe des zu berücksichtigenden Textes=max. Höhe der Grafik.

Ich hoffe Ihr versteht, was ich meine?
Als Beispiel:
Ordne ich eine Grafik mit wrapfigure rchts neben einem kurzen Text an (die Grafik ist höher), beginnt auch der nachfolgende Text die Grafik zu umfließen. Er soll aber erst am Ende der Grafik beginnen...

Oh man, ich muss ins Bett...

VG

rstuby
03-05-2011, 07:40
Zu deiner eigentlichen Frage kann ich dir nicht so schnell etwas sagen, aber:
Du brauchst nicth unbedingt eine Gleitumgebung, um eine anständige Abbildung oder Tabelle darzustellen. Du kannst die caption auch mit dem \captionof-Befehl ohne Gleitungebung setzen. Evtl. brauchst du dafür \usepackage{caption}, ich glaube aber, die KOMA-Klassen laden das von selbst.

jonathan
03-05-2011, 09:43
Hallo und guten Morgen,

ich habe ein kleines Minimalbeispiel gebastelt, welches die Problemstellung hoffentlich noch etwas verdeutlicht:

\documentclass[%
11pt,
a4paper,
]{scrreprt}
\usepackage{wrapfig}
\usepackage{blindtext}
\usepackage[latin1]{inputenc} % Font Encoding, benoetigt für Umlaute
\usepackage[ngerman]{babel} % Spracheinstellung
\usepackage[T1]{fontenc} % T1 Schrift Encoding
\usepackage{graphicx}

\begin{document}
\begin{wrapfigure}{L}{4cm}
\vspace*{-1.2em}
\includegraphics[width=4cm]{testa}
\caption{blabla}
\label{fig:testa}
\end{wrapfigure}

Hier ein Text der um die Grafik fließen soll. Der Blindtext soll unter der Grafik beginnen.

\blindtext
\end{document}

Vielen Dank für Eure Hilfe!

rstuby
03-05-2011, 10:08
Wenn es dir recht ist, dass die beiden nebeneinander stehenden Objekte an einer gemeinsamen Grundlinie ausgerichtet sind, versuch mal was in der Art:

\documentclass[%
11pt,
a4paper,
]{scrreprt}
\usepackage{wrapfig}
\usepackage{blindtext}
\usepackage[utf8]{inputenc} % bei dir nicht aendern, ich habe alles auf utf8 eingestellt, deswegen brauche ich das
\usepackage[ngerman]{babel} %
\usepackage[T1]{fontenc} %
\usepackage{graphicx}
\begin{document}
\noindent\begin{minipage}[t]{0.3\textwidth}%
\rule{4cm}{4cm} % im Originaldokument durch \includegraphics usw. ersetzen
\captionof{figure}{blabla}%
\label{fig:testa}%
\end{minipage}%
\begin{minipage}[b]{0.69\textwidth}
Hier ein Text der um die Grafik fließen soll. Der Blindtext soll unter der Grafik beginnen.
\end{minipage}

\blindtext
\end{document}

Oder guck mal hier http://mrunix.de/forums/showthread.php?t=63849 die Idee mit columns.

defcon
03-05-2011, 10:19
ganz einfach: Du brauchst subfigure. Hier mal ein kleiner Code:




\usepackage{subfigure}

...
\begin{document}

...
\begin{figure}[h]
\centering %wenn du das Gesamtkonstrukt in der mitte haben willst
\begin{minipage}{0,45\textwidth}\subfigure[Bildunterschrift]{\label{key} \includegraphics[breite]{Pfad}\end{minipage}}
\begin{minipage}{0,45\textwidth}\subfigure[Bildunterschrift2]{\label{key2} \includegraphics[breite]{Pfad2}\end{minipage}}
\caption[für Verzeichnis]{Gesamtunterschrift}
\label{}
\end{figure}


Wichtig ist, daß die Breite des Subfigures kleiner-gleich der von minipage ist und die Summe der Breiten der Minipages KLEINER (!!!) \textwidth ist.
Die Subfigures erhalten die Nummerierung a) und b)

jonathan
03-05-2011, 18:03
Danke für eure Tipps! Beide sehr interessant. Da ich jetzt gerade Text und Grafiken habe, werde ich erst mal mit der Variante von rstuby arbeiten. Hier allerdings noch eine Frage zu:

Die Grafik wird auf einer Grundlinie mit dem Text ausgerichtet, das ist auch - manchmal - gut so. allerdings wird die Caption unter dieser Linie erstellt. Ist nicht auch eine Top-Ausrichtung möglich?

rstuby
03-05-2011, 19:34
Probier mal alle Kombinationen von t, b und c durch. Bei mir war dieses das zufriedenstellendste Ergebnis von denen, die ich probiert habe.

jonathan
05-05-2011, 00:01
Mhh...

Irgendwie auch nicht zufrieden stellend. Ist der Text deutlich kürzer, als die Grafik an Höhe einnimmt, wird er dennoch nicht oben mit der Grafik ausgerichtet...

Gibts da keine Lösung oder ein gutes Paket? Ich kann doch nicht der Einzige sein, der dies umsetzen möchte?!

defcon
05-05-2011, 07:54
Ach, jetzt verstehe ich Dein Problem.

Ich nutze da eine quick-and-dirty-methode: Ich mache ein wrapfig, schreibe den Text daneben, und wenn dieser zu kurz ist, füge ich einfach so viele \newline ein, bis der nachfolgende Text unter das Bild rutscht.

Ist zwar ein sehr unsauberer Weg, aber: Never change a running system!!!:):):)

Ist natürlich nur sinnvoll, wenn Du die Bildgröße nie wieder verändern willst.

jonathan
05-05-2011, 13:26
Ist natürlich nur sinnvoll, wenn Du die Bildgröße nie wieder verändern willst.

... Oder sich der Text darüber verändert und alles verschiebt...

Die Idee ist natürlich nicht schlecht, aber doch auch etwas unbefriedigend?! Viele Bücher werden doch mit LaTeX verfasst?! Wenn ich mir da die Anordnung von Text und Grafiken anschaue, sieht das irgendwie immer professioneller aus. Wie machen die sowas?

Ich erinnere mich noch an die Verwendung von html und CSS. Dort gab es auch float Umgebungen; wenn man allerdings wollte, dass nachfolgende/r Text/Grafiken nicht mit "umfliessen", konnte man einfach beim nachfolgenden Container ein clear:both setzen und das Floating wurde beendet. Eine super Lösung...

Schweinebacke
05-05-2011, 13:44
Probier mal alle Kombinationen von t, b und c durch. Zusätzlich kann man die eine Abbildung mit Hilfe von \raisebox (http://www.golatex.de/wiki/index.php?title=\raisebox) ganz (-\totalheight ist da als erstes Argument ganz praktisch) oder teilweise (da ist dann \dimexpr\ht\strutbox-\totalheight\relax eventuell nützlich) unter die Grundlinie verschieben.

defcon
05-05-2011, 14:18
Zusätzlich kann man die eine Abbildung mit Hilfe von \raisebox (http://www.golatex.de/wiki/index.php?title=\raisebox) ganz (-\totalheight ist da als erstes Argument ganz praktisch) oder teilweise (da ist dann \dimexpr\ht\strutbox-\totalheight\relax eventuell nützlich) unter die Grundlinie verschieben.



Das sieht mir aber immernoch nach manueller Einstellung des Platzhalters aus. Dann kann ich auch /newlines einfügen...:confused:

Schweinebacke
05-05-2011, 14:43
Ich denke schon, dass es einen Unterschied macht, ob die vertikale Ausrichtung mit Hilfe von automatisch bestimmten Längen wie \totalheight korrigiert wird und sich so der Größe der Abbildung automatisch anpasst, oder ob man manuell eine von der Größe der Abbildung abhängige Anzahl an Leerzeilen einfügt (da würde ich übrigens eher \vspace* empfehlen). Schließlich muss bei der \raisebox-Methode nichts am Code geändert werden, nur weil man eine Zeile mehr oder weniger Text hat oder die Abbildung etwas größer oder kleiner wird. Erst wenn der Text nicht mehr neben die Abbildung passt, bedarf es einer Änderung. Diesen signifikanten Unterschied müsste eigentlich jeder einsehen, der das mal ausprobiert hat.

\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[demo]{graphicx}
\begin{document}
\begin{flushleft}
\begin{minipage}[t]{0.3\linewidth}%
\raisebox{\dimexpr\ht\strutbox-\totalheight}{%
\includegraphics[width=\linewidth,height=4cm]{Test}%
}
\captionof{figure}{Das ist die Bildunterschrift}%
\label{fig:testa}%
\end{minipage}\hfill
\begin{minipage}[t]{0.69\linewidth}
Hier haben wir ein wenig Text, der neben der Abbildung stehen soll.
Im Gegensatz dazu, soll dann der Blindtext wieder darunter stehen.
\end{minipage}
\end{flushleft}
\blindtext

\begin{flushleft}
\begin{minipage}[t]{0.3\linewidth}%
\raisebox{\dimexpr\ht\strutbox-\totalheight}{%
\includegraphics[width=\linewidth,height=3cm]{Test}%
}
\captionof{figure}{Das ist die Bildunterschrift}%
\label{fig:testb}%
\end{minipage}\hfill
\begin{minipage}[t]{0.69\linewidth}
Hier haben wir ein wenig Text, der neben der Abbildung stehen soll.
Im Gegensatz dazu, soll dann der Blindtext wieder darunter stehen.
\end{minipage}
\end{flushleft}
\blindtext

Obwohl Abbildung~\ref{fig:testa} und Abbildung~\ref{fig:testb} unterschiedlich
hoch sind, sind Text und Bild jedes mal in gleicher Weise oben ausgerichtet,
ohne dass dazu der Code zur Ausrichtung angepasst werden muss.
\end{document}

defcon
06-05-2011, 08:38
Tja, hast Recht. Ich habe da wohl irgendwas in der Doku falsch verstanden.
Außerdem funktionierte es bei mir nicht, wenn ich wrapfloats verwende. ist aber auch egal, ich mache es wie bisher...