\makeatletter \RequirePackage{enverb} \global\let\enverb@ex@stored\@empty \ekvdefinekeys{enverb/ex} { boolTF store = \enverb@ex@ifstore ,invboolTF no-store = \enverb@ex@ifstore ,boolTF restore = \enverb@ex@ifrestore ,boolTF no-lst = \enverb@ex@ifnolst ,also nmeta no-lst = below ,nmeta undo-no-lst = {no-lst=false, undo-below} ,boolTF no-tcb = \enverb@ex@ifnotcb ,also nmeta no-tcb = below ,nmeta undo-no-tcb = {no-tcb=false, undo-below} ,boolTF same-line = \enverb@ex@ifsameline ,unknown-choice same-line = \let\enverb@ex@ifsameline\@firstoftwo\def\enverb@ex@codeshare{#1} ,initial same-line = 0.6 ,invboolTF other-line = \enverb@ex@ifsameline ,nmeta below = {other-line} ,nmeta undo-below = {same-line} ,store inter = \enverb@ex@inter ,code aboveskip = \def\enverb@ex@above{\vskip#1\relax} ,code belowskip = \def\enverb@ex@below{\vskip#1\relax} ,default aboveskip = \medskipamount ,default belowskip = \medskipamount ,initial aboveskip ,initial belowskip ,noval no-aboveskip = \let\enverb@ex@above\@empty ,noval no-belowskip = \let\enverb@ex@below\@empty % listings ,store lst = \enverb@ex@options@lst ,initial lst = {aboveskip=0pt, belowskip=0pt} ,store same-line-lst = \enverb@ex@options@lst@same ,meta slst = same-line-lst={#1} ,store other-line-lst = \enverb@ex@options@lst@other ,meta olst = other-line-lst={#1} % tcolorbox ,store tcb = \enverb@ex@options@tcb ,initial tcb = {nobeforeafter} ,store same-line-tcb = \enverb@ex@options@tcb@same ,initial same-line-tcb = {box align=center} ,meta stcb = same-line-tcb={#1} ,store other-line-tcb = \enverb@ex@options@tcb@other ,meta otcb = other-line-tcb={#1} } \newenvironment{ex} {\enverb{key-set=enverb/ex}} {% \par \enverb@ex@above \noindent \expanded{\noexpand\begin{exwrap}{\enverb@ex@ifsameline{}{breakable}}} \enverb@ex@ifnolst {}% {% \enverb@ex@ifsameline {\noindent\begin{minipage}[c]{\enverb@ex@codeshare\linewidth}}% {}% \ExpandArgs{ne}\enverbListing{lstlisting}% {% [{% \unexpanded\expandafter{\enverb@ex@options@lst},% \enverb@ex@ifsameline {\unexpanded\expandafter{\enverb@ex@options@lst@same}}% {\unexpanded\expandafter{\enverb@ex@options@lst@other}}% }]% }% \enverb@ex@ifsameline {\end{minipage}}% {}% }% \enverb@ex@ifstore {% \xdef\enverb@ex@stored {% \unexpanded\expandafter{\enverb@ex@stored}% \unexpanded\expandafter{\enverbBody}% }% }% {}% \enverb@ex@ifrestore {% \edef\enverbBody {% \unexpanded\expandafter{\enverb@ex@stored}% \unexpanded\expandafter{\enverbBody}% }% \global\let\enverb@ex@stored\@empty }% {}% \enverb@ex@ifnotcb {}% {% \enverb@ex@ifsameline{}{\medskip}% \expanded{\noexpand\begin{exbox}% {% \unexpanded\expandafter{\enverb@ex@options@tcb},% \enverb@ex@ifsameline {\unexpanded\expandafter{\enverb@ex@options@tcb@same}}% {\unexpanded\expandafter{\enverb@ex@options@tcb@other}}% }}% {\linewidth\enverb@ex@ifsameline{-\enverb@ex@codeshare\linewidth}{}}% \enverbExecute \end{exbox}% }% \end{exwrap}% \par \enverb@ex@below \@endpetrue } \RequirePackage{listings}% >>= \newcommand\extexcsstyle{\exbasestyle\color{green!50!black}\bfseries} \newcommand\exbasestyle{\ttfamily} \lstset { language=[LaTeX]TeX ,flexiblecolumns=true ,basicstyle=\exbasestyle ,texcsstyle=*\extexcsstyle ,moretexcs=% {% UseName,ExpandArgs,textcolor,color,colorbox,expanded,unexpanded,@empty,% @firstoftwo,@endpetrue,RequirePackage,lstset,usetikzlibrary,% pgfmathsetseed,newtcolorbox,tcbsubskin,tikzset,dimexpr% } ,moretexcs=[2]{enverb,enverbBody,enverbExecute,enverbListing} ,texcsstyle=*[2]\exbasestyle\color{enverbred}\bfseries ,literate={\{}{{\extexcsstyle\string{\iffalse}\fi}}{1} {\}}{{\extexcsstyle\iffalse{\fi\string}}}{1} }% =<< \RequirePackage[most]{tcolorbox}%>>= \RequirePackage{tikz} \usetikzlibrary{decorations.pathmorphing,calc} \pgfmathsetseed{1} % To have predictable results % Define paper style \tikzset{ % based on https://tex.stackexchange.com/questions/580671 ragged border/.style={% decoration={random steps, segment length=2mm, amplitude=0.5mm}, decorate, } } \tcbsubskin{exwrap}{standard} {% width=\linewidth ,colframe=enverbgrey ,colback=enverbred!15!white ,title=Example ,nobeforeafter ,arc=5mm ,sharp corners=northwest ,toprule at break=-1sp ,bottomrule at break=-1sp } \tcbsubskin{exwrap-first}{exwrap}{sharp corners=south} \tcbsubskin{exwrap-mid}{exwrap}{sharp corners=all} \tcbsubskin{exwrap-last}{exwrap}{sharp corners=north} \newtcolorbox{exbox}[2] {% colback=white% ,colframe=white% ,geometry nodes=true ,interior code= {% \fill[white] decorate[ragged border]{ ($(frame.south east) - (0, 1mm)$) -- ($(frame.south west) - (0, 1mm)$) } -- (frame.south west) -- ++(0, 1pt) -| (frame.south east) -- cycle; \fill[white] decorate[ragged border]{ ($(frame.north east) + (0, 1mm)$) -- ($(frame.north west) + (0, 1mm)$) } -- (frame.north west) -- ++(0, -1pt) -| (frame.north east) -- cycle; } ,fontupper=\small ,width={\dimexpr#2\relax}% ,sharp corners=all ,boxsep=0pt ,top=\fboxsep ,bottom=\fboxsep ,left=\fboxsep ,right=\fboxsep ,#1% } \newtcolorbox{exwrap}[1] {% skin=exwrap ,skin first=exwrap-first ,skin middle=exwrap-mid ,skin last=exwrap-last ,#1% } %=<< \makeatother