使用 ifthen 排除整个框架不起作用(不再......)

使用 ifthen 排除整个框架不起作用(不再......)

我有一套大型幻灯片(多日培训课程),我想通过包含/排除某些幻灯片来生成不同的培训课程(不同长度和主题组合)。我以前用 ifthen 来做这件事,但突然(新电脑)失败了。这是一个简单的例子:

\documentclass[utf8]{beamer}

\RequirePackage{ifthen}
\newif\ifdetails
\newcommand{\details}[1]{\ifdetails#1\fi}
\detailstrue

\begin{document}

\begin{frame}[fragile]{No Problems Here}
\details{Works fine, really.}
\end{frame}

\details{
\begin{frame}[fragile]{But Issues Here}
Why??!?
\end{frame}
}

\begin{frame}[fragile]{Again, All Good}
\details{Works fine, again.}
\end{frame}

\end{document}

当未设置时,此方法可以正常工作\detailstrue,否则会失败

(./demo1.vrb
! Extra }, or forgotten \endgroup.
\endframe ->\egroup 
                    \begingroup \def \@currenvir {frame}
l.2 Why??!? \end {frame}
                         \fi

(如您所见,它仅对于\details{}包裹在框架中的命令失败。在框架内使用的命令完全没问题。)

通过谷歌搜索,我了解到我应该使用 etoolbox,因此我\details用以下方式替换了定义:

\usepackage{etoolbox}
\newbool{details}
\newcommand{\details}[1]{\ifbool{details}{#1}{}}
\booltrue{details}

\newbool{details}当不存在时,此方法也能正常工作,但在其他情况下则会失败:

(./demo2.vrb
! Extra }, or forgotten \endgroup.
\endframe ->\egroup 
                    \begingroup \def \@currenvir {frame}
l.2 Why??!? \end {frame}

我最终尝试利用 Beamer 自己的隐藏框架机制并为此定义了我自己的环境:

\newenvironment{frameOn}[2]{\ifbool{#1}{\begin{frame}[fragile]{#2}}{\begin{frame}<0>[noframenumbering]{}}}{\end{frame}}

...

\begin{frameOn}{details}{But Issues Here}
Why??!?
\end{frameOn}

同样,当未设置布尔标志时,一切都很好,但是否则就会发生相同的失败:

(./demo3.vrb
! Extra }, or forgotten \endgroup.
\endframe ->\egroup 
                    \begingroup \def \@currenvir {frame}
l.3 \end{frameOn}

我是否遗漏了一些显而易见的东西?如何以编程方式排除完整幻灯片?感谢您的见解 :-)

答案1

这是关闭框架的另一种方法。

\documentclass[utf8]{beamer}

%\RequirePackage{ifthen}
\newif\ifdetails
\newcommand{\details}[1]{\ifdetails#1\fi}
\detailstrue

\begin{document}

\begin{frame}[fragile]{No Problems Here}
\details{Works fine, really.}
\end{frame}

\begin{frame}<\ifdetails1-\else0\fi>[fragile]{But Issues Here}
Why??!?
\end{frame}

\begin{frame}[fragile]{Again, All Good}
\details{Works fine, again.}
\end{frame}

\end{document}

相关内容