To draw such a frame you should use an other package which allows such modifications. The default packages are mdframed
or tcolorbox
. In the example below I provided a solution using tcolorbox
whereby a new listings environment lstmcode
is defined. Please note that I am using the version 2.22 for the example below.
\documentclass{article}
\usepackage{mcode, listings}
\lstdefinestyle{mymcode}{%
basicstyle=\fontfamily{pcr}\fontseries{m}\selectfont\footnotesize,
numbers=left,
numberstyle=\color{gray}\fontfamily{pcr}\fontseries{m}\selectfont\tiny,
stepnumber=1,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
breaklines=true,
breakatwhitespace=false,
belowskip=0pt,
aboveskip=0pt,
}
\definecolor{cornsilk}{RGB}{255,248,220}
\usepackage[breakable,listings,skins,hooks]{tcolorbox}
\newtcblisting{lstmcode}{%
breakable,
colback=cornsilk,
listing options={style=mymcode},
listing only,
enhanced,
overlay first app={%
\draw[dashed,line width=1pt,xshift=1pt] (frame.south east) -- (frame.south west);%
},
overlay middle app={%
\draw[dashed,line width=1pt,xshift=-1pt] (frame.north east) -- (frame.north west);
\draw[dashed,line width=1pt,xshift=1pt] (frame.south east) -- (frame.south west);%
},
overlay last app={%
\draw[dashed,line width=1pt,xshift=-1pt] (frame.north east) -- (frame.north west);
},
}
\begin{document}
\section{Section Something}
The following code is just a really long list of comments, really.
\begin{lstmcode}
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% It would be nice with a horisontal dashed line below me.
% Another dashed above me, too.
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
\end{lstmcode}
\end{document}
Here an other approach using mdframed
. The output is equal:
\documentclass{article}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{mcode, listings}
\lstdefinestyle{mymcode}{%
basicstyle=\fontfamily{pcr}\fontseries{m}\selectfont\footnotesize,
numbers=left,
numberstyle=\color{gray}\fontfamily{pcr}\fontseries{m}\selectfont\tiny,
stepnumber=1,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
breaklines=true,
breakatwhitespace=false,
belowskip=0pt,
aboveskip=0pt,
}
\definecolor{cornsilk}{RGB}{255,248,220}
\mdfdefinestyle{mcode}{%
roundcorner=5pt,
skipabove=10pt,skipbelow=10pt,
middlelinewidth=1pt,
backgroundcolor=cornsilk,
firstextra={\draw[dashed,line width=1pt,xshift=1pt] (O) -- (P|-O);},
secondextra={\draw[dashed,line width=1pt,xshift=-1pt] (O|-P) -- (P);},
middleextra={\draw[dashed,line width=1pt,xshift=1pt] (O) -- (P|-O);\draw[dashed,line width=1pt,xshift=-1pt] (O|-P) -- (P);},
}
\lstnewenvironment{lstmcode}
{\lstset{style=mymcode}}{}
\surroundwithmdframed[style=mcode]{lstmcode}
\begin{document}
\section{Section Something}
The following code is just a really long list of comments, really.
\begin{lstmcode}
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% It would be nice with a horisontal dashed line below me.
% Another dashed above me, too.
% Matlab code
% Matlab code
% Matlab code
% Matlab code
% Matlab code
\end{lstmcode}
\end{document}
What you place before can be empty. The following example is taken from Vertically centered horizontal rule filling the rest of a line?:
\documentclass{article}
\usepackage{xhfill}% http://ctan.org/pkg/xhfill
\newcommand{\xfill}[2][1ex]{{%
\dimen0=#2\advance\dimen0 by #1
\leaders\hrule height \dimen0 depth -#1\hfill%
}}
\setlength{\parindent}{0pt}
\begin{document}
\mbox{}\xfill{1pt} Here is some text \par
\mbox{}\xfill{8pt} Here is some text \par
\mbox{}\xhrulefill{blue}{2pt} Here is some text \par
\mbox{}\xhrulefill{cyan}{1ex} Here is some text \par
\mbox{}\xrfill[0ex]{1ex}[red]{} Here is some text \par
\end{document}
\mbox{}
sets an empty box and initiates a paragraph (similar to what TeX's \leavevmode
does). Also, to avoid paragraph indentation, I've set \parindent
to 0pt
. However, you can control this individually using \noindent
.
Best Answer
The
rule
command has a "raise" optional argument:You can define
and then use