列表上方和下方的边距不均匀

列表上方和下方的边距不均匀

在我看来,下面代码的输出是错误的。我试图在列表周围添加填充,但我希望边距尽可能窄,最好与连续行之间的空间相匹配(黄线之间的细白空间)。出于某种原因,我无法使底部边距与顶部边距匹配。有什么想法吗?

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

使用相同设置将字体大小加倍显示了该解决方案的可扩展性。

C

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

相关内容