\includeonlyframes を変更してワイルドカードを受け入れることはできますか?

\includeonlyframes を変更してワイルドカードを受け入れることはできますか?

大きな Beamer ドキュメントで作業する場合、一度にいくつかの特定のスライドに焦点を合わせるのに便利です\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}

ワイルドカードから最初の 2 つのスライド AAA BBB と DDD を生成しますIntro-*

関連情報