PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilder platzieren, Platzsparend, aber nach Satzende



Christian_D
05-02-2013, 09:22
Hallo,

ich habe ein Problem mit den Bildern in meiner Dissertation. Ich binde alle Bilder und Tabellen als Gleitobjekt ein. Ich nutze das Float-Paket und [H], damit die Bilder/ Tabellen an die Stelle kommen, wo ich es möchte. Das Problem sind große Lücken und Freiräume auf den Seiten.
Nutze ich [!htb] als Angabe, so werden die Bilder unschön in Sätzen positioniert. Gibt es nicht eine Möglichkeit, wo Latex die Bilder selbst paltziert, aber nach den Sätzen?

Hier meine Code:

\documentclass[12pt,twoside,a4paper,openany]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
% Schriftdeklaration
\usepackage[T1]{fontenc}
\newcommand{\changefont}[3]{\fontfamily{#1} \fontseries{#2} \fontshape{#3} \selectfont}
\changefont{ppl}{m}{n}
\usepackage{textcomp}
% =============================
\usepackage[inner=3cm,outer=2.5cm,top=1cm,bottom=1cm,includehe adfoot]{geometry}
\usepackage{graphicx}
\usepackage{float}
\usepackage{units}
\usepackage{siunitx}
\usepackage{lmodern}
\usepackage{dsfont}
\usepackage{amsmath}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{icomma}
\relpenalty=9999
\binoppenalty=9999
\brokenpenalty=10000
\usepackage{tocbibind}
% ==================================
% MATLAB-Code einfügen
\usepackage{listings}
\usepackage{color}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\lstset{language=Matlab,basicstyle=\footnotesize,t absize=2,keywordstyle=\color{blue},commentstyle=\c olor{dkgreen},stringstyle=\color{mauve},showstring spaces=false}
% ==================================
% Abkürzungsverzeichnis, Paket
\usepackage{acronym}
% ==================================
% Deklaration Seitenstil
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage} % Seitenzahlen mittig
\setlength{\headheight}{28pt}
\fancyhead[C]{\slshape \leftmark}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0.5pt}
\renewcommand*\chapterpagestyle{fancy}
% ==================================
\usepackage{underscore}
\usepackage{textcomp}
\usepackage{multicol}
% ==================================
% Deklaration Verlinkung
\usepackage[plainpages=false]{hyperref}
\usepackage{pdfpages}
\hypersetup{pdfborder=0 0 0}
% =========================
% Tabelleneinstellungen
\usepackage{booktabs}
% =========================
% Zeilenabstand
\usepackage{setspace}
\onehalfspacing
% ========================
\begin{document}
...

Bilder werden beispielsweise so eingefügt:


\begin{figure}[H]
\centering
\begin{minipage}[t]{0.49\textwidth}
\includegraphics[scale=1]{Bild1.pdf}
\subcaption{Bild 1}
\label{fig:Bild1}
\end{minipage}
\hfill
\begin{minipage}[t]{0.49\textwidth}
\includegraphics[scale=1]{Bild2.pdf}
\subcaption{Bild 2}
\label{fig:Bild2}
\end{minipage}
\caption{Bilder nebeneinander}
\end{figure}


Die Documentationen für float und l2picfaq hab ich schon gelesen und wirklich weiter bin ich leider auch nicht.

localghost
05-02-2013, 09:55
[…] Ich binde alle Bilder und Tabellen als Gleitobjekt ein. Ich nutze das Float-Paket und [H], damit die Bilder/ Tabellen an die Stelle kommen, wo ich es möchte. […]
Das widerspricht sich. Diese Holzhammermethode verhindert ja gerade, dass die Abbildungen gleiten können.

[…] Das Problem sind große Lücken und Freiräume auf den Seiten. […]
Das gehört zu den unschönen Nebeneffekten, die man dann in Kauf nehmen muss.

[…] Nutze ich [!htb] als Angabe, so werden die Bilder unschön in Sätzen positioniert. Gibt es nicht eine Möglichkeit, wo Latex die Bilder selbst paltziert, aber nach den Sätzen? […]
Lasse vor und nach figure eine Leerzeile. Dann funktioniert [!htb] bestens. Das Gleiten sollte nie ganz verhindert werden.


