`\newcommand` または `\newenvironment` で `tikzpicture` を `lstlisting` と一緒に使用します。

`\newcommand` または `\newenvironment` で `tikzpicture` を `lstlisting` と一緒に使用します。

\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が、必要な環境が 2 つ (図の最初の部分と 2 番目の部分) のところ、1 つの環境しか使用できません。これをうまく解決するための推奨される方法は何ですか?

(私は tcolorbox を避けたいと思います。なぜなら、そのパッケージとその依存関係の多くが含まれない非常に不完全な texlive 環境で作業する必要があるからです。)


動作しない最小限の例:

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

関連情報