上市环境中的优雅利润?

上市环境中的优雅利润?

如果你看一下下面的示例在 StackExchange 中的呈现方式,你会看到 hello world 代码周围有漂亮的边距:

int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}

我希望在 LaTeX 中获得同样的效果,但这似乎很难……我希望在3em顶部和底部以及1em左侧和右侧获得与 Stack Exchange 相同的效果。它framexleftmargin实际上不起作用,因为它没有缩进框架,而且看起来相当丑陋。

\documentclass[10pt, oneside]{article}

\usepackage[a4paper, total={16cm, 24cm}]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\usepackage{listings}

\definecolor{mygray}{rgb}{0.9,0.9,0.9}

\lstset{
  language=c,
  backgroundcolor=\color{mygray},
  aboveskip=3em, % Not working
  belowskip=3em, % Not working
  % framexleftmargin=1em,
}

\begin{document}
\section{Some code}
 
Lorem Ipsum:

\begin{lstlisting}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{lstlisting}
\end{document}

答案1

您必须绘制一个框架,因为如果您设置frame=none边距命令不起作用。因此您需要frame=single绘制framerule=0pt一个不可见的框架。现在您可以在框架内设置边距,然后缩进整个框架,使其与文本对齐:

\documentclass[10pt]{article}

\usepackage[a4paper, showframe]{geometry}
\usepackage{fontspec}
\usepackage[table]{xcolor}
\usepackage{listings}

\definecolor{mygray}{rgb}{0.9,0.9,0.9}

\lstset{
  language=c,
  backgroundcolor=\color{mygray},
  frame=single,
  framerule=0pt,
  framextopmargin=3ex,
  framexbottommargin=3ex,
  framexleftmargin=1em,
  xleftmargin={\dimexpr 1em+3pt},
  linewidth={\dimexpr \linewidth-3pt}
}

\begin{document}
\section{Some code}
 
Lorem Ipsum:

\begin{lstlisting}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{lstlisting}
\end{document}

在此处输入图片描述

相关内容