Warum ziehen Bilder den Text nach unten?

Warum ziehen Bilder den Text nach unten?

Immer wenn ich ein Bild einfüge, wird der Text nach unten gezogen. Das möchte ich nicht, ich möchte, dass der Text normal ist und das Bild dort steht, wo es hinpasst, entweder auf der aktuellen Seite oder auf der nächsten, wenn es zu groß ist.

Der MWE wäre:

\documentclass{book}

\usepackage[utf8]{inputenc}
\usepackage[margin = 2cm]{geometry}
\usepackage{array}
\setlength{\arrayrulewidth}{1mm}
\setlength{\tabcolsep}{18pt}
\renewcommand{\arraystretch}{1.5}
\usepackage{color}
\newcommand{\compl}[1]{ \textcolor{darkblue}{\textbf{\hl{ #1 }}}}
\definecolor{seccol}{rgb}{0,0.8,0.3}

\usepackage{graphicx}

\begin{document}

    In a fully implemented Operating System, any global variables that need to be initialized before they are used, and any library initialization code needs to be called before these libraries cna be used. In our modest project, there are only a couple of libraries, but they need to be initialized nonetheless. Also, the  section must be cleared (i.e we must write a 0 to all addresses in the section). All of this is done in the  function.
    \\
    Although very humble in it's current state, if the project is extended so that more functionality is added, this is where we would call any library initialization code, in order to ensure that everything is setup before any function in a library gets called. 
    \\~\\
    The very first thing we want to do is clear the  section. Thanks to our, we have a label to indicate exactly where this section begins and another label to indicate exactly where it ends, the script also ensures that all  sections of all files get contiguously put together in the final kernel image, so we know that, once we clear this section, all variables that need to be initialized to 0 will contain their correct values. Since the addresses form a continuous block of memory, we can

        In a fully implemented Operating System, any global variables that need to be initialized before they are used, and any library initialization code needs to be called before these libraries cna be used. In our modest project, there are only a couple of libraries, but they need to be initialized nonetheless. Also, the  section must be cleared (i.e we must write a 0 to all addresses in the section). All of this is done in the function.
        \\
        Although very humble in it's current state, if the project is extended so that more functionality is added, this is where we would call any library initialization code, in order to ensure that everything is setup before any function in a library gets called. 
        \\~\\
        The very first thing we want to do is clear the  section. Thanks to our , we have a label to indicate exactly where this section begins and another label to indicate exactly where it ends, the script also ensures that all sections of all files get contiguously put together in the final kernel image, so we know that, once we clear this section, all variables that need to be initialized to 0 will contain their correct values. Since the addresses form a continuous block of memory, we can

                The very first thing we want to do is clear the  section. Thanks to our , we have a label to indicate exactly where this section begins and another label to indicate exactly where it ends, the script also ensures that all sections of all files get contiguously put together in the final kernel image, so we know that, once we clear this section, all variables that need to be initialized to 0 will contain their correct values. Since the addresses form a continuous block of memory, we can
\centering
\includegraphics{FramebufferDiagram.png}
\end{document}

[1]: https://i.stack.imgur.com/7lNPf.png

Antwort1

Sie müssen Ihr Bild in eine figureUmgebung einfügen, damit es schwebt:

\begin{figure}
\centering
\includegraphics{FramebufferDiagram.png}
\end{figure}

Sie können ein optionales Argument hinzufügen, um die Positionierung einzurichten. Z. B. hfür hier (wo es in der Quelle erscheint), tfür oben auf einer Seite und/oder bfür unten auf einer Seite ( \begin{figure}[ht]um es hier einzufügen oder, wenn es nicht passt, oben auf der nächsten Seite).

Hinweis: Ihr Text füllt nur etwa eine halbe Seite. Und da Sie die Klasse verwenden, bookwird er trotzdem gestreckt, bis Sie weiteren Text hinzufügen. Das liegt daran, dass die bookKlasse versucht, allen Seiten die gleiche Höhe zu geben.

Bearbeiten:

Um eine Seitendehnung zu vermeiden, fügen Sie dies \raggedbottomin die Präambel ein. LaTeX wird dann nicht mehr versuchen, alle Seiten auf die gleiche Höhe zu bringen.

Übrigens: Da du nicht möchtest, dass das Bild schwebt, empfehle ich dir, \centeringund \includegraphicsin eine Gruppe ( {...}) zu setzen. Auf diese Weise wird der Text hinter dem Bild nicht mehr zentriert. (Ich nehme an, das möchtest du nicht.)

Antwort2

Zu lang für einen Kommentar: \raggedbottomlösen nicht, dass die Verwendung von \\~\\anstelle vonLeerzeile (= \par)eine Leerzeile zwischen Absätzen zu lassen ist völlig falsch. Sie fügen nur zwei Zeilenumbrüche ein innerhalbein Absatz. Selbst dann sind die Absatzsprünge unterschiedlich und es gibt in den gefälschten Absätzen keine Absatzeinrückungen.

Außerdem haben Sie \centeringvor dem Ende des letzten Absatzes ein Zeichen gesetzt, sodass nicht nur das Bild zentriert ist, sondern auch der letzte Absatz. Das Bild ist auch Teil des Absatzes und verhält sich wie ein riesiges Zeichen, sodass es mit etwas weniger Höhe in derselben Zeile endet wie „… Speicher, wir können“. Andernfalls gehen Sie zur nächsten Seite über, lassen aber ein „Loch“ von etwa 10 cm. LaTeX verwendet dann Gummiabstände zwischen echten Absätzen, die sich ausdehnen, um den Text vertikal auszurichten. Dies geschieht auch, wenn sich das Bild in einem anderen Absatz befindet.

Wenn Sie einen festen Abstand zwischen den Absätzen wünschen, sollten Sie einen Befehl wie den folgenden verwenden:

\setlength{\parskip}{\baselineskip}

Beachten Sie, dass dies überhaupt nicht nötig ist, \raggedbottomda der Absatzschlupf jetzt eine feste Länge und keine Gummilänge hat.

Dennoch ist es normalerweise viel besser, eine anpassbare Länge zu wählen (die jedoch in allen Absätzen der Seite gleich ist), wie:

\setlength{\parskip}{.5em plus .1em minus .1em}      

oder einfacher: Verwenden Sie das Paket parskipin der Präambel.

In diesem Fall ist dies offensichtlich keine gute Lösung, da Sie Latex zwingen, sich zwischen dem einen und dem anderen Übel zu entscheiden (etwa die Hälfte der Seite leer lassen oder einen großen Abstand zwischen den Absätzen lassen, sogar weiter als Sie möchten). Die Lösung in diesem Fall ist, wie Gustavo Mezzetti treffend bemerkte, ein Float mit den Optionen h, toder p, da das Bild dann nicht mehr Teil eines normalen Absatzes ist.

Erwähnenswert ist, dass ein Float normalerweise auch vorzuziehen ist, da dadurch ein ausreichender Abstand zwischen der Abbildung und dem Text darüber und/oder darunter gewährleistet ist (und nummerierte Bildunterschriften, Abbildungsverzeichnisse, vertikale Zentrierung einzelner Bilder usw. möglich sind).

MWE ohne Float:

mwe

\documentclass{book}
\usepackage[margin=2cm]{geometry}
\setlength{\parskip}{\baselineskip}
\usepackage{graphicx}
\usepackage{kantlipsum} % allow \kant[n] for dummy paragraphs
\begin{document}
\kant[2]\par\kant[1]\par\kant[2]\par\kant[1]\par

\centering
\includegraphics[height=12cm]{example-image}
\end{document}

MWE mit Schwimmer:

mwe

\documentclass{book}
\usepackage[margin=2cm]{geometry}
\setlength{\parskip}{.5em plus .1em minus .5em}
\usepackage{graphicx}
\usepackage{kantlipsum} % allow \kant[n] for dummy paragraphs
\begin{document}
\kant[2]\par\kant[1]\par\kant[2]\par\kant[1]
\begin{figure}[h]
\centering
\includegraphics[height=12cm]{example-image}
\end{figure}
\end{document}

Hinweis: \par(= leere Zeile) ist in den \kantMakros bereits implizit enthalten, ich lasse es jedoch in den MWEs belassen, darauf hinzuweisen, dass Absätze mit enden \par(und da zusätzliche \par natürlich ignoriert werden).

verwandte Informationen