投影仪幻灯片的条件编译

投影仪幻灯片的条件编译

我正在准备投影仪幻灯片,并且我必须打印幻灯片。

我宁愿使用横向模式的幻灯片,但也有可能需要使用纵向模式的幻灯片。遗憾的是,直到演讲开始前几分钟我才知道,所以我必须准备两份演示文稿。

我尝试过使用条件编译,但效果似乎不太好。基本上,我希望得到这样的结果:

    \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}

相关内容