Я видел несколько похожих вопросов.здесьиздесь, но никто не упоминает \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}