Листинги: увеличить внутреннее поле между заголовком (вверху) и листингом?

Листинги: увеличить внутреннее поле между заголовком (вверху) и листингом?

С MWE ниже (адаптировано изздесь), как мне увеличить внутреннее поле в листинге, чтобы вместо этого выглядело так:

введите описание изображения здесь

Выглядит это так (обратите внимание, что серый фон немного «растянут»):

введите описание изображения здесь

Я пробовал играть с framextopmarginи belowcaptionskipт. д., но, похоже, это не работает.внутреннийдопуск.

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

решение1

Похоже, что сверху должна быть линия рамки, чтобы это framextopmarginимело какое-то воздействие. За исключением тонкой черной линии между подписью и самой рамкой, это именно то, что вы просили:

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

рамка

Редактировать:

Возможные решения проблемы «черной линии»:

  1. Чтобы удалить обе черные линии и сделать их «невидимыми», можно просто добавить rulecolorключевое слово в настройку стиля листинга:

    rulecolor=\color[RGB]{200,200,200},
    
  2. Чтобы на самом деле удалить верхнюю строку, чтобы она не печаталась, но оставить нижнюю строку, которую нужно сохранить frame=bt(так как она нужна для интервала), но добавить следующее в преамбулу после настроек стиля, чтобы установить ширину правила на 0 только для «верхних» кадров:

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

Из этих двух решений я бы лично предпочел первое, так как не думаю, что одиночная черная линия внизу выглядит так уж привлекательно.

Связанный контент