创建一个 begin{frame}[fragile] 宏

创建一个 begin{frame}[fragile] 宏

这是对我的问题的后续此主题,对此@samcarter 向我展示了如何<+->与相结合fragile。在下面的示例中,我尝试通过创建一个fragileFrame包含上述两个功能的环境来进一步自动化他的代码。(显然,在这个 MWE 中,它并没有给我带来太多好处,但在我的实际代码中,我的 beamer 框架包含大量自定义,我不想每次都重写。但是环境构造会引发错误。为了验证它是否真的是fragile导致错误的选项,我创建了一个normalFrame除了选项之外完全相同的环境fragile,并且编译时没有错误。有没有办法解决这个问题?

\documentclass{beamer}
\usepackage[framed]{matlab-prettifier}
\lstnewenvironment{myMPcolor}{%
            \lstset{basicstyle=\color{red}}
           }{}
\newenvironment{fragileFrame}[1]{%
    \beamerdefaultoverlayspecification{<+->}
      \begin{frame}[fragile]{#1}
    }{\end{frame}}
\newenvironment{normalFrame}[1]{%
    \beamerdefaultoverlayspecification{<+->}
      \begin{frame}{#1}
    }{\end{frame}}
\begin{document}
\begin{normalFrame}{Title}
\begin{itemize}
    \item first point
    \begin{itemize}
        \item subpoint
    \end{itemize}
\end{itemize}
\end{normalFrame}
\begin{fragileFrame}{Title}
\begin{itemize}
    \item first point
    \begin{itemize}
        \item subpoint
    \end{itemize}
\end{itemize}
\begin{myMPcolor}
This is a matlab command
\end{myMPcolor}
\end{fragileFrame}
\end{document}

答案1

正如您在上一个问题的评论中所说,将框架环境隐藏在新环境中是一个坏主意 —— 这通常会导致比它解决的问题更多的问题。

但是如果你真的必须这么做:

\documentclass{beamer}

\usepackage[framed]{matlab-prettifier}
\lstnewenvironment{myMPcolor}{%
            \lstset{basicstyle=\color{red}}
           }{}

\newenvironment{slide}
    {\begin{frame}[fragile,environment=slide]}
    {\end{frame}}

\begin{document}

\begin{slide}
\frametitle{title}
\begin{itemize}
    \item first point
    \begin{itemize}
        \item subpoint
    \end{itemize}
\end{itemize}
\begin{myMPcolor}
This is a matlab command
\end{myMPcolor}
\end{slide} 

\end{document}

相关内容