Ich habe das Problem, dass ich ein lstlisting
innerhalb eines verwende itemize
. Dies führt zu dem Problem einer zusätzlichen Zeile in meinem Quellcodeblock, die ich nicht löschen kann. Ich habe bereits fast jeden Parameter ausprobiert, der den Abstand beeinflusst, aber nichts hat funktioniert. Dies ist mein Programm:
\documentclass[a4paper]{scrartcl}
\usepackage[usenames,dvipsnames,table]{xcolor}
\usepackage[latin1]{inputenc}
\usepackage[ngerman,english]{babel}
\usepackage{listings}
\lstset{language=[Visual]{C++},
keepspaces=true,
tabsize=2,
xrightmargin=\parindent,
basicstyle=\ttfamily,
frame=single,
framesep=1mm,
framerule=0pt,
columns=fullflexible,
backgroundcolor=\color[gray]{0.9}}
\begin{document}
There are two kinds of header files:
\begin{itemize}
\item content
\begin{lstlisting}[belowskip=-\baselineskip]
#include <iostream>
\end{lstlisting}
\item more content.
\end{itemize}
\end{document}
was mir die folgende Ausgabe erzeugt:
Zu diesem Thema habe ich bereits Beiträge wie diesen gesehen:vertikaler zusätzlicher Platz unterhalb der Lstlisting-Umgebung innerhalb einer Listenumgebung
Aber die Einstellung \parsep
hat 0pt
bei mir nicht funktioniert.
Ich habe auch versucht
\begin{lstlisting}[belowskip=-\baselineskip]
#include <iostream>
\end{lstlisting}
wie in einem anderen Beitrag vorgeschlagen, aber dann habe ich ein Problem mit meinem Rahmen.
Antwort1
Die leere Zeile am Ende Ihres Codes wird durch das Zeilenumbruchzeichen ganz am Ende Ihrer eingebetteten Auflistung verursacht, also am Ende der Zeile
#include <iostream>
Weil \end{lstlisting}
noch nicht erkannt wurde,listings
wird das Newline-Zeichen gedrucktwörtlichDas gleiche Phänomen tritt auf bei denverbatim
Umwelt auf; siehe die „Randbemerkung“ indiese Antwort.
Diese leere Zeile verschwindet, wenn Sie das betreffende Zeilenumbruchzeichen entfernen, indem Sie schreiben
\begin{lstlisting}
#include <iostream>\end{lstlisting}
anstatt
\begin{lstlisting}
#include <iostream>
\end{lstlisting}
Siehe Abschnitt 2 in meinem Code unten.
Alternativ können Sie das lstautogobble
Paket laden und den Schlüssel aktivieren autogobble
(was hier wünschenswert ist, um zu starke Einrückungen in der Ausgabe zu vermeiden), und die zusätzliche Leerzeile verschwindet; siehe Abschnitt 3 in meinem Code weiter unten.
Beachten Sie auch, dass für eigenständige Auflistungen, also Auflistungen, die sich in externen Quelldateien befinden und über das \lstinputlisting
Makro in Ihr Dokument eingefügt werden, keine Gegenmaßnahme erforderlich ist. Das Problem mit der zusätzlichen Leerzeile tritt nur bei eingebetteten Auflistungen auf (d. h. Auflistungen, die in einer lstlisting
Umgebung enthalten sind). Siehe Abschnitt 4 in meinem Code unten.
Abschließend zum RaumnachNormalerweise passe ich den Wert der Auflistung belowskip
global an. In Ihrem Fall -0.5em
scheint dies angemessen.
\documentclass[a4paper]{scrartcl}
\usepackage[usenames,dvipsnames,table]{xcolor}
\usepackage[latin1]{inputenc}
\usepackage[ngerman,english]{babel}
\usepackage{listings}
\usepackage{lstautogobble}
\lstset
{
language = [Visual]{C++},
keepspaces = true,
tabsize = 2,
xrightmargin = \parindent,
basicstyle = \ttfamily,
frame = single,
framesep = 1mm,
framerule = 0pt,
columns = fullflexible,
belowskip = -0.5em,
backgroundcolor = \color[gray]{0.9},
}
\usepackage{filecontents}
\begin{filecontents*}{sample.c}
#include <iostream>
\end{filecontents*}
\begin{document}
\section{Your listing}
There are two kinds of header files:
\begin{itemize}
\item content
\begin{lstlisting}
#include <iostream>
\end{lstlisting}
\item more content.
\end{itemize}
\section{Your listing without the newline at the end}
There are two kinds of header files:
\begin{itemize}
\item content
\begin{lstlisting}
#include <iostream>\end{lstlisting}
\item more content.
\end{itemize}
\section{Your listing with \texttt{autogobble}}
There are two kinds of header files:
\begin{itemize}
\item content
\begin{lstlisting}[autogobble]
#include <iostream>
\end{lstlisting}
\item more content.
\end{itemize}
\section{Your listing inserted from an external file}
There are two kinds of header files:
\begin{itemize}
\item content
\lstinputlisting{sample.c}
\item more content.
\end{itemize}
\end{document}