脆弱而新的环境

脆弱而新的环境

我希望beamer幻灯片的标题和副标题分别为“当前”部分和小节 - 就像下面的例子一样:

\documentclass{beamer}

\newenvironment{fr}{ 
        \begin{frame}{\insertsectionhead}{\insertsubsectionhead}
    }{
        \end{frame}
    }


\begin{document}
\section{A}
\subsection{a}

\begin{fr}
    bla
\end{fr}

\subsection{b}
\begin{fr}
    blo
\end{fr}

\end{document}

然而,当我改变线路时

\begin{frame}{\insertsectionhead}{\insertsubsectionhead}

\begin{frame}[fragile]{\insertsectionhead}{\insertsubsectionhead}

(添加[fragile]),我得到错误“ File ended while scanning use of \next”。我发现解决方案通常是不缩进\end{frame},但在我的处境下我无法控制这一点。

答案1

这不是缩进的问题(以前是,但代码改变了,所以现在它不重要了)。问题是,当你启动一个fragile框架时,beamer会查找确切的字符串\ e n d { f r a m e },但文件中永远找不到该字符串,所以你会得到一个File ended错误。即使之后的评论\end{frame}是不允许的

但是,只要您告诉它名称是什么,就beamer可以定义具有不同名称的 verbatim ( ) 环境。为此,您可以使用以下选项:fragileenvironment

\documentclass{beamer}

\newenvironment{fr}[1][]{%
        \begin{frame}[environment=fr,#1]{\insertsectionhead}{\insertsubsectionhead}
    }{%
        \end{frame}
    }

\begin{document}
\section{A}
\subsection{a}

\begin{fr}
    bla
\end{fr}

\subsection{b}
\begin{fr}[fragile]
  \begin{verbatim}
    \blo\
  \end{verbatim}
\end{fr}

\end{document}

答案2

在另一个环境中隐藏框架通常不是一个好主意。一个大问题是,这会诱使用户fragile默认使用框架,这可能会产生各种令人惊讶的副作用。

相反,我建议自动显示章节和小节标题:

\documentclass{beamer}

\addtobeamertemplate{frametitle}{%
    \let\insertframetitle\insertsectionhead
    \let\insertframesubtitle\insertsubsectionhead
}{}
\makeatletter
  \CheckCommand*\beamer@checkframetitle{\@ifnextchar\bgroup\beamer@inlineframetitle{}}
  \renewcommand*\beamer@checkframetitle{\global\let\beamer@frametitle\relax\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\makeatother

\begin{document}
\section{A}
\subsection{a}

\begin{frame}
    bla
\end{frame}

\subsection{b}
\begin{frame}
    blo
\end{frame}

\section{B}
\subsection{c}

\begin{frame}
    bla
\end{frame}


\end{document}

相关内容