PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilder ausrichten in enumerate Umgebung



Julius
24-10-2011, 08:31
Hallo Community,

ich habe nun eine Frage zum Ausrichten meiner Bilder, welche sich bspw. in einer enumerate Umgebung befinden.

Damit die Bilder an die richtige Stelle gesetzt werden (und nicht weg floaten), verzichte ich schon auf die figure-Umgebung.

Nun möchte ich aber, dass mein Bild nicht mittig ausgerichtet wird wie in Beispiel a), sondern das Bild nur nach unten hin aufgebaut wird, d.h. das a) würde von der Grafik aus gesehen oben links stehen.

Kann mir da jemand weiter helfen?

Lg Julius



\documentclass{article}

% Deutsche Sprachpakete
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

%Mathepakete
\usepackage{amsmath,amssymb, amstext}
\usepackage{ntheorem}

%Listenpaket
\usepackage{enumerate}

%Grafiken
\usepackage{tikz}

\begin{document}
\theoremstyle{break}
\newtheorem*{Bsp}{Beispiel}

\begin{Bsp}
\begin{enumerate}[(a)]
\item {
\begin{minipage}[h]{\textwidth}
\begin{tikzpicture}
\begin{scope}
\node (A) at (0.5,0) {$A$};
\draw[color=red, thick] (2.5, 2) ellipse (2 and 2.5);
\node (d1) at (1,1) {$\circ$};
\node (d2) at (2,2) {$\circ$};
\node (d3) at (1,3) {$\circ$};
\node (d4) at (3,1) {$\circ$};
\node (d5) at (4,2) {$\circ$};
\node (d6) at (3,3) {$\circ$};
\end{scope}
\begin{scope}
\node (B) at (12,0) {$B$};
\draw[color=red, thick] (5.5, 0) rectangle (11.5, 4);
\node (w1) at (6.5,0.5) {$X$};
\node (w2) at (7,2) {$X$};
\node (w3) at (8,3) {$X$};
\node (w4) at (10,1) {$X$};
\node (w5) at (9,2) {$X$};
\node (w6) at (11,3) {$X$};
\end{scope}
\path[draw,->] (d1) to [bend right] (w1);
\path[draw,->] (d2) to [bend left] (w5);
\path[draw,->] (d3) to [bend left] (w3);
\path[draw,->] (d5) to [bend left] (w2);
\path[draw,->] (d6) to [bend left] (w3);
\path[draw,->] (d4) -- (w4);
\draw[color=orange, densely dashed] (6, -0.5) rectangle (10.5,4.5);
\node (wf) at (11,-1) {$W_f = Im(f)$ 'Image von $f$'};
\end{tikzpicture}
\end{minipage}
}
\item Konstante Funktion: Sei $c \in B$, \[ f: A \to B, x \mapsto f(x) = c \in B (W_f = \{c\}) \]
\item Die Identität: Sei $A = B, id: A \to A, x \mapsto id(x) = x$
\item $f = Mikrowelle$ \\
$A = \{essbar\} \cap \{\text{kein Metall}\} \cap \{\text{enthält Wasser}\}$ \\
$B = \{\text{heiß}\}$ \\
$Im(f) = A \cap B$
\end{enumerate}
\end{Bsp}

\end{document}

