如何使用 mdframed 和 lstlisting 创建新环境?

如何使用 mdframed 和 lstlisting 创建新环境?

我想创建一个新的环境,将mdframed和包装lstlisting在一起,如下所示,但这对我来说不起作用,因为它无法编译。有什么想法是什么问题以及如何定义类似于下面我的新环境?

\documentclass{llncs}
\pagestyle{plain}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{beramono}
\usepackage{xcolor}

\usepackage{mdframed}
\definecolor{light-gray}{gray}{0.95} 

\usepackage{listings}
\lstdefinelanguage{Sage}[]{Python}
{morekeywords={False,sage,True},sensitive=true}
\lstset{
  frame=none,
  showtabs=False,
  showspaces=False,
  showstringspaces=False,
  commentstyle={\ttfamily\color{dgreencolor}},
  keywordstyle={\ttfamily\color{dbluecolor}\bfseries},
  stringstyle={\ttfamily\color{dgraycolor}\bfseries},
  language=Sage,
  basicstyle={\fontsize{10pt}{10pt}\ttfamily},
  aboveskip=0.3em,
  belowskip=0.1em,
  numbers=left,
  numberstyle=\footnotesize
}
\definecolor{dblackcolor}{rgb}{0.0,0.0,0.0}
\definecolor{dbluecolor}{rgb}{0.01,0.02,0.7}
\definecolor{dgreencolor}{rgb}{0.2,0.4,0.0}
\definecolor{dgraycolor}{rgb}{0.30,0.3,0.30}
\newcommand{\dblue}{\color{dbluecolor}\bf}
\newcommand{\dred}{\color{dredcolor}\bf}
\newcommand{\dblack}{\color{dblackcolor}\bf}

\newenvironment{code}
{\begin{mdframed}[
    backgroundcolor=light-gray,
    roundcorner=10pt,
    leftmargin=1,
    rightmargin=1,
    innerleftmargin=10,
    innertopmargin=5,
    innerbottommargin=5,
    outerlinewidth=1,
    linecolor=light-gray
]\begin{lstlisting}[numbers=none]}
{\end{lstlisting}\end{mdframed}}

\begin{document}

\section{Test}

A code example:

\begin{code}
sage: R.<x> = ZZ[]
sage: type(R.an_element())
<type 'sage.rings...Polynomial_integer_dense_flint'>
sage: R.<x,y> = ZZ[]
sage: type(R.an_element())
<type 'sage.rings...MPolynomial_libsingular'>
sage: R = PolynomialRing(ZZ, 'x', implementation='NTL')
sage: type(R.an_element())  # this is a comment
<type 'sage.rings...Polynomial_integer_dense_ntl'>
sage: def abc():
...       """
...       This should be a very long comment.
...       That should span multiple lines.
...       To illustrate what colour Sage comments look like.
...       To get a feel for the color when rendered using LaTeX.
...       """
...       return 2
\end{code}

\end{document}

答案1

我建议使用 tcolorbox 包而不是 mdframes。Tcolorbox 内置了对新列表环境的支持:

\documentclass{llncs}
\pagestyle{plain}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{beramono}
\usepackage{xcolor}

\usepackage[most]{tcolorbox}
\definecolor{light-gray}{gray}{0.95} 

\usepackage{listings}
\lstdefinelanguage{Sage}[]{Python}
{morekeywords={False,sage,True},sensitive=true}
\lstset{
  frame=none,
  showtabs=False,
  showspaces=False,
  showstringspaces=False,
  commentstyle={\ttfamily\color{dgreencolor}},
  keywordstyle={\ttfamily\color{dbluecolor}\bfseries},
  stringstyle={\ttfamily\color{dgraycolor}\bfseries},
  language=Sage,
  basicstyle={\fontsize{10pt}{10pt}\ttfamily},
  aboveskip=0.3em,
  belowskip=0.1em,
  numbers=left,
  numberstyle=\footnotesize
}
\definecolor{dblackcolor}{rgb}{0.0,0.0,0.0}
\definecolor{dbluecolor}{rgb}{0.01,0.02,0.7}
\definecolor{dgreencolor}{rgb}{0.2,0.4,0.0}
\definecolor{dgraycolor}{rgb}{0.30,0.3,0.30}
\newcommand{\dblue}{\color{dbluecolor}\bf}
\newcommand{\dred}{\color{dredcolor}\bf}
\newcommand{\dblack}{\color{dblackcolor}\bf}

\newtcblisting{code}{
  listing options={numbers=none},
  colback=light-gray,
  enhanced,
  frame hidden,
  sharp corners,
  listing only,
}

\begin{document}

\section{Test}

A code example:

\begin{code}
sage: R.<x> = ZZ[]
%sage: type(R.an_element())
%<type 'sage.rings...Polynomial_integer_dense_flint'>
%sage: R.<x,y> = ZZ[]
%sage: type(R.an_element())
%<type 'sage.rings...MPolynomial_libsingular'>
%sage: R = PolynomialRing(ZZ, 'x', implementation='NTL')
%sage: type(R.an_element())  # this is a comment
%<type 'sage.rings...Polynomial_integer_dense_ntl'>
%sage: def abc():
%...       """
%...       This should be a very long comment.
%...       That should span multiple lines.
%...       To illustrate what colour Sage comments look like.
%...       To get a feel for the color when rendered using LaTeX.
%...       """
%...       return 2
\end{code}

\end{document}

在此处输入图片描述

相关内容