我试图理解为什么下面的代码不能编译。
\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}