在我看来,下面代码的输出是错误的。我试图在列表周围添加填充,但我希望边距尽可能窄,最好与连续行之间的空间相匹配(黄线之间的细白空间)。出于某种原因,我无法使底部边距与顶部边距匹配。有什么想法吗?
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{soul}
\lstset
{ basicstyle=\ttfamily
, backgroundcolor=\color{orange}
, frame=tblr
, framerule=0pt
, framesep=0pt
, framextopmargin=1ex
, aboveskip=1ex
, framexbottommargin=1ex
, belowskip=1ex
, framexleftmargin=1.5ex
, xleftmargin=1.5ex
, framexrightmargin=1.5ex
, xrightmargin=1.5ex
}
\begin{document}
\noindent
\hl{Lorem ipsum dolor sit amet}
\newline
\hl{Lorem ipsum dolor sit amet}
\begin{lstlisting}[language=C]
#include <stdio>
int main(int argc, char** argv) {
printf("hello world!");
return 0;
}
\end{lstlisting}
\hl{Lorem ipsum dolor sit amet}
\newline
\hl{Lorem ipsum dolor sit amet}
\end{document}
答案1
这种方法旨在在列表之前和之后设置“视觉上相等”的空白(通过使用文本行中的上升部和下降部而不是其基线)。
可以通过设置来控制这个空间xtspace
。
\setlength{\xtspace}{<length>}
使用相同设置将字体大小加倍显示了该解决方案的可扩展性。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{soul}
%************************************************************ added
\newlength{\topshift}
\newlength{\bottomshift}
\newlength{\xmargins}
\newlength{\xtspace}
\setlength{\xtspace}{0.2\baselineskip}% adjust space above and bellow the listing <<<<<<<<<<<<<<<<
\setlength{\xmargins}{0.5\baselineskip} % adjust framextopmargin & framexbottommargin
\setlength{\topshift}{\dimexpr\baselineskip-1em+\xtspace}
\setlength{\bottomshift}{\dimexpr-1ex+\xtspace}
%************************************************************
\lstset
{ basicstyle=\ttfamily,
backgroundcolor=\color{orange},
frame=tblr,
framerule=0pt,
framesep=0pt,
framextopmargin=\xmargins, % changed
aboveskip=\topshift, % changed
framexbottommargin=\xmargins, % changed
belowskip=\bottomshift, % changed
framexleftmargin=1.5ex,
xleftmargin=1.5ex,
framexrightmargin=1.5ex,
xrightmargin=1.5ex
}
\begin{document}
\textbf{Fontsize= 10pt}
\fontsize{10pt}{12pt}\selectfont
\noindent
Lorem ipsum dolor sit amet
\newline
Lorem ipsum dolor sit amet
\begin{lstlisting}[language=C]
#include <stdio>
int main(int argc, char** argv) {
printf("hello world!");
return 0;
}
\end{lstlisting}
Lorem ipsum dolor sit amet
\newline
Lorem ipsum dolor sit amet
\bigskip
\fontsize{20pt}{24pt}\selectfont
\textbf{Fontsize= 20pt}
\setlength{\xtspace}{0.2\baselineskip}% adjust space above and bellow the listing <<<<<<<<<<<
\setlength{\xmargins}{0.5\baselineskip} % adjust framextopmargin & framexbottommargin
\setlength{\topshift}{\dimexpr\baselineskip-1em+\xtspace}
\setlength{\bottomshift}{\dimexpr-1ex+\xtspace}
\noindent
Lorem ipsum dolor sit amet
\newline
Lorem ipsum dolor sit amet
\begin{lstlisting}[language=C]
#include <stdio>
int main(int argc, char** argv) {
printf("hello world!");
return 0;
}
\end{lstlisting}
Lorem ipsum dolor sit amet
\newline
Lorem ipsum dolor sit amet
\end{document}