我见过一些类似的问题这里和这里,但没有提到\subcaptionbox
命令。这是我的 MWE:
\documentclass{article}
\usepackage{subcaption}
\usepackage{minted}
\begin{document}
\begin{figure}[htb]
\subcaptionbox{One subfigure.}{%
\begin{minted}{c}
printf("hello, world\n");
\end{minted}
}
\end{figure}
\end{document}
编译失败并出现Paragraph ended before \FV@BeginScanning was complete. }
错误。
我可以使用minipage
环境和\subcaption
命令来代替,但它\subcaptionbox
有一些我想要使用的优点。
有什么方法可以让这两者协同工作吗?
答案1
这是一个粗略的实现,仅使用标准形式\subcaptionbox
(没有可选参数)。
\documentclass{article}
\usepackage{subcaption}
\usepackage{minted}
\newsavebox{\mintedbox}
\newenvironment{mintedsubcaptionbox}[2]
{%
\VerbatimEnvironment
\def\mscbcaption{#1}%
\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}%
\begin{lrbox}{\mintedbox}%
\begin{minted}{#2}%
}
{%
\end{minted}%
\end{lrbox}%
\subcaptionbox{\mscbcaption}{\usebox{\mintedbox}}%
}
\begin{document}
\begin{figure}[htb]
\begin{mintedsubcaptionbox}{One subfigure.}{c}
printf("hello, world\n");
\end{mintedsubcaptionbox}
\end{figure}
\end{document}
我之所以使用它BVerbatim
是因为你不太可能希望列表在子浮点数内占据全宽。
更全面的语法支持
\begin{mintedsubcaptionbox}[<list entry>]{<heading>}[<minted options>]{<language>}
可
\documentclass{article}
\usepackage{subcaption}
\usepackage{minted}
\usepackage{xparse}
\newsavebox{\mintedbox}
\NewDocumentEnvironment{mintedsubcaptionbox}{O{#2}mO{}m}
{%
\VerbatimEnvironment
\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}%
\begin{lrbox}{\mintedbox}%
\begin{minted}[#3]{#4}%
}
{%
\end{minted}%
\end{lrbox}%
\subcaptionbox[#1]{#2}{\usebox{\mintedbox}}%
}
\begin{document}
\begin{figure}[htb]
\begin{mintedsubcaptionbox}{One subfigure.}{c}
printf("hello, world\n");
\end{mintedsubcaptionbox}
\end{figure}
\end{document}