Thorsten

Christian_D
05-02-2013, 12:52
Lasse vor und nach figure eine Leerzeile. Dann funktioniert [!htb] bestens. Das Gleiten sollte nie ganz verhindert werden.

Hallo Thorsten,

danke, genau so geht es. Alledings musst ich jeweils \newline einfügen, ich nehme an, das meintest du mit Leerzeile.

Update: Klappt leider auch nicht immer. Es sind einige Abbildungen ober auf einer Seite so platziert, dass sie einen Satz teilen. Von den derzeitg gut 30 Bildern tritt bei 5 das Problem auf.

u_fischer
05-02-2013, 13:12
Nein, das meinte er nicht. Er meinte eine Leerzeile im Code (die einen neuen Absatz erzeugt). figure-Umgebungen sollten zwischen Absätzen stehen.

Dieser \changefont-Befehl in deiner Präambel ist übrigens Quatsch. Der tut nichts.

klops
05-02-2013, 13:20
Außerdem werden in der Präambel Pakete teilweise mehrfach geladen (min. textcomp). Das erschwert den Überblick und die Wartung. Ich vermute, die ganze Präambel ist irgendwie aus Vorlagen zusammengebastelt. Daher mein Standardratschlag: Entrümpeln! Das geht sehr einfach mit denselben Methoden wie bei der Erstellung eines vollständigen Minimalbeispiels (http://www.mrunix.de/forums/showthread.php?t=66921).

Christian_D
06-02-2013, 09:55
Nein, das meinte er nicht. Er meinte eine Leerzeile im Code (die einen neuen Absatz erzeugt). figure-Umgebungen sollten zwischen Absätzen stehen.

Und genau das hat nichts gebracht. Erst mit \newline ging es.


Dieser \changefont-Befehl in deiner Präambel ist übrigens Quatsch. Der tut nichts.
okay, danke.


Außerdem werden in der Präambel Pakete teilweise mehrfach geladen (min. textcomp). Das erschwert den Überblick und die Wartung. Ich vermute, die ganze Präambel ist irgendwie aus Vorlagen zusammengebastelt. Daher mein Standardratschlag: Entrümpeln!

Nein, diese Präambel ist mit der Zeit gewachsen, weil ich hier und da andere Pakete brauchte, um gewisse Dinge einzustellen. Das damit andere Pakete absolet wurden, war mir nicht bewußt.

Was genau ist denn nun quatsch oder wird nicht gebraucht?
Dieser \changefont befehl wollte ich nutzen, da ich alles auf palatino eingestellt habe.

klops
06-02-2013, 10:37
Du solltest trotzdem entrümpeln. Als erstes solltest Du schauen, welche Pakete doppelt geladen werden und die nur noch einmal laden. Dann kannst Du wie bereits erwähnt mit den Methoden des vollständigen Minimalbeispiels (http://www.mrunix.de/forums/showthread.php?t=66921) prüfen, was überhaupt noch benötigt wird, also jeweils Paket auskommentieren, testen, ggf. löschen oder wieder einkommentieren.

\changefont braucht man nicht, um auf Palatino umzustellen. Der Befehl taugt überhaupt grundsätzlich nur, um mal kurz auf einen anderen Font umzuschalten, beispielsweise wenn man sehr viele Fonts vorführen will. Aber auch dafür wäre es besser gleich die LaTeX-Anweisung \usefont zu verwenden. Der Befehl gehört also in die Kategorie: Braucht eigentlich niemand und wird häufig komplett falsch verwendet.

Auf Palatino schaltest Du bei latex und pdflatex am einfachsten um, indem Du das entsprechende Paket verwendest. Welches das ist hängt von der verwendeten Palatino ab. Für die ppl-Familie wäre das mathpple. Es gibt auch andere Palatino-Nachbauten. Natürlich darfst Du danach aber kein anderes Schriftpaket laden, das die Grundschrift ändert. Derzeit lädst Du nach \changefont aber beispielsweise noch lmodern. Eine Kombination der Serifenlosen (aka Grotesk) und Typewriter (aka Monospaced) von lmodern mit der Palatino würde ich übrigens auch nicht unbedingt empfehlen. Also lmodern ganz rasuwerfen. Wenn Du tatsächlich eine Grotesk und eine Minospaced brauchst, solltest Du Pakete passender Schriften laden, die nur diese beiden Familien umdefinieren.

Bei XeLaTeX und LuaLaTeX würde man die Schrift stattdessen eher mit fontspec umschalten.

\newline sollte man übrigens auf keinen Fall am Anfang oder Ende eines Absatzes stehen haben. Und wenn man vor \begin{figure} und nach \end{figure} eine Leerzeile hat, dann ist 100% sicher gestellt, dass die Abbildung allenfalls ganz am Anfang einer Seite oder ganz am Ende einer Seite in einem Satz vorkommt. Irgendwo auf der Seite wird sie dann garantiert zwischen den beiden Absätzen stehen. Alles andere ist unmöglich. Wenn es bei Dir scheinbar anders war, hast Du vermutlich etwas übersehen.

Festus
06-02-2013, 10:41
Und genau das hat nichts gebracht. Erst mit \newline ging es.


Das kann so nicht ganz sein.


Ich bin ein Absatz vor dem Bild.

\begin{figure}[htb]
...
\end{figure}

Ich bin ein Absatz nach dem Bild.


Wird niemals ein Bild mitten in den Satz packen, es sei denn der Satz würde am Seitenende sowieso enden und auf der nächsten Seite kommt dann oben erst das Bild, bevor der Satz weiter geht---satztechnisch ist das so dann völlig korrekt, findet man auch in gut gesetzten Büchern. \newline erzeugt einen Zeilenumbruch, der eben kein Absatzumbruch ist, und sollte nur in sehr wenigen Fällen überhaupt benutzt werden.

Wenn du meinst, dass das nicht stimmt und dir Bilder einfach so mitten in Sätze gepackt werden, will ich aber ein Minimalbeispiel sehen, das mir das zeigt.


Dieser \changefont befehl wollte ich nutzen, da ich alles auf palatino eingestellt habe.


Und warum lädst du dann lmodern als Serifenschrift. Global auf Palatino wechselst du mit


\usepackage[sc]{mathpazo}

Christian_D
06-02-2013, 14:06
Wird niemals ein Bild mitten in den Satz packen, es sei denn der Satz würde am Seitenende sowieso enden und auf der nächsten Seite kommt dann oben erst das Bild, bevor der Satz weiter geht---satztechnisch ist das so dann völlig korrekt, findet man auch in gut gesetzten Büchern.

Genau so ist es leider und ich finde das schaut mehr als bescheiden aus. Mein Prof haut mir das Teil so um die Ohren.

Ich habe meine Präambel jetzt auch etwas entrümpelt, danke für den Hinweis.

rstuby
06-02-2013, 14:20
Könntest du dann vielleicht mal dieses (auf deinen Angaben aufgebaute) Beispiel so manipulieren, dass der Fall auftritt?

\documentclass[12pt,twoside,a4paper,openany]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
% Schriftdeklaration
\usepackage[T1]{fontenc}

\usepackage[inner=3cm,outer=2.5cm,top=1cm,bottom=1cm,includehe adfoot]{geometry}
\usepackage{graphicx}
\usepackage{float}

\usepackage{caption}
\usepackage{subcaption}

\relpenalty=9999
\binoppenalty=9999
\brokenpenalty=10000

\usepackage[plainpages=false]{hyperref}

\usepackage{setspace}
\onehalfspacing
% ========================
\usepackage{blindtext}
\begin{document}

\Blindtext

\begin{figure}[!htbp]
\centering
\begin{minipage}[t]{0.49\textwidth}
\rule{8cm}{8cm}
\subcaption{Bild 1}
\label{fig:Bild1}
\end{minipage}
\hfill
\begin{minipage}[t]{0.49\textwidth}
\rule{8cm}{8cm}
\subcaption{Bild 2}
\label{fig:Bild2}
\end{minipage}
\caption{Bilder nebeneinander}
\end{figure}

\blindtext

\begin{figure}[!htbp]
\centering
\begin{minipage}[t]{0.49\textwidth}
\rule{8cm}{8cm}
\subcaption{Bild 1}
\label{fig:Bild1}
\end{minipage}
\hfill
\begin{minipage}[t]{0.49\textwidth}
\rule{8cm}{8cm}
\subcaption{Bild 2}
\label{fig:Bild2}
\end{minipage}
\caption{Bilder nebeneinander}
\end{figure}

\blindtext
\end{document}

rstuby
06-02-2013, 14:23
Moment, trennst du auch deine normalen Textabsätze korrekt mit \par oder Leerzeile? \\ und \newline sind keine Absatztrenner. Allerdings könnte ich mir trotzdem nicht vorstellen, dass LaTeX ein Bild mitten auf der Seite mitten in einen Absatz reinhaut, selbst wenn es keine Absatzenden findet. Seitenumbrüche findet es ja schließlich immer noch

Festus
06-02-2013, 14:29
Genau so ist es leider und ich finde das schaut mehr als bescheiden aus. Mein Prof haut mir das Teil so um die Ohren.


Dazu kann ich dann leider nur sagen, dass dein Professor in dem Falle herzlich wenig von sinnvollen Satzregeln oder Grundregeln der Ästhetik versteht. Wenn er mal einen Blick in all die noch gut setzenden Journals wie die Proceedings of the Royal Society, Biogeosciences, oder Nature werfen würde; oder in Bücher aus guten Verlagen wie Springer oder Oxford University Press, würde er sehen, dass das (a) völlig richtig und (b) in keinster Weise unschön oder leseunfreundlich ist. Ich kann daher nur vermuten, dass er schon so Word-geschädigt ist, dass ihm klaffende Lücken im Text lieber und gewohnter sind als ein vernünftiger Textsatz. Außerdem, als kleine Randbemerkung: Sollte deinen Professor nicht lieber der Inhalt deiner Arbeit interssieren, als das Layout, das vermutlich wohl eh kaum in sein Spezialgebiet fällt?

rstuby
06-02-2013, 14:48
Jetzt haben Festus und ich eine gegenteilige Auffassung davon, was "genau das" ist. Falls Festus Recht hat, das Verhalten also AUCH AN SEITENUMBRÜCHEN verhindert werde soll, sehe ich nur eine Möglichkeit: ganz kurze Absätze, jeweils nicht mehr als drei Zeilen lang. \widowpenalty und \orphanpenalty hochsetzen, dann bekommst du keinen Seitenumbruch mehr innerhalb eines so kleinen Absatzes. Große Lücken und Freiräume auf den Seiten (und entsprechende "underfull \vbox"-Meldungen) wirst du damit aber leider bekommen, außer du machst \raggedbottom, dann ist der ganze Freiraum unten, was bei twoside auch blöd aussieht. Anderen Leuten empfehle ich daher immer das Gegenteil: längere Absätze für mehr Umbruchsmöglichkeiten.

Oder aber du verbietest die Optionen t und b und lässt nur h und p zu und setzt dann ab und zu mal ein \clearpage. Damit wird eine neue Seite eröffnet und vorher alle noch anstehenden Gleitumgebungen ausgegeben. Jedenfalls ist das Ganze aber ein Krampf und nicht so gedacht.

Christian_D
06-02-2013, 16:04
Dazu kann ich dann leider nur sagen, dass dein Professor in dem Falle herzlich wenig von sinnvollen Satzregeln oder Grundregeln der Ästhetik versteht. Wenn er mal einen Blick in all die noch gut setzenden Journals wie die Proceedings of the Royal Society, Biogeosciences, oder Nature werfen würde; oder in Bücher aus guten Verlagen wie Springer oder Oxford University Press, würde er sehen, dass das (a) völlig richtig und (b) in keinster Weise unschön oder leseunfreundlich ist. Ich kann daher nur vermuten, dass er schon so Word-geschädigt ist, dass ihm klaffende Lücken im Text lieber und gewohnter sind als ein vernünftiger Textsatz. Außerdem, als kleine Randbemerkung: Sollte deinen Professor nicht lieber der Inhalt deiner Arbeit interssieren, als das Layout, das vermutlich wohl eh kaum in sein Spezialgebiet fällt?
Und genau das steht hier leider nicht zur Diskussion. Er und meine restlichen Gutachter gehören zur "alten Garde" und wollen es so, fertig. Das kann ich nicht verhandeln.

Update: Ich hab gerade mal meine eigenen Artikel aus Journals angeschaut und es wird tatsächlich so gesetzt (allerdings vom Verleger). Mir ist das nie aufgefallen.

Ich stelle morgen mal ein Beispiel online, wo das auftritt.



Moment, trennst du auch deine normalen Textabsätze korrekt mit \par oder Leerzeile? \\ und \newline sind keine Absatztrenner.

Asche auf mein Haupt, aber da bin ich wohl einem Fehler aufgesessen. Ich trenne zur Zeit mit \\ und wenn ich eine zusätzliche freizeile brauche, dann mit \newline. Ihr kriegt jetzt bestimmt graue Haare, aber sorry, ich bin Ingenieur, kein Informatiker und gewisse Dinge wurden mir einfach falsch erklärt.

rstuby
06-02-2013, 16:24
Ja, da hat man dir wirklich etwas massiv falsch erklärt. \\ und \newline sind beide dafür gedacht, einen Zeilenumbruch ausnahmsweise auch mal ohne neuen Absatz zu erzeugen.

Zusätzliche Leerzeilen sind gar nicht vorgesehen, was andere auch schon bemängelt haben, darunter auch ich als Übersetzerin und zum Teil auch Verfasserin von zum Teil auch nichtwissenschaftlicher Prosa. Da ist es ja völlig gang und gäbe (auch in Büchern), dass Absätze zu Abschnitten ohne separate Überschrift nur mit Leerzeile (oder einem Schmuckzeichen) zusammengefasst werden.

Ich denke, die LaTeX-konformste Weise, die nicht zu "underfull \vbox"-Meldungen (wie es \\ mit Leerzeile bzw. mit \par tun) oder anderen Inkonsequenten führt, ist:

\minisec{}
Somit weiß LaTeX, dass hier wirklich ein neuer Kleinabschnitt beginnt, dessen Überschrift aber leer ist.

klops
07-02-2013, 07:27
Diese Gliederung mit Abstand zusätzlich zur normalen Gliederung mit Einzug stellt tatsächlich eine Abschnittsgliederung unterster Ordnung dar (und ist als solche bei der Anzahl der Gliederungsebenen mit zu zählen). Bei Latex ist die allgemein sehr einfach mit
\blindtext

\bigskip\noindent
\blindtext zu erreichen. Statt \bigskip kann man auch \medskip oder \vspace{\baselinskip} verwenden. Es ist auch normal und gewollt, dass dieser Abstand verschwinden kann, wenn gleichzeitig eine neue Seite beginnt. Alternativ kann man etwas wie:
\documentclass[a5paper,twoside]{article}
\usepackage{lipsum}
\makeatletter
% Neue Gliederungsebene unterhalb von \subparagraph
\newcommand*{\minorsection}{%
\@afterindentfalse
\vskip\baselineskip
\vskip \z@ plus \baselineskip minus .5\baselineskip
\@afterheading
}
\makeatother
\widowpenalty=9999
\clubpenalty=9999
\begin{document}
\lipsum[1-2]
\minorsection
\lipsum[3-4]
\minorsection
\lipsum[5-6]
\end{document} verwenden.

Bei wissenschaftlicher Literatur gilt eine solche zusätzliche Gliederungsebene als eher überflüssig oder stilistisch wenig gelungen, da hier für jede Gliederungsebene eine zumindest schlagwortartige Motivation erwartet wird. Auf unterster Ebene sind hier Spitzmarken wie sie von \paragraph{…} oder \subparagraph{…} erzeugt werden ein nützliches Mittel. Da diese normalerweise auch nicht nummeriert werden, taugen sie sogar, wenn nicht mehrere davon aufeinander folgen.

In der Prosa gibt es häufig nur diese Art der Abschnitte unterhalb der Kapitel. Da ist das dann ein ganz normales Gliederungselement. Sinnvoller Weise würde man dafür also \section als Anweisung ohne Argument umdefinieren (siehe oben). Dazu käme dann für Kapitel \chapter häufig mit zentrierter Nummer und ggf. zentrierter Überschrift. Das dürfte auf Basis von scrreprt recht einfach zu bewerkstelligen sein.