Auflistungen: Innenrand zwischen Überschrift (oben) und Auflistung vergrößern?

Auflistungen: Innenrand zwischen Überschrift (oben) und Auflistung vergrößern?

Mit dem untenstehenden MWE (adaptiert vonHier), wie vergrößere ich den inneren Rand in der Auflistung, sodass er nicht so aussieht:

Bildbeschreibung hier eingeben

Es sieht so aus (beachten Sie, dass der graue Hintergrund etwas „gestreckt“ wurde):

Bildbeschreibung hier eingeben

Ich habe versucht, mit framextopmargin, belowcaptionskipetc. herumzuspielen, aber es scheint nicht zu funktionieren mit deminternMarge.

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

Antwort1

Es sieht so aus, als ob oben eine Rahmenlinie vorhanden sein muss, um framextopmargineine Wirkung zu erzielen. Mit Ausnahme einer dünnen schwarzen Linie zwischen der Überschrift und dem Rahmen selbst ist dies genau das, wonach Sie gefragt haben:

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

rahmen

Bearbeiten:

Mögliche Lösungen für das „schwarze Linie“-Problem:

  1. Um die beiden schwarzen Linien zu entfernen, sodass sie „unsichtbar“ sind, können Sie einfach ein rulecolorSchlüsselwort zur Einrichtung des Listing-Stils hinzufügen:

    rulecolor=\color[RGB]{200,200,200},
    
  2. Um die obere Zeile tatsächlich zu entfernen, sodass sie nicht gedruckt wird, aber die untere Zeile beizubehalten, die Sie behalten möchten frame=bt(da diese für den Abstand benötigt wird), fügen Sie der Präambel nach den Stileinstellungen jedoch Folgendes hinzu, um die Regelbreite nur für „obere“ Rahmen auf 0 zu setzen:

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

Von diesen beiden Lösungen würde ich persönlich die erste bevorzugen, da ich die einzelne schwarze Linie am unteren Rand optisch nicht so ansprechend finde.

verwandte Informationen