%20%D0%B8%20%D0%BB%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%BE%D0%BC%3F.png)
С 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
Из этих двух решений я бы лично предпочел первое, так как не думаю, что одиночная черная линия внизу выглядит так уж привлекательно.