![在文档文本中使用投影仪框架标题](https://linux22.com/image/282896/%E5%9C%A8%E6%96%87%E6%A1%A3%E6%96%87%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%8A%95%E5%BD%B1%E4%BB%AA%E6%A1%86%E6%9E%B6%E6%A0%87%E9%A2%98.png)
我使用beamer
创建一组幻灯片,用于展示文档的内容。幻灯片和可打印文档内容都包含在一组源文件中;我使用命令\mode
在演示和打印输出模式之间切换。与我迄今为止看到的一些示例不同beamer
,可打印版本不包含完整的幻灯片图像。幻灯片和可打印版本共享一些图形和其他内容,我使用 在\marginpar
幻灯片和可打印版本之间创建一种链接,只是为了让观众跟踪。这是一个 MWE,由三个文件组成:
% === printable.tex =======================================
\documentclass{scrartcl}
\usepackage{beamerarticle}
\begin{document}
\input{contents}
\end{document}
% === end of printable.tex ================================
% === slides.tex ==========================================
\documentclass{beamer}
\begin{document}
\input{contents}
\end{document}
% === end of slides.tex ===================================
% === contents.tex =======================================
\mode*
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Fusce laoreet dui vestibulum tortor luctus porttitor.
Aliquam dictum ipsum condimentum, auctor augue in,
consectetur lacus. Morbi auctor posuere scelerisque.
Aenean vel enim sit met orci rutrum fermentum faucibus et
mauris. Pellentesque tempor felis in imperdiet accumsan.
Mauris auctor pretium nulla et tincidunt.
\mode<presentation>
\begin{frame}
\frametitle{Foo Bar}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\end{frame}
\mode*
Mauris\marginpar{Foo Bar} malesuada nisl sit amet nisl
eleifend tincidunt. Sed sed libero scelerisque, ultrices
elit a, lacinia mi. Mauris nec semper metus, eget
pellentesque leo. Donec volutpat aliquam aliquam. Nunc
vel neque scelerisque, aliquam augue eget, gravida felis.
Suspendisse vel molestie libero.
% === end of contents.tex =================================
如您所见,我必须手动重复Foo Bar
中的框架标题\marginpar
。我往往会忘记这样做,尤其是当标题发生变化时,我往往会忘记更新重复。有没有办法只指定一次标题并将其用于\frametitle
以及\marginpar
?
答案1
你只需要定义不同的templates
forarticle
和presentation
模式。如果你包括
\setbeamertemplate{frametitle}{\marginnote{\insertframetitle}}
在printable.tex
序言中,如果你也在文章版本中处理框架,那么框架标题将出现在边缘。(\marginnote 定义在边注包裹)
在您的示例中,所有框架内容都被跳过,因为它前面有\mode<presentation>
。相反,您可以使用类似以下内容:
\begin{frame}
\frametitle{Foo Bar}
\only<beamer>{%
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}%
} %<- \only<beamer> closing
\end{frame}
这样,在处理框架标题并将其打印为边注时,只会跳过框架内容。您无需\marginpar{Foo Bar}
在下一段中包含任何内容。
请看一下在 beamer 中更改 \mode 会创建一个新段落。可以避免这种情况吗?和如何更好地调整 beamerarticle 中转换为 marginpar 的 frametitle 的位置?您就会明白为什么我更喜欢使用\only
和\marginnote
。
根据之前的解决方案改编的完整示例是
% === printable.tex =======================================
\documentclass{scrartcl}
\usepackage{beamerarticle}
\usepackage{marginnote}
\setbeamertemplate{frametitle}{\marginnote{\insertframetitle}}
\begin{document}
\input{contents}
\end{document}
% === end of printable.tex ================================
%
% === slides.tex ==========================================
\documentclass{beamer}
\begin{document}
\input{contents}
\end{document}
% === end of slides.tex ===================================
%
% === contents.tex =======================================
\mode*
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Fusce laoreet dui vestibulum tortor luctus porttitor.
Aliquam dictum ipsum condimentum, auctor augue in,
consectetur lacus. Morbi auctor posuere scelerisque.
Aenean vel enim sit met orci rutrum fermentum faucibus et
mauris. Pellentesque tempor felis in imperdiet accumsan.
Mauris auctor pretium nulla et tincidunt.
\begin{frame}
\frametitle{Foo Bar}
\only<beamer>{\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}}
\end{frame}
\mode*
Mauris malesuada nisl sit amet nisl
eleifend tincidunt. Sed sed libero scelerisque, ultrices
elit a, lacinia mi. Mauris nec semper metus, eget
pellentesque leo. Donec volutpat aliquam aliquam. Nunc
vel neque scelerisque, aliquam augue eget, gravida felis.
Suspendisse vel molestie libero.
% === end of contents.tex =================================
注意:一个很好的例子,可以了解如何使用beamerarticle
相同的来源制作演示文稿和印刷版本一场演讲。它由 Till Tantau 编写,是beamer
发行版的一部分,所以可能在您的计算机中。快来看看吧!
vwegert 添加:
在包的帮助下environ
,我设法定义了一个环境——与 open 命令相比\only<beamer>{
——不会对语法高亮、漂亮的打印机和其他工具造成破坏:
% === printable.tex =======================================
\documentclass{scrartcl}
\usepackage{beamerarticle}
\input{preamble}
\setbeamertemplate{frametitle}{\marginpar{\insertframetitle}}
\begin{document}
\input{contents}
\end{document}
% === end of printable.tex ================================
% === slides.tex ==========================================
\documentclass{beamer}
\input{preamble}
\begin{document}
\input{contents}
\end{document}
% === end of slides.tex ===================================
% === preamble.tex =======================================
\usepackage{environ}
\NewEnviron{onlybeamer}{\only<beamer>{\BODY}}
% === end of preamble.tex =================================
% === contents.tex =======================================
\mode*
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Fusce laoreet dui vestibulum tortor luctus porttitor.
Aliquam dictum ipsum condimentum, auctor augue in,
consectetur lacus. Morbi auctor posuere scelerisque.
Aenean vel enim sit met orci rutrum fermentum faucibus et
mauris. Pellentesque tempor felis in imperdiet accumsan.
Mauris auctor pretium nulla et tincidunt.
\begin{frame}
\frametitle{Foo Bar}
\begin{onlybeamer}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\end{onlybeamer}
\end{frame}
\mode*
Mauris malesuada nisl sit amet nisl
eleifend tincidunt. Sed sed libero scelerisque, ultrices
elit a, lacinia mi. Mauris nec semper metus, eget
pellentesque leo. Donec volutpat aliquam aliquam. Nunc
vel neque scelerisque, aliquam augue eget, gravida felis.
Suspendisse vel molestie libero.
\mode<all>
% === end of contents.tex =================================