如何防止背景与 \lstinputlisting 中的圆角重叠?

如何防止背景与 \lstinputlisting 中的圆角重叠?

我想在我的文档中包含外部文件列表。这些列表应该具有纯色背景和圆角。问题是,如果我使用 和 定义样式frameroundbackgroundcolor背景会与圆角重叠。

\lstdefinestyle{cftemplate}{
    frameround=tttt,
    rulecolor=\color[rgb]{0.7, 0.7, 0.7},
    frame=single,
    backgroundcolor=\color[rgb]{0.95, 0.95, 0.95}
}

已经存在一个问题如何防止这种行为lstlisting. 尤其是这个答案中提出的解决方案对我来说效果很好。所以我尝试扩展此解决方案,以便它也能与 一起使用\lstinputlisting。但是,在代码片段中用“lstinputlisting”替换“lstlisting”的明显尝试没有奏效。

我的问题是:如何创建具有背景和圆角的 \lstinputlisting,其中背景不与圆角重叠?

答案1

如果你愿意使用tcolorbox包及其listings库,这很容易;使用您可以定义一个可定制的宏,其行为与定义可定制版本\newtcbinputlisting非常相似:\lstinputlisting\newtcblistinglstlisting

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{beramono}% just for the example
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

\newtcbinputlisting{\myinputlisting}[2][]{%
  listing engine=listings,
  listing file={#2},
  colback=red!15,
  colframe=red!75!black,
  arc=12pt,
  listing only,
  listing options={
    language={[LaTeX]TeX},
    basicstyle=\ttfamily\small
  },
  breakable,
  #1
}
\newtcblisting{mylisting}[1][]{%
  listing engine=listings,
  colback=red!15,
  colframe=red!75!black,
  arc=12pt,
  listing only,
  listing options={
    language={[LaTeX]TeX},
    basicstyle=\ttfamily\small
  },
  breakable,
  #1
}


\usepackage{filecontents}
\begin{filecontents*}{Gtest1.tex}  
\newlength\mylena
\newlength\mylenb
\setlength\mylena{2cm}
\setlength\mylenb{4cm}
\addtolength\mylena{\mylenb}
\end{filecontents*}

\begin{document}

\myinputlisting{Gtest1.tex}

\begin{mylisting}[]
\documentclass{article}
\begin{document}
test
\end{document}
\end{mylisting}

\end{document}

在此处输入图片描述

相关内容