`lstlisting`과 함께 `\newcommand` 또는 `\newenvironment`에서 `tikzpicture`를 사용하세요.

`lstlisting`과 함께 `\newcommand` 또는 `\newenvironment`에서 `tikzpicture`를 사용하세요.

\recomm본문과 제목이 구분된 상자를 인쇄하기 위해 다음 명령을 정의했습니다 .

\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}%
}

이것은 잘 작동하며 간단한 입력과 함께 사용하면 멋진 상자를 인쇄합니다.

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

작업 상자

그러나 환경을 사용하여 코드 목록을 삽입하려고 하면 lstlisting온갖 종류의 오류가 발생합니다.

\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 }

을 사용해 보았지만 \newenvironment이는 두 개가 필요한 단일 환경(그림의 첫 번째와 두 번째 부분)에만 허용됩니다. 이 문제를 잘 해결하기 위해 권장되는 방법은 무엇입니까?

(나는 해당 패키지와 많은 종속성이 포함되지 않은 매우 불완전한 texlive 환경에서 작업해야 하기 때문에 tcolorbox를 피하고 싶습니다.)


최소한 작동하지 않는 예:

\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}

관련 정보