可以修改 \includeonlyframes 以使用通配符吗?

可以修改 \includeonlyframes 以使用通配符吗?

在处理大型投影仪文档时,使用它来一次集中查看几张特定幻灯片很方便\includeonlyframes{foo, bar, baz}。但是,每次还需要更改它以包含所需的幻灯片标签。

相反,是否可以使用通配符来挑选幻灯片?例如,我在所有幻灯片的标签前加上前缀"SectionName",即幻灯片所在的部分。因此,典型的框架将如下所示:

\section{Introduction}
\begin{frame}[label=IntroSlide1]
...
\end{frame}

我希望能够通过执行类似操作来选择简介部分中的所有框架\includeonlyframes{Intro*}(只要功能可行,语法可以更改以方便编程)。这可能吗?如果可以,我应该如何实现它?

答案1

我稍微修改了一下语法以使其更容易,-*表示通配符和与通配符匹配的各个标签必须-在其名称中包含。

\documentclass{beamer}
\includeonlyframes{Intro-*,Sss-Slide2}

\makeatletter
\def\beamer@checkifinlist#1,#2\relax{%
\def\beamer@temp{#1}%
\let\b@name\beamer@againname
\b@star@test#1\relax-*!\relax\count@
\ifx\beamer@temp\b@name
\else
  \def \beamer@temp {#2}%
  \ifx\beamer@temp\@empty
    \gdef\beamer@whichframes{all:0}%
  \else
    \beamer@checkifinlist#2\relax
  \fi
\fi }

\def\b@star@test#1-*#2\relax#3\count@{%
\ifx\\#2\\%
\def\beamer@temp{#1}%
\expandafter\b@dash@test\beamer@againname-\valign\relax
\fi}

\def\b@dash@test#1-#2#3\relax{%
\ifx\valign#2%
\else
\def\b@name{#1}%
\fi}
\makeatother
\begin{document}
\begin{frame}[label=Intro-Slide1]
AAA
\end{frame}

\begin{frame}[label=Intro-Slide2]
BBB
\end{frame}

\begin{frame}[label=Sss-Slide1]
CCC
\end{frame}
\begin{frame}[label=Sss-Slide2]
DDD
\end{frame}

\end{document}

生成幻灯片 AAA BBB 和 DDD,即通配符中的前两个Intro-*

相关内容