如果你看一下下面的示例在 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}