Wie entferne ich die zusätzliche Leerzeile am Ende meiner Auflistung?

Wie entferne ich die zusätzliche Leerzeile am Ende meiner Auflistung?

Ich habe das Problem, dass ich ein lstlistinginnerhalb 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:

Bildbeschreibung hier eingeben

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 \parsephat 0ptbei 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 lstautogobblePaket 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 \lstinputlistingMakro 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 lstlistingUmgebung enthalten sind). Siehe Abschnitt 4 in meinem Code unten.

Abschließend zum RaumnachNormalerweise passe ich den Wert der Auflistung belowskipglobal an. In Ihrem Fall -0.5emscheint dies angemessen.

Bildbeschreibung hier eingeben

\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}

verwandte Informationen