Schweinebacke
24-10-2011, 08:55
Mit \raisebox geht immer:
\item
\begin{minipage}[t]{\linewidth}
\raisebox{-\totalheight}{\begin{tikzpicture}
\begin{scope}
\node (A) at (0.5,0) {$A$};
\draw[color=red, thick] (2.5, 2) ellipse (2 and 2.5);
\node (d1) at (1,1) {$\circ$};
\node (d2) at (2,2) {$\circ$};
\node (d3) at (1,3) {$\circ$};
\node (d4) at (3,1) {$\circ$};
\node (d5) at (4,2) {$\circ$};
\node (d6) at (3,3) {$\circ$};
\end{scope}
\begin{scope}
\node (B) at (12,0) {$B$};
\draw[color=red, thick] (5.5, 0) rectangle (11.5, 4);
\node (w1) at (6.5,0.5) {$X$};
\node (w2) at (7,2) {$X$};
\node (w3) at (8,3) {$X$};
\node (w4) at (10,1) {$X$};
\node (w5) at (9,2) {$X$};
\node (w6) at (11,3) {$X$};
\end{scope}
\path[draw,->] (d1) to [bend right] (w1);
\path[draw,->] (d2) to [bend left] (w5);
\path[draw,->] (d3) to [bend left] (w3);
\path[draw,->] (d5) to [bend left] (w2);
\path[draw,->] (d6) to [bend left] (w3);
\path[draw,->] (d4) -- (w4);
\draw[color=orange, densely dashed] (6, -0.5) rectangle (10.5,4.5);
\node (wf) at (11,-1) {$W_f = Im(f)$ 'Image von $f$'};
\end{tikzpicture}}
\end{minipage}

Allerdings glaube ich mich auch dunkel zu erinnern, dass man auch bei tikz selbst eine Verschiebung (ähnlich wie bei picture) einstellen kann, so dass man die Grundlinie nicht manuell mit \raisebox nach unten verlegen muss. Ich bin jetzt aber zu faul, in der Anleitung nachzulesen.

Julius
25-10-2011, 12:30
Hey,

damit bekomme ich zwar das Bild ordentlich positioniert, jedoch ist die Lösung suboptimal sobald ich mehr als 1 Bild hintereinander platziere, dann verbraucht der teilweise viel mehr Platz als nötig.

Noch schlimmer ist es, wenn ich neben dem Bild eine Tabelle platzieren möchte, was ich vorher ohne Probleme mit 2 Minipages gemacht habe. Diese ist das wirklich ungünstig platziert, oftmals tiefer gestellt als das Bild, egal wie viel ich mit der raisebox jongliere.

Fällt jemand noch eine alternative Lösung ein?

Schweinebacke
25-10-2011, 13:54
Man kann auch Tabellen mit einer Platzierungsoption t oder b versehen. Die Platzierung h, die Du für minipage gewählt hattest, gibt es hingegen nicht und führt zu einer vertikalen Zentrierung. Lies einfach einmal die Möglichkeiten von minipage (wird bei mir ja ebenfalls verwendet) im usrguide nach.

Und mach doch mal ein Beispiel, das das Problem zeigt. Würde mich wundern, wenn man da nicht mit korrekter Platzierung bei tabular und minipages etwas tun könnte. Die ganzen Möglichkeiten, die es im Zusammenspiel mit raisebox da so gibt, zeigt übrigens http://www.golatex.de/wichtige-hinweise-und-vorabhilfen-fuer-dieses-unterforum-t4688.html. Dort wird lediglich \includegraphics für das Bild und \parbox statt minipage verwendet, das spielt aber für das Prinzip keine Rolle.

u_fischer
25-10-2011, 14:25
In deinem Beispiel brauchst du keine minipage. Setze einfach die Grundlinie des Bildes oben:


\item
\begin{tikzpicture}[baseline=(current bounding box.north)]

Schweinebacke
25-10-2011, 16:54
Danke, das war das, was ich erwähnt hatte aber zu faul war in der Anleitung zu suchen. Wobei auch \raisebox die Grundlinie nach unten verlegt und sich deshalb am Zusammenspiel mit anderen minipage- oder mit tabular-Umgebungen wenig ändern sollte.

u_fischer
25-10-2011, 17:05
Wobei auch \raisebox die Grundlinie nach unten verlegt und sich deshalb am Zusammenspiel mit anderen minipage- oder mit tabular-Umgebungen wenig ändern sollte.

Wenn man nicht auf die Platzierungsoption der umgebenden minipage achtet (hier das unbekannte [h]) können zusätzliche Boxen mit eigenen Grundlinien schon überraschende Nebeneffekte haben:


\documentclass{article}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
abc\begin{minipage}{5cm}
xyz\raisebox{-\height}{\rule{2cm}{2cm}}
\end{minipage}


\bigskip

abc\begin{minipage}[t]{5cm}
xyz\raisebox{-\height}{\rule{2cm}{2cm}}
\end{minipage}

\end{document}

Schweinebacke
26-10-2011, 07:03
Wenn man nicht auf die Platzierungsoption der umgebenden minipage achtet (hier das unbekannte [h]) können zusätzliche Boxen mit eigenen Grundlinien schon überraschende Nebeneffekte haben:
Dass fehlende oder falsche Platzierungsoptionen Auswirkungen haben ist klar. Fehler und fehlende Angaben haben immer irgend eine Wirkung. Teil meiner Lösung war deshalb auch eine Korrektur dieses Fehlers …

Versteh' mich bitte richtig: Das soll keine Kritik an Deiner Lösung sein. Die ist mit Sicherheit besser als meine, weshalb ich indirekt auch bereits bei meiner angedeutet hatte, dass suchen in der tikz-Anleitung nach genau Deiner Lösung vorteilhaft sein könnte. Ich wollte nur noch allgemein darauf hinweisen, dass man mit \raisebox allgemein die Grundlinie verschieben kann und man bei mehreren Elementen nebeneinander ggf. nicht nur das eine Element, sondern auch die Elemente daneben passend ausrichten muss. Wie das geht, wird unter dem von mir genannten Link am Beispiel \raisebox (mit \includegraphics) und \parbox gezeigt. Wen es interessiert, kann es sich anschauen, wen es nicht interessiert, soll es lassen.

u_fischer
26-10-2011, 10:09
Ich wollte nur noch allgemein darauf hinweisen, dass man mit \raisebox allgemein die Grundlinie verschieben kann

Gegen \raisebox als Lösung ist überhaupt nichts einzuwenden. Ob man das oder die tikz-Option benutzt ist mehr oder weniger Geschmackssache.

Aber die minipage drumherum ist erstens einfach überflüssig und zweitens: je mehr Boxen umso schwieriger den Durchblick bei der Bestimmung der Lage der diversen Grundlinien und Referenzpunkte. Ich wollte mit meinem Beispiel nur mal demonstrieren, wie die Änderung der Grundlinie der äußeren Box scheinbar die innere verschiebt.

Julius
28-10-2011, 22:59
Hey,

erst einmal vielen dank, mit der Ausrichtung komme ich jetzt schon besser zurecht :)

leider komme ich erst jetzt dazu wieder hier zu antworten.

Die Ausrichtung über
\begin{tikzpicture}[baseline=(current bounding box.north)] klappt super, nur wie oben bereits erwähnt reißt das irgendwie die Tabelle nach oben. Wenn ich nur eine Tabelle habe wird diese super ausgerichtet, nur im Zusammenhang mit einem vorangestellten Bild macht es Probleme.

Im Anhang ist der Code, den das betreffen würde (das was dort steht ist jetzt zusammenhanglos, aber für das Ausrichtungsproblem ist der Textinhalt sowieso bedeutungslos.)



\documentclass{article}

% Deutsche Sprachpakete
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

%Mathepakete
\usepackage{amsmath,amssymb, amstext}
\usepackage{ntheorem}

%Listenpaket
\usepackage{enumerate}

%Grafiken
\usepackage{tikz}

\begin{document}
\theoremstyle{break}
\newtheorem*{Bsp}{Beispiel}

\begin{Bsp}
\begin{enumerate}[(a)]
\item {
\begin{tikzpicture}[baseline=(current bounding box.north)]
\begin{scope}
\node (A) at (0,0.5) {$A$};
\draw[color=red, thick] (0.75, 1.5) ellipse (0.75 and 1);
\node (a1) at (1,1) {a};
\node (b1) at (0.5,1.5) {b};
\node (c1) at (1,2) {c};
\end{scope}
\begin{scope}
\node (A) at (4.5,0.5) {$A$};
\draw[color=red, thick] (3.75, 1.5) ellipse (0.75 and 1);
\node (a2) at (4,1) {a};
\node (b2) at (3.5,1.5) {b};
\node (c2) at (4,2) {c};
\end{scope}
\path[draw,->] (a1) to [bend right] (a2);
\path[draw,->] (b1) -- (b2);
\path[draw,->] (c1) to [bend left] (c2);
\end{tikzpicture}
\begin{tabular}{c | c c c c}
$A \times A$ & a & b & c \\
\hline
a & \colorbox{red}{(a,a)} & \colorbox{red}{(a,b)} & (a,c) \\
b & (b,a) & \colorbox{red}{(b,b)} & \colorbox{red}{(b,c)} \\
c & \colorbox{red}{(c,a)} & (c,b) & (c,c) \\
\end{tabular}
}
\item Konstante Funktion: Sei $c \in B$, \[ f: A \to B, x \mapsto f(x) = c \in B (W_f = \{c\}) \]
\item Die Identität: Sei $A = B, id: A \to A, x \mapsto id(x) = x$
\item $f = Mikrowelle$ \\
$A = \{essbar\} \cap \{\text{kein Metall}\} \cap \{\text{enthält Wasser}\}$ \\
$B = \{\text{heiß}\}$ \\
$Im(f) = A \cap B$
\end{enumerate}
\end{Bsp}

\end{document}

u_fischer
29-10-2011, 11:37
Wenn ich nur eine Tabelle habe wird diese super ausgerichtet, nur im Zusammenhang mit einem vorangestellten Bild macht es Probleme.

Weder sehe ich, dass das Bild die Ausrichtung der Tabelle beeinflusst (relativ zur durch das a) gegebenen Grundlinie) noch wüsste ich einen Grund dafür. Wenn du möchstest, dass die 1 Zeile der Tabelle sich am a) ausrichtest, benutzt \begin{tabular}[t]

Allerdings habe ich den Eindruck, dass dir grundsätzlich nicht so ganz klar ist, was woran ausgerichtet wird.

Fast alles in TeX ist eine Box: tabular ist eine Box, ein Buchstabe ist eine Box, eine tikzpicture ist eine Box. Jede Box hat einen Referenzpunkt, durch den die Grundlinie dieser Box läuft. Bei vielen Boxen kannst du über Optionen wie [t] oder [baseline=(current bounding box.north)] die Lage dieses Referenzpunktes beeinflussen.

Im Horizontalmodus, also wenn Zeilen gebaut werden, werden diese Referenzpunkte wie auf einer Perlenschnur auf die Grundlinie der Zeile gesetzt.



\documentclass{article}
\usepackage{tikz}

\begin{document}
\noindent\makebox[0pt][l]{\rule{\linewidth}{1pt}}% Zeile darstellen
A, y
\begin{tabular}{c}A\\B\end{tabular},
\begin{tabular}[t]{c}A\\B\end{tabular}
\begin{tabular}[b]{c}A\\B\end{tabular}
\begin{tikzpicture}[baseline=(current bounding box.north)]
\draw[color=red] (0,0) -- (1,1);
\end{tikzpicture},
\begin{tikzpicture}
\draw[color=green] (0,0) -- (1,1);
\end{tikzpicture}

\end{document}

Julius
29-10-2011, 14:07
Hallo Ulrike,

das Boxenmodell von LaTeX habe ich prinzipiell verstanden, (ähnelt dem html und css prinzip). Ich war mir eigentlich auch sicher, dass ich das [t] gesetzt hatte aber anscheined war ich etwas zu schnell mit dem Post hier. Dein Beispiel zeigt die einzelnen Möglichkeiten super.

Vorher hatte ich ja beides (sowohl das Bild als auch die Tabelle) in eine separate Minipage gepackt, welche mit einem [t] versehen war. Als ich dann die Minipage weggenommen habe ist mir das wohl 'durch die Lappen gegangen'.

Nun habe ich aber alles bestens ausrichten können. Vielen Dank an der Stelle :)

Lg
Julius