在“回忆录”子浮点数中编译“minted”列表时出错

在“回忆录”子浮点数中编译“minted”列表时出错

我正在尝试编译以下最小示例:

\documentclass{memoir}

% Enable subfloats within figures
\newsubfloat{figure}

\usepackage{minted}

\begin{document}
\begin{figure}
\subbottom{%
\begin{minted}{c}
test;
\end{minted}
}
\end{figure}
\end{document}

但我收到一个错误:

! Argument of \FV@BeginScanning has an extra }.
<inserted text> 
                \par 
l.13 \end{minted}}

我尝试用从文件读取代码的环境替换minted环境inputminted,但无济于事。

我该如何解决?

答案1

环境minted不能作为另一个命令的参数起作用,因为输入(和删除)的生成的文件使用了该Verbatim环境。

一个解决方案是将minted环境保存在一个盒子里然后使用它:

\documentclass{memoir}

% Enable subfloats within figures
\newsubfloat{figure}
\newsavebox{\mintedbox}

\usepackage{minted}

\begin{document}
\begin{figure}
\begin{lrbox}{\mintedbox}
\begin{minipage}{\textwidth} % add here for the width
\begin{minted}{c}
test;
\end{minted}
\end{minipage}
\end{lrbox}
\subbottom{\usebox{\mintedbox}}
\end{figure}
\end{document}

一个更巧妙的解决方案是,通过定义合适的环境,无需记住执行此操作。为列表保留的宽度是强制参数,而第一个和第二个可选参数具有与命令相同的含义\subbottom

\documentclass{memoir}
\usepackage{xparse}
% Enable subfloats within figures
\newsubfloat{figure}
\newsavebox{\mintedbox}

\NewDocumentEnvironment{mintedsubbottom}{oom}
 {\begin{lrbox}{\mintedbox}\begin{minipage}{#3}}
 {\end{minipage}\end{lrbox}%
  \IfNoValueTF{#1}
    {\subbottom{\usebox{\mintedbox}}}
    {\IfNoValueTF{#2}
       {\subbottom[#1]{\usebox{\mintedbox}}}
       {\subbottom[#1][#2]{\usebox{\mintedbox}}}%
    }%
 }

\usepackage{minted}

\begin{document}
\begin{figure}
\begin{mintedsubbottom}[Caption]{\textwidth}
\begin{minted}{c}
test;
\end{minted}
\end{mintedsubbottom}
\end{figure}
\end{document}

相关内容