![投影仪幻灯片的条件编译](https://linux22.com/image/235172/%E6%8A%95%E5%BD%B1%E4%BB%AA%E5%B9%BB%E7%81%AF%E7%89%87%E7%9A%84%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91.png)
我正在准备投影仪幻灯片,并且我必须打印幻灯片。
我宁愿使用横向模式的幻灯片,但也有可能需要使用纵向模式的幻灯片。遗憾的是,直到演讲开始前几分钟我才知道,所以我必须准备两份演示文稿。
我尝试过使用条件编译,但效果似乎不太好。基本上,我希望得到这样的结果:
\newif\ifwide
\widetrue
然后我会写类似这样的内容:
\begin{frame}{A frame}
Some text (...)
\ifwide
\end{frame}
\begin{frame}{A second frame}
\fi
Some text (continued)
\end{frame}
此特定示例不起作用(pdflatex 报告Extra }, or forgotten \endgroup. \end{frame} (followed by: )
)。我应该怎么做才能让框架内容在横向模式下拆分为两个框架,但在纵向模式下不拆分?
答案1
以下解决方案将每个潜在框架包装在其自己的环境中,并将这两个框架包装在父环境中。在宽模式下,内部框架除了设置框架标题外不执行任何操作,外部环境是框架。在另一种模式下,外部是无操作,内部是框架。这使用环境environment
的键frame
来告诉它哪个\end
结束框架内容。
这可能(还)不支持所有frame
可选参数(<>
,[< >]
等等)。
\documentclass{beamer}
\newif\ifwide
\widetrue
\ifwide
\newenvironment<>{frames}[1][]{%
\begin{frame}#2[environment=frames,#1]%
}{%
\end{frame}%
}
\newenvironment<>{firstframe}[2][]{
\frametitle{#2}%
}{}%
\newenvironment<>{secondframe}[2][]{}{}%
\else
\newenvironment<>{frames}[1][]{%
}{%
}
\newenvironment<>{firstframe}[1][]{
\begin{frame}#2[environment=firstframe,#1]%
}{%
\end{frame}%
}%
\newenvironment<>{secondframe}[1][]{
\begin{frame}#2[environment=firstframe,#1]%
}{%
\end{frame}%
}%
\fi
\begin{document}
\begin{frames}
\begin{firstframe}{A frame}
Some text (...)
\end{firstframe}
\begin{secondframe}{A second frame}
Some text (continued)
\end{secondframe}
\end{frames}
\end{document}