PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : placement of figures: [h] tut nicht?



einheitlix
21-09-2009, 17:57
Hallo Leute,

dieser Thread ist aus diesem alten Thread ausgegliedert:
http://www.mrunix.de/forums/showthread.php?t=66037

Zusammengefasst moechte ich fuer meine Bachelor-Arbeit eine Reihe von Programmtransformationen beschreiben. Jedenfalls moechte ich immer abwechselnd eine Figur, dann einen erklaerenden Text, dann die naechste Figur, dann wieder einen erklaerenden Text usw. darstellen.

Mein Problem ist, dass LaTeX die Figuren manchmal woanders "hinfloaetet", ohne dass ich das will. Grob gesagt, hab ich sowas:


text1

\begin{figure}[h]
figur1
\end{figure}

text2

Nach text1 ist figur1 aber zu gross, so dass sie nicht mehr ans Ende vom Blatt passt. LaTex platziert figur1 nun also aufs naechste Blatt. Soweit ok. Dann denkt sich LaTex aber "Hey, text2 passt aber noch ans Ende vom vorherigen Blatt!", und platziert diesen dorthin, so dass ich im Endeffekt text1 und text2 hintereinander hab, und auf dem naechsten Blatt dann erst figur1!

Ich moechte aber *erzwingen*, dass text1 auf jeden Fall vor der Figur kommt und text2 nach der Figur. Ich dachte das geht mit dem Parameter [h], der tut aber trotzdem nicht genau was ich will.

Minimalbeispiel:

Ok, ich habe folgende Figur:


\begin{figure}[h]
\centering
\makebox[0pt][c]{%
\begin{psmatrix}[mnode=r,colsep=0.8,rowsep=0.4]
[name=game1] \mybox{
\small
\begin{tabular}{llcl}
let & ($e$, $d$) & $\sel$ & :encGen ElGamal: $1^n$\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $c$ & $\sel$ & :encEnc ElGamal: ($1^n$, $e$, $m_1$)\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}
}
&
[name=game2] \mybox{
\small
\begin{tabular}{llcl}
let & $x$ & $\sel$ & fun(uniform, $\card{\gen{g_n}}$)\\
& ($e$, $d$) & $\sel$ & ($g_n^x$, $x$)\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $y$ & $\sel$ & fun(uniform, $\card{\gen{g_n}}$)\\
& $c$ & $\sel$ & ($g_n^y$, $m_1 \times e^y$)\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}
}

%Arrows
\ncline{->}{game1}{game2}
\end{psmatrix}%
}

\caption{first transformation}
\label{first transformation}
\end{figure}


Speichert dies als figure1.tex ab, dann benutzt folgendes Dokument:


\documentclass[11pt]{article}
\usepackage{amsmath, amsthm, amssymb}
\usepackage{pstricks,pst-node}

\newcommand{\sel}{\leftarrow}
\newcommand{\gen}[1]{\langle#1\rangle}
\newcommand{\card}[1]{\lvert#1\rvert}
\newcommand{\mybox}[1]{\psshadowbox[linecolor=gray,shadowcolor=lightgray]{#1}}

\begin{document}

bla1\\
\input{figure1.tex}\\
bla2\\
\input{figure1.tex}\\
bla3\\
\input{figure1.tex}\\
bla4\\
\input{figure1.tex}\\
bla5\\

\end{document}


Wenn ihr das kompiliert, seht ihr das Problem: am Anfang alles richtig, aber dann kommen "bla4" und "bla5" direkt hintereinander, die letzte Figur erst danach :(

Es ist ja in Ordnung, wenn die letzte Figur nicht mehr auf das Blatt passt und LaTex sie auf das naechste tut, dann soll halt nur "bla5" auch aufs naechste Blatt, hinter die Figur platziert werden.

Danke schonmal!

Malte

u_fischer
21-09-2009, 18:25
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=figurehere
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=floats

sommerfee
21-09-2009, 18:53
und natürlich

http://www.mrunix.de/forums/showthread.php?t=41452

(dort Abschnitt 3.4)

Liebe Grüße,
Axel

Bilbo
21-09-2009, 19:15
Mehr mit Gleitumgebungen beschäftigen!

mechanicus
21-09-2009, 19:31
Hallo,

ich moechte dir noch sagen, dass ich es echt Klasse finde, dass du stets bemueht bist ein Minimalbeispiel zu erstellen.

Gruss
Marco

einheitlix
22-09-2009, 15:25
Hallo Leute,

wieder einmal vielen herzlichen Dank! Ich habe mich fuer die Loesung mit dem package float entschieden, welches mir die Option [H] zur Verfuegung stellt. Sollten sich dadurch irgendwann Probleme ergeben (wie zum Beispiel durcheinandergeworfene Nummerierungen), stehen in euren Links ja noch weitere Loesungsansaetze...



ich moechte dir noch sagen, dass ich es echt Klasse finde, dass du stets bemueht bist ein Minimalbeispiel zu erstellen.

Ist ja ganz in meinem Sinne: es ist eben der schnellste Weg, eine qualitative Antwort zu bekommen ;)

Liebe Gruesse

Malte