Minted does not escape beamer's \end{frame}
This is due to the way that beamer
's fragile
option works--it breaks with both minted
and verbments
(and anything similar). The fragile
option causes the contents of the frame to be written to a temp file, so that beamer
can deal with verbatim content. The problem is that beamer
assumes that the current frame has ended as soon as it encounters a line beginning with \end{frame}
. It doesn't have a way to detect that the \end{frame}
is actually inside a minted
environment, and thus isn't to be taken literally. Because of thise, both minted
and verbments
will fail with the example given.
There are a few ways to work around this.
- The simplest is to use
fragile=singleslide
. This disables overlays, allowingbeamer
to avoid the use of temp files and the associated issues. - Another solution is the approach in the answer provided by Jubobs: just indent the environment (whether it's
minted
orpyglist
). Since the\end{frame}
in theminted
environment is now preceded by space characters,beamer
will no longer interpret it as the end of the frame. Unfortunately, if you take this approach, your code will be indented by one or more spaces, which may not be desirable. You could useminted
'sgobble
option to work around this. For example, if you indent by 4 spaces, thengobble=4
. You could also use theautogobble
option that automatically strips off leading space characters.
An alternative solution (credits to Thomas F. Sturm) with tcolorbox
commands tcboutputlisting
and tcbinputlisting
.
\documentclass{beamer}
\usepackage[minted]{tcolorbox}
\begin{document}
\begin{tcboutputlisting}
\begin{frame}{equation}
$a = b$
\end{frame}
\end{tcboutputlisting}
\begin{frame}[fragile]{Example}
\tcbinputlisting{listing only}
\end{frame}
\end{document}