使用下面的 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}
编辑:
解决“黑线”问题的可能方法:
要删除两条黑线使它们“不可见”,您只需
rulecolor
在列表样式设置中添加一个关键字:rulecolor=\color[RGB]{200,200,200},
要真正删除顶线以使其不打印,但保留底线,您需要保留
frame=bt
(因为这是间距所需要的),但在样式设置后的序言中添加以下内容以将规则宽度设置为 0 仅适用于“顶部”框架:\usepackage{etoolbox} \makeatletter \patchcmd{\lst@frameh}{\color@begingroup}{\color@begingroup\if#2T\let\lst@framerulewidth\z@ \fi}{}{} \makeatother
在这两种解决方案中,我个人更喜欢第一种,因为我认为底部的单条黑线在视觉上并不那么吸引人。