Listing fügt vertikalen Leerraum ein

Tabellen und Grafiken erstellen und anordnen


Skyfall91
Forum-Anfänger
Forum-Anfänger
Beiträge: 37
Registriert: Mi 26. Aug 2015, 16:33

Listing fügt vertikalen Leerraum ein

Beitrag von Skyfall91 »

Hi Leute,

ich habe folgendes Problem:
Ich möchte gerne etwas Programmier-Code in meine Arbeit mit dem Listing paket einbauen. Ist soweit schon ganz gut, allerdings ist die Grafik völlig verrückt. Hier ein Minimalbeispiel:
\documentclass[
	a4paper,			%A4 Papier
	oneside,			%Einseitig
	bibliography=totoc,	%Literaturverz. in Inhaltsverz. einbinden
	listof=totoc,		%Verzeichnisse in Inhaltsverz. einbinden
	index=totoc,		%Index ins Inhaltsverz. einbinden
	parskip=half,		%Europäischer Satz mit abstand zwischen Absätzen
	chapterprefix=false,%Kapitel anschreiben als Kapitel
	headsepline,		%Linie nach Kopfzeile
	footsepline,		%Linie vor Fusszeile
	%pointlessnumbers,	%Nummern ohne abschließenden Punkt
	12pt				%Grössere Schrift, besser lesbar am bildschrim
]{scrbook}

\usepackage[french, ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[onehalfspacing]{setspace}
\usepackage{showframe}
\usepackage{blindtext}
\usepackage{scrlayer-scrpage}
\usepackage{xcolor}
\usepackage{listings}

\begin{document}
\tableofcontents
\listoffigures

\chapter{Einleitung}

\begin{figure}
\lstset{language=C++,
        basicstyle=\ttfamily\scriptsize,
        keywordstyle=\color{blue}\ttfamily,
        stringstyle=\color{red}\ttfamily,
        commentstyle=\color{green}\ttfamily,
        breaklines=true,
        firstnumber=518,
        framexleftmargin=5mm,
        frame=shadowbox,
        rulesepcolor=\color{blue}
        }
\begin{lstlisting}
Code Zeile 1
Code Zeile 2
Code Zeile 3
Code Zeile 4
Code Zeile 5
\end{lstlisting}
\caption{Listing}
\end{figure}

\end{document}
Wisst ihr wie ich den vertikalen Leerraum wegbringe/woher er kommt?
Kann ich das "Kästchen" in dem der Code steht irgendwie auf Textbreite mit dieser Formatierung bekommen??

Danke im Voraus!

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Codeschnipsel sind keine Abbildungen, du missbrauchst die figure-Umgebung. Das figure-Umgebungen gleiten wird in jeder LaTeX-Einführung erklärt.

Das Paket listings unterstützt von Haus aus captions. Hast du die Anleitung zu Rate gezogen?
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Skyfall91
Forum-Anfänger
Forum-Anfänger
Beiträge: 37
Registriert: Mi 26. Aug 2015, 16:33

Beitrag von Skyfall91 »

Hey danke für die schnelle Antwort!
Bin sogar ein wenig weitergekommen und habe es geschafft die Figure-Umgebung rauszuhaun und die Beschriftung wie in der Paket-Doku vorgesehen einzubauen. Habe den Code jetzt allerdings in ein File extrahiert (Was mir wesentlich besser gefällt) und mit dem lstinputlisting Befehl gearbeitet:
\lstinputlisting[language=C++, caption=Listing, captionpos=b]{./code/Beispiel.cpp}
Der Leerraum ist weg, das war ja mein erstes Anliegen :)
Was jetzt allerdings noch nicht passt ist zum einen, dass die Beschriftung von caption nicht im Abbildungsverzeichnis erscheint, was sie auf jedenfall sollte.
Zum anderen ist das Problem mit der Breite noch offen, sprich das Listing geht über die Textbreite hinaus (siehe Minimalbeispiel). Wäre cool wenns mit genau diesem Layout irgendwie auf Textbreite möglich wäre :/

Besserwisser

Beitrag von Besserwisser »

Wieso denn im Abbildungsverzeichnis? Listings gehören in das Listingsverzeichnis! Wie man das erzeugt, steht ebenfalls in der Anleitung. Dort steht auch, wie man Listings automatische (wahlweise an jedem Zeichen oder an White-Spaces) umbrechen lassen kann. Bei Bedarf kann sogar ein Umbruchmarker eingefügt werden u. v. m.

Besserwisser

Beitrag von Besserwisser »

BTW: Spätestens wenn ein Listing über mehrere Seiten umbrochen werden kann, sollte die Bezeichnung nicht darunter, sondern darüber stehen, ganz wie bei Tabellen.

Skyfall91
Forum-Anfänger
Forum-Anfänger
Beiträge: 37
Registriert: Mi 26. Aug 2015, 16:33

Beitrag von Skyfall91 »

Okay danke! Auch wenn ich nicht so viele Listings habe, habe ich nun doch ein Quellcoderzeichnis angelegt. Klappt eigentlich super soweit und ich bin damit zufrieden 8)

Das letzte Problem was jetzt noch ansteht ist was ich oben schon zwei mal genannt habe. Die Listing-Box geht über den Textbereich seitlich hinaus, hat hier jemand noch die zündende Idee? :)

Besserwisser

Beitrag von Besserwisser »

Besserwisser hat geschrieben:in der Anleitung. Dort steht auch, wie man Listings automatische (wahlweise an jedem Zeichen oder an White-Spaces) umbrechen lassen kann. Bei Bedarf kann sogar ein Umbruchmarker eingefügt werden u. v. m.

Besserwisser

Beitrag von Besserwisser »

Oder meinst du das Stück Rand links, das du mit framexleftmargin=5mm, selbst eingestellt hast?

Besserwisser

Beitrag von Besserwisser »

Vielleicht meinst du ja in Wirklichkeit xleftmargin=5mm?

Skyfall91
Forum-Anfänger
Forum-Anfänger
Beiträge: 37
Registriert: Mi 26. Aug 2015, 16:33

Beitrag von Skyfall91 »

Wenn du das Minimalbeispiel oben öffnest ist das Listing breiter als der Textbereich (geht über den mit shadowframe erzeugten Rand hinaus), das meinte ich ;) Aber habs jetzt hinbekommen mit einer minipage-variante die ich im netz gefunden habe, passt also :P

Hier noch der Code, falls jemand mal drüber stolpert:
\hspace*{\dimexpr\fboxsep+\fboxrule+1.2em}%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep-2\fboxrule-1.2em}
    \lstinputlisting[EINSTELLUNGEN]{DATEIPFAD}
\end{minipage}
Man kann einfach am Ende der ersten beiden Zeilen mit den em-Werten spielen, um das gewünschte Ergebnis zu erzielen.

Antworten