Utilice `tikzpicture` en `\newcommand` o `\newenvironment` junto con `lstlisting`

Utilice `tikzpicture` en `\newcommand` o `\newenvironment` junto con `lstlisting`

Definí el siguiente comando \recommpara imprimir un cuadro con un cuerpo separado y un título:

\newcommand{\recomm}[3]{
  \vspace{0.5cm}
  \noindent 
  \begin{tikzpicture}
    \node [rectangle, inner sep=10pt] (box){%
        \begin{minipage}{\dimexpr\linewidth-20pt-\pgflinewidth\relax}
            #2
        \end{minipage}
    };
    \node [rectangle, inner sep=10pt, fill=black!15, below right] (box2) at (box.south west){%
        \begin{minipage}{\dimexpr\linewidth-20pt-\pgflinewidth\relax}
            #3
        \end{minipage}
    };
    \draw[draw=blue!75!black, very thick] 
      -- (box2.south west)
      -- (box.north west)
      -- (box.north east)
      -- (box2.south east)
      -- (box2.south west);
    \node[above right, fill=blue!75!black, text=white, font=\bfseries] at (box.north west) {#1};
  \end{tikzpicture}%
}

Esto funciona bien e imprime un bonito cuadro cuando se usa con una entrada simple:

\recomm{Title}{%
  Some content in the first part
}{%
  Some content in the second part
}

caja de trabajo

Sin embargo, cuando intento insertar una lista de código usando el lstlistingentorno, aparece todo tipo de errores:

\recomm{Title}{%
  Some content in the first part
}{%
  Some content in the second part

  \begin{lstlisting}
    a=b
  \end{lstlisting}
}
Argument of \lst@next has an extra }.
<inserted text> 
                \par 
l.185 }

Intenté usar \newenvironment, pero eso solo permite un único entorno donde necesito dos (la primera y la segunda parte de la imagen). ¿Cuál es la forma recomendada de resolver esto bien?

(Me gustaría evitar tcolorbox, ya que tengo que trabajar con un entorno texlive muy incompleto donde ese paquete y muchas de sus dependencias no están incluidos).


Ejemplo mínimo que no funciona:

\documentclass{article}

\usepackage{listings}
\usepackage{tikz}

\newcommand{\recomm}[2]{
  \begin{tikzpicture}
    \node [rectangle, inner sep=10pt] (box){%
        \begin{minipage}{\dimexpr\linewidth-20pt-\pgflinewidth\relax}
            #1
        \end{minipage}
    };
    \node [rectangle, inner sep=10pt, fill=black!15, below right] (box2) at (box.south west){%
        \begin{minipage}{\dimexpr\linewidth-20pt-\pgflinewidth\relax}
            #2
        \end{minipage}
    };
}

\begin{document}

\recomm{%
  Some content in the first part
}{%
  Some content in the second part

  \begin{lstlisting}
    a=b
  \end{lstlisting}
}

\end{document}

información relacionada