¿Cómo me deshago de la línea en blanco adicional al final de mi listado?

¿Cómo me deshago de la línea en blanco adicional al final de mi listado?

Tengo el problema de que uso un lstlistinginside an itemize. Esto genera el problema de una línea adicional en mi bloque de código fuente que no puedo eliminar. Ya probé casi todos los parámetros que afectan el espaciado pero nada funcionó. Este es mi programa:

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

lo que me produce el siguiente resultado:

ingrese la descripción de la imagen aquí

Ya he visto publicaciones que tratan este tema como esta:espacio adicional vertical debajo del entorno de lista dentro de un entorno de lista Pero configurarlo \parsepno 0ptfuncionó para mí.

yo también lo intenté

\begin{lstlisting}[belowskip=-\baselineskip]
#include <iostream>
\end{lstlisting}

como se sugirió en otra publicación, pero luego tengo un problema con mi marco.

Respuesta1

La línea en blanco al final de su código se debe al carácter de nueva línea al final de su lista incrustada, es decir, al final de la línea.

#include <iostream>

Debido a que \end{lstlisting}aún no se ha detectado, listingsimprime ese carácter de nueva línealiteral. El mismo fenómeno ocurre con el verbatimmedio ambiente; ver la "nota al margen" enesta respuesta.

Esa línea en blanco desaparecerá si elimina el carácter de nueva línea en cuestión, escribiendo

\begin{lstlisting}
#include <iostream>\end{lstlisting}

en lugar de

\begin{lstlisting}
#include <iostream>
\end{lstlisting}

Consulte la sección 2 en mi código a continuación.

Alternativamente, si carga el lstautogobblepaquete y activa la autogobbleclave (lo cual es deseable aquí, para evitar demasiada sangría en la salida), esa línea en blanco adicional desaparece; consulte la sección 3 en mi código a continuación.

Además, tenga en cuenta que no se requieren contramedidas para listados independientes, es decir, listados que residen en archivos fuente externos y se insertan en su documento a través de la \lstinputlistingmacro. El problema de la línea en blanco adicional sólo ocurre con listados incrustados (es decir, listados contenidos dentro de unlstlisting entorno). Consulte la sección 4 en mi código a continuación.

Finalmente, en cuanto al espaciodespuésEn el listado, normalmente modifico el valor de belowskipglobalmente; en su caso, -0.5emparece apropiado.

ingrese la descripción de la imagen aquí

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

información relacionada