我正在尝试编译以下最小示例:
\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}