среда minted внутри subcaptionbox не работает

среда minted внутри subcaptionbox не работает

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

Связанный контент