PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alle figures auf zwei Seiten und nicht da, wo sie sein sollen



axeljaeger
02-01-2005, 21:13
Hallo,
ich bin's schon wieder: Latex macht wieder was anderes, als es soll:
Ich binde Bilder mit der figure-Umgebung ein. Da gibt es ja noch den Parameter, wo die Bilder landen sollen. Ich möchte gerne die Bilder an der Stelle haben, wo ich sie einbinde. Das erhoffe ich durch den Parameter [h] zu erzwingen. Das geht in 50% der Fälle gut, ich hätte es aber gerne immer. Da hab ich bei der Boardsuche gefunden, dass es mit [H] verbindlicher sein soll. Das macht zwar einen Unterschied, aber eher in die andere Richtung.

Ich hab das Thema noch ein paar Mal gefunden, da wird dann auf die Dante-FAQ 6.2.13 verwiesen: Man soll die figure-Umgebung weglassen und stattdessen direkt \includegraphics die Grafik einbinden und mit einem besonderen Paket beschriften, weil die Beschriftung normal außerhalb einer float-Umgebung nicht funktioniere. Leider funktioniert das Paket bei mir nicht, es kommt die selbe Fehlermeldung, wie wenn ich \caption direkt verwende, nämlich dass \caption außerhalb von float nicht funktioniert. Wundert mich nicht, das Paket ist ja auch nur ein Einzeiler, der ein Caption hinschreibt. Ich hätte gerne figure direkt benutzt, weil ich auch ein Verzeichnis der Abbildungen führen möchte.
Wer weis Rat? Vielen Dank.

bischi
02-01-2005, 22:23
[!H]

MfG Bischi

smofi
02-01-2005, 22:25
Weitere Hinweise:
- Nebst [H] gibt es noch [!h], das vielleicht besser arbeitet
- Zitat von http://www.public.asu.edu/~arrows/tidbits/LatexFigurePlacement.html:
"LaTeX will not violate its typesetting rules. What LaTeX does is keep a
queue of figures and place them as room becomes available. Even if you
want to insist on putting a figure in a particular space, it may violate
typesetting rules, so TeX just won't do it. One way that you might try
to get around this is to use the \clearpage command. This forces LaTeX
to dump its image queue at the point in the file that the command is
called, instead of popping the image onto the queue."

smofi
03-01-2005, 10:09
Soeben habe ich diesbezüglich folgende Erfahrung gemacht, die erwähnte Tabelle ist eine ganze Seite gross:
1. LaTeX kompiliert mit der Warnung [h] --> [ht] und setzt die Tabelle zwei Seiten später.
2. Habe [h] durch [!h] ersetzt. LaTeX kompiliert mit derselben Warnung [!h] --> [!ht]. Tabelle bleibt am selben Ort.
3. Habe vor der Tabelle ein \clearpage eingefügt. LaTeX kompiliert ohne Warnung. Die Tabelle steht dort, wo ich sie möchte. :D :D
4. Habe versuchsweise wieder [h] verwendet statt [!h] und \clearpage belassen. LaTeX schreibt wieder die Warnung unter 1. Er braucht also oftmals beides.

Dann:
1. LaTeX kompiliert mit der Warnung [h] --> [ht] und setzt die Tabelle zwei Seiten später.
2. Habe [h] durch [H] ersetzt und kein \clearpage eingefügt. LaTeX kompiliert ohne Warnung, aber die Tabelle kommt doch erst zwei Seiten später.
3. Habe \clearpage eingefügt. Tabelle kommt immer noch erst zwei Seiten später. Auch [!H] ändert nichts.

Fazit:
1. Der Weg in diesem Fall, eine Tabelle oder ein Figure wirklich dort zu haben, wo man will, ist
\clearpage % Falls die Tabelle eine ganze Seite gross ist
\begin{table}[!h]
...
2. [H] ist mir unklar. Es scheint die Warnung zu unterdrücken und anders mit der Queue umzugehen als [h].

Smofi :cool:

axeljaeger
03-01-2005, 19:32
Und falls Abbildung nicht eine ganze Seite groß ist? Ich könnte auch zur Not eine Seite mit zwei Bilder übereinander hinter den Text machen, wenn Text und Bild nicht auf einer Seite hinhaut.

smofi
04-01-2005, 11:52
Hallöchen Axel,
ich versuchte, mit folgendem Code eine Konstellation hinzukriegen, bei der eine Tabelle auf die nächste Seite platziert wird, obwohl sie nicht eine ganze Seite gross ist. Schau mal:


\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{german}
\begin{document}
Mein Text erzählt von einem Märchen namens Händel und Bertel.
Ich erzähle so lange, bis er die untenstehende Tabelle auf die
nächste Seite zwingt. \vspace{5cm}\\
Ich erzähle und erzähle\vspace{5cm}\\
Und nun will ich \textbf{hier} eine Tabelle:\\
\enlargethispage{2cm} % Zeile X
\begin{table}[h]
\fbox{\raisebox{0mm}[4cm][4cm]{}} % Es geht um den Platzbedarf
\end{table}

Und nun geht mein Märchen weiter.

\end{document}

Ohne die "Zeile X" nimmt er die Tabelle auf die nächste Seite mit Warnung h->ht. Das kann auch [!h], [H], [!H] nicht ändern. Mit der "Zeile X" platziert er die Tabelle wirklich da, wo ich sie will.
Aber ich denke Mal, Du wirst Dich über den Gebrauch von \enlargethispage wiederum nicht so freuen ? ;)

Deine unter dem Theman "Hurenkind" gemachte Bemerkung finde ich schon auch: Von einem Programm wie LaTeX erwartet man keine Hurenkinder. Und LaTeX macht sich die Optimierung nicht einfach: Schau mal unter
http://www.informatik.uni-stuttgart.de/ipvr/as/lehre/latex/latex.html ,
runterscrollen bis "Zeilenumbruch". Da wird erklärt, dass LaTeX die Schönheit des Layouts im drei Durchgängen optimiert. Verschiedene Konstellationen werden durchprobiert und mit einem Punktesystem gewichtet. Anhand dieses unheimlichen Aufwandes fühle ich mich motiviert, das Resultat hinzunehmen und letzte Störfaktoren von Hand zu korrigieren. Ich denke, wenn Informatik ein optimales Layout automatisch herausholen kann, wurde es hiermit getan. Was meinst Du?
Gruss
Smofi

axeljaeger
04-01-2005, 12:55
Naja, man kann ja Latex verbieten, Hurenkinder zu machen, so:
\clubpenalty = 10000
\widowpenalty = 10000
\displaywidowpenalty = 10000
Warum das aber nicht per default an ist, kann ich nicht verstehen. Das hört sich an wie: Hurenkinder sind ja nicht schlimm, aber wenn es wirklich jemanden stört, bitte, dann kann er es ja abstellen. Da Hurenkinder meiner Meinung nach ein typhografischer Fehler sind, sollte es in der Software noch nichtmal eine Möglichkeit geben, sowas zu erlauben.