![如何使用 mdframed 和 lstlisting 创建新环境?](https://linux22.com/image/459079/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20mdframed%20%E5%92%8C%20lstlisting%20%E5%88%9B%E5%BB%BA%E6%96%B0%E7%8E%AF%E5%A2%83%EF%BC%9F.png)
我想创建一个新的环境,将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}