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, allowing beamer 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 or pyglist). Since the \end{frame} in the minted 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 use minted's gobble option to work around this. For example, if you indent by 4 spaces, then gobble=4. You could also use the autogobble 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}

enter image description here