我在使用 beamer 时遇到了一些问题:我从一个简单的例子开始:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}
\begin{document}
\begin{frame}
first frame
\end{frame}
\end{document}
现在我想添加一些“逻辑”,所以我想定义一些可以帮助我控制帧开始的东西:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}
\newcommand{\myframe}{\begin{frame}}
\newcommand{\myend}{\end{frame}}
\begin{document}
\myframe
first frame
\myend
\myframe
second frame
\myend
\end{document}
并在编译时出现错误:
Runaway argument?
\let \AtEndDocument \@firstofone \@enddocumenthook \@checkend {docume\ETC.
! File ended while scanning use of \beamer@collect@@body
你知道我该如何重新定义投影仪框架的开头吗?
添加了 if/then/else 的简单示例:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}
\usepackage{ifthen}
\newcommand{\myframe}{\begin{frame}}
\newcommand{\myend}{\end{frame}}
\newboolean{boolvar}
\setboolean{boolvar}{false}
\begin{document}
\begin{frame}
\ifthenelse{\boolean{boolvar}}{truecase}{falsecase}
\end{frame}
\end{document}
我想让幻灯片具有不同的框架标题和/或副标题,问题之一是文章模式下重复的框架标题。我不能使用 allowframebreaks,因为这会破坏包括 /pause 在内的叠加层。所以,我猜最简单的解决方案是在演示模式下为第二/第三张幻灯片添加新框架 (/end{frame}/begin{frame}oldframetitle}{newsubtitle}),在文章模式下忽略它,或者只添加换行符,或者将新的副标题作为段落标题。
因此我们的想法是:
\documentclass{beamer}
\newcommand{\nextslideyesno}{\ifthenelse{\boolean{boolvar}}{\end{frame}\begin{frame}}{falsecase}}
\usepackage[utf8]{inputenc}
\usepackage{default}
\newcommand{\myframe}{\begin{frame}}
\newcommand{\myend}{\end{frame}}
\begin{document}
\begin{frame}
first text
\nextslideyesno{}
second text
\end{frame}
\end{document}
但它也会返回很多错误。
答案1
无需重新定义frame
;如果我正确理解了您的问题,您可以使用覆盖和\mode
。
这是一个简单的示例文档:
\documentclass{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\begin{document}
\begin{frame}
\frametitle{%
\mode<presentation>{%
\only<1>{Title A}%
\only<2>{Title B}%
\only<3>{Title C}%
}%
\mode<article>{\noindent Title for article}%
}
\framesubtitle{%
\mode<presentation>{%
\only<1>{Subtitle A}%
\only<2>{Subtitle B}%
\only<3>{Subtitle C}%
}%
\mode<article>{\noindent Subtitle for article}%
}
Here is the contents of the frame with a list:
\begin{enumerate}[<+->]
\item First.
\item Second.
\item Third.
\end{enumerate}
\end{frame}
\end{document}
处理上述代码,照原样您将获得一个包含三张幻灯片的演示文稿;每张幻灯片都有自己的标题和副标题,并使用叠加层分步显示列表:
现在使用文章模式;即更改为
%\documentclass{beamer}
\documentclass{article}
\usepackage{beamerarticle}
您将获得以下结果(请注意,只有一个标题和副标题):