mdframed、lstlisting 和 subfig 的问题

mdframed、lstlisting 和 subfig 的问题

我试图理解为什么下面的代码不能编译。

\documentclass[12pt]{article}
\usepackage[svgnames]{xcolor}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{listings}
\lstnewenvironment{lstframed}
{
    \mdframed[backgroundcolor=LightSlateGray!10] }
{
    \endmdframed
}

\usepackage{subfig}
\begin{document}

\begin{figure}[H]
    \centering
    \subfloat[A]{
        B
    } \\
    \subfloat[C]{
        \begin{lstframed}
            D
        \end{lstframed}
    }
    \caption{E}
\end{figure}
\end{document}

如果我不使用mdframed,那么一切都很好,但我在真实文档中使用了一个花哨的框架,所以我真的需要它。

答案1

问题在于,您试图将逐字材料放入命令 ( \subfloat) 的参数中,而这存在严重的限制,正如您所经历的那样。一种选择是预先将列表材料装箱:

\documentclass[12pt]{article}
\usepackage[svgnames]{xcolor}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{listings}
\usepackage{subfig}

\lstnewenvironment{lstframed}
  {
    \mdframed[backgroundcolor=LightSlateGray!50]
  }
  {
    \endmdframed
  }

\newsavebox\mybox

\begin{document}

\begin{lrbox}{\mybox}
\begin{minipage}{\linewidth}
\begin{lstframed}
Some test code
\end{lstframed}
\end{minipage}
\end{lrbox}

\begin{figure}[H]
    \centering
    \subfloat[Caption for the first subfloat]{%
    \rule{5cm}{2cm}%
    } \par
    \subfloat[Caption for the second subfloat]{%
    \usebox\mybox%
    }
    \caption{E}
\end{figure}

\end{document}

在此处输入图片描述

另一种方法是使用tcolorbox包,因为它为包提供了现成的支持listings。无论如何,由于您要将逐字材料放在参数中,因此\subfloat您需要前面的装箱:

\documentclass[12pt]{article}
\usepackage[svgnames]{xcolor}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{subfig}

\newtcblisting{lstframed}{
  colback=LightGray!50,
  listing only
}

\newsavebox\mybox

\begin{document}

\begin{lrbox}{\mybox}
\begin{minipage}{\linewidth}
\begin{lstframed}
Some test code
\end{lstframed}
\end{minipage}
\end{lrbox}

\begin{figure}[H]
    \centering
    \subfloat[Caption for the first subfloat]{%
    \rule{5cm}{2cm}%
    } \par
    \subfloat[Caption for the second subfloat]{%
    \usebox\mybox%
    }
    \caption{E}
\end{figure}

\end{document}

在此处输入图片描述

相关内容