我正在使用listings
用户包将代码摘录插入到我的文档中,但它与普通文本的区分程度不够。有没有办法在代码摘录后面放置灰色背景,就像本网站上使用的那样?
例如:
#include <stdio.h>
int main(int argc, char ** argv)
{
printf("Hello world!\n");
return 0;
}
另外/或者,我可以缩进代码,以便代码区域有更宽的边距吗?
答案1
backgroundcolor
的关键lstlisting
在于您要寻找的彩色背景。缩进一点代码,使用xleftmargin
和framexleftmargin
来满足您的需求。
\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}