在 Latex 文档中的代码摘录后面放置灰色背景(就像这个网站所做的那样)

在 Latex 文档中的代码摘录后面放置灰色背景(就像这个网站所做的那样)

我正在使用listings用户包将代码摘录插入到我的文档中,但它与普通文本的区分程度不够。有没有办法在代码摘录后面放置灰色背景,就像本网站上使用的那样?

例如:

#include <stdio.h>

int main(int argc, char ** argv)
{
  printf("Hello world!\n");
  return 0;
}

另外/或者,我可以缩进代码,以便代码区域有更宽的边距吗?

答案1

backgroundcolor的关键lstlisting在于您要寻找的彩色背景。缩进一点代码,使用xleftmarginframexleftmargin来满足您的需求。

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\begin{document}
Test

\begin{lstlisting}[backgroundcolor = \color{lightgray},
                   language = C,
                   xleftmargin = 2cm,
                   framexleftmargin = 1em]
#include <stdio.h>

int main(int argc, char ** argv)
{
  printf("Hello world!\n");
  return 0;
}
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

我尝试了各种不同的选项,最后找到了另一种方法。我将在这里添加它作为替代建议。

这看起来与 stackexchange 网站上使用的风格非常相似。

%Put in the header

\usepackage{listings} %code extracts
\usepackage{xcolor} %custom colours
\usepackage{mdframed} %nice frames

\definecolor{light-gray}{gray}{0.95} %the shade of grey that stack exchange uses

%Put in the main document

\begin{mdframed}[backgroundcolor=light-gray, roundcorner=10pt,leftmargin=1, rightmargin=1, innerleftmargin=15, innertopmargin=15,innerbottommargin=15, outerlinewidth=1, linecolor=light-gray]
\begin{lstlisting}
    #include <stdio.h>

    int main(int argc, char ** argv)
    {
      printf("Hello world!\n");
      return 0;
    }
\end{lstlisting}
\end{mdframed} 

答案3

这是使用的另一个解决方案tcolorbox (version 3.02)

第一个变体是可破坏的并使用全线宽度:

\documentclass{article}
\usepackage{xcolor}
\usepackage[skins,listings,breakable]{tcolorbox}
\begin{document}

\begin{tcblisting}{breakable,listing only,
  listing options={language=c,aboveskip=0pt,belowskip=0pt},
  size=fbox,boxrule=0pt,frame hidden,arc=0pt,colback=lightgray}
#include <stdio.h>

int main(int argc, char ** argv)
{
  printf("Hello world!\n");
  return 0;
}
\end{tcblisting}

\end{document}

在此处输入图片描述

第二种变体不可破坏,但灰色背景会适应代码宽度:

\documentclass{article}
\usepackage{xcolor}
\usepackage[skins,listings,breakable]{tcolorbox}
\begin{document}

\begin{tcblisting}{hbox,listing only,
  listing options={language=c,aboveskip=0pt,belowskip=0pt},
  size=fbox,boxrule=0pt,frame hidden,arc=0pt,colback=lightgray}
#include <stdio.h>

int main(int argc, char ** argv)
{
  printf("Hello world!\n");
  return 0;
}
\end{tcblisting}

\end{document}

在此处输入图片描述

相关内容