Listados: ¿aumentar el margen interno entre el título (arriba) y el listado?

Listados: ¿aumentar el margen interno entre el título (arriba) y el listado?

Con el MWE a continuación (adaptado deaquí), ¿cómo aumento el margen interno en el listado para que en lugar de verse así:

ingrese la descripción de la imagen aquí

Se ve así (tenga en cuenta que el fondo gris se ha "estirado" un poco):

ingrese la descripción de la imagen aquí

He intentado jugar con framextopmargin, belowcaptionskipetc. pero no parece funcionar con elinternomargen.

\documentclass{article}
\usepackage[svgnames]{xcolor} 
\usepackage{caption}
\usepackage{listings}
\usepackage{calc} 
\lstdefinestyle{outline}{
         basicstyle=\scriptsize\ttfamily,
         numberstyle=\tiny,
         numbersep=5pt,
         tabsize=2,
         extendedchars=true,
         breaklines=true,
         keywordstyle=\color{blue},
         frame=b,
         stringstyle=\color{green!40!black}\ttfamily,
         showspaces=false,
         showtabs=false,
         numbers=left,
         xleftmargin=17pt,
         framexleftmargin=17pt,
         showstringspaces=false,
         backgroundcolor=\color[RGB]{200,200,200},
         belowcaptionskip=-1pt
}

\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[RGB]{60,100,180}{\parbox{\textwidth - 2 \fboxsep}{\hspace{14pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

\begin{document}
\begin{lstlisting}[style=outline,caption=Test]
First line.
Second line.
\end{lstlisting}
\end{document}

Respuesta1

Parece que es necesario que haya una línea de marco en la parte superior para framextopmarginque tenga algún impacto. Con la excepción de una delgada línea negra entre el título y el marco, esto es exactamente lo que pediste:

\documentclass{article}
\usepackage[svgnames]{xcolor} 
\usepackage{caption}
\usepackage{listings}
\usepackage{calc} 
\lstdefinestyle{outline}{
         basicstyle=\scriptsize\ttfamily,
         numberstyle=\tiny,
         numbersep=5pt,
         tabsize=2,
         extendedchars=true,
         breaklines=true,
         keywordstyle=\color{blue},
         frame=bt,  % <<<<<<<<<<<<<<<<<<<<<<<<<<
         stringstyle=\color{green!40!black}\ttfamily,
         showspaces=false,
         showtabs=false,
         numbers=left,
         xleftmargin=17pt,
         framexleftmargin=17pt,
         framextopmargin=1pt, % <<<<<<<<<<<<<<<<<<<<<<
         showstringspaces=false,
         backgroundcolor=\color[RGB]{200,200,200},
         belowcaptionskip=0pt
}

\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[RGB]{60,100,180}{\parbox{\textwidth - 2 \fboxsep}{\hspace{14pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

\begin{document}
\begin{lstlisting}[style=outline,caption=Test]
First line.
Second line.
\end{lstlisting}
\end{document}

marco

Editar:

Posibles soluciones al problema de la "línea negra":

  1. Para eliminar ambas líneas negras para que sean "invisibles", simplemente puede agregar una rulecolorpalabra clave a la configuración del estilo del listado:

    rulecolor=\color[RGB]{200,200,200},
    
  2. Para eliminar realmente la línea superior para que no se imprima, pero mantenga la línea inferior, desea conservarla frame=bt(ya que esto es necesario para el espaciado), pero agregue lo siguiente al preámbulo después de la configuración de estilo para establecer el ancho de la regla en 0 solo para fotogramas "superiores":

    \usepackage{etoolbox}
    \makeatletter
    \patchcmd{\lst@frameh}{\color@begingroup}{\color@begingroup\if#2T\let\lst@framerulewidth\z@ \fi}{}{}
    \makeatother
    

De estas dos soluciones, personalmente preferiría la primera, ya que no creo que la única línea negra en la parte inferior sea tan atractiva visualmente.

información relacionada