列表:增加标题(顶部)和列表之间的内部边距?

列表:增加标题(顶部)和列表之间的内部边距?

使用下面的 MWE(改编自这里),我如何增加列表中的内部边距,以便看起来不再像这样:

在此处输入图片描述

它看起来像这样(注意灰色背景被“拉伸”了一点):

在此处输入图片描述

我试过摆弄等framextopmarginbelowcaptionskip但似乎不起作用内部的利润。

\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
    

在这两种解决方案中,我个人更喜欢第一种,因为我认为底部的单条黑线在视觉上并不那么吸引人。

相关内容