Die Minted-Umgebung in der Subcaptionbox funktioniert nicht

Die Minted-Umgebung in der Subcaptionbox funktioniert nicht

Ich habe einige ähnliche Fragen gesehenHierUndHier, aber keiner erwähnt den \subcaptionboxBefehl. Hier ist mein 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}

Die Kompilierung schlägt fehl und es tritt ein Paragraph ended before \FV@BeginScanning was complete. }Fehler auf.

Ich könnte stattdessen eine minipageUmgebung und den \subcaptionBefehl verwenden, aber das \subcaptionboxhat einige Vorteile, die ich gerne nutzen würde.

Gibt es eine Möglichkeit, diese beiden zusammenarbeiten zu lassen?

Antwort1

Hier ist eine grobe Implementierung, nur mit der Standardform für \subcaptionbox(keine optionalen Argumente).

\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}

Ich habe es verwendet BVerbatim, weil es ziemlich unwahrscheinlich ist, dass Sie möchten, dass eine Auflistung die volle Breite innerhalb eines Subfloats einnimmt.

Bildbeschreibung hier eingeben

Eine umfassendere Unterstützung bei der Syntax

\begin{mintedsubcaptionbox}[<list entry>]{<heading>}[<minted options>]{<language>}

kann sein

\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}

verwandte Informationen