Mehrere Hintergrundbilder im Beamer durchspielen

Mehrere Hintergrundbilder im Beamer durchspielen

Ich habe ein Bildverzeichnis mit mehreren Bildern:

p1.jpg
p2.jpg
p3.jpg
p4.jpg

Ich habe außerdem folgende Umgebung, die das Hintergrundbild auf einen Rahmen setzt:

\newenvironment{imageframe}[1]
{% Set background image
\usebackgroundtemplate{%
  \begin{tikzpicture}[remember picture,overlay]%
    \node[inner sep=0] at (current page.center) {\includegraphics[width=\paperwidth,height=\paperheight]{#1}};%
  \end{tikzpicture}%
}%
\begin{frame}%
}
{
\end{frame}%
}

Es wird wie folgt verwendet:

\begin{imageframe}{p1.jpg}
  \frametitle{Nothing was the same.}
  Always felt like my vision been bigger than the bigger picture.
\end{imageframe}

Ich möchte eine Variable (oder einen Befehl) erstellen, die die Liste der gültigen Hintergrundbilder (p1.jpg, ..., p4.jpg) enthält, und dann den Bildpfad nicht explizit angeben, wenn die Umgebung aufgerufen wird. Stattdessen sollte das erste Bild (p1.jpg) beim ersten Aufruf von imageframe ausgewählt werden, das zweite Bild (p2.jpg) sollte beim zweiten Mal aufgerufen werden und so weiter. Overflow sollte zu p1.jpg zurückkehren.

Antwort1

Ohne Zähler und ohne dass die Anzahl der Bilder im Voraus angegeben werden muss: Definieren Sie einfach die Liste der Bilder auf die gezeigte Weise und fertig.

\documentclass{beamer}
\usepackage{tikz}

\newenvironment{autoimageframe}
 {% Set background image
  \usebackgroundtemplate{%
    \begin{tikzpicture}[remember picture,overlay]
    \node[inner sep=0] at (current page.center) {%
      \includegraphics[width=\paperwidth,height=\paperheight]{\currentbgimage}%
    };
    \end{tikzpicture}%
    \expandafter\swapbgimage\bgimagelist
  }%
  \begin{frame}}
 {\end{frame}}
\newcommand\currentbgimage{\expandafter\usebgimage\bgimagelist}
\newcommand{\usebgimage}{}
\def\usebgimage#1#2\bgimagelist{#1}
\newcommand{\swapbgimage}{}
\def\swapbgimage#1#2\bgimagelist{%
  \gdef\bgimagelist{#2{#1}\bgimagelist}%
}

% Define here the list of images
% Each image is in a braced group
% REMEMBER to have \bgimagelist at the end
\newcommand\bgimagelist{
  {example-image}
  {example-image-a}
  {example-image-b}
  {example-image-c}
  \bgimagelist
}

\begin{document}

% Thanks to Percusse for the code here
\foreach\x in{1,...,9}{
\begin{autoimageframe}
  \frametitle{Nothing was the same.}
  Always felt like my vision been bigger than the bigger picture.
\end{autoimageframe}
}

\end{document}

Bildbeschreibung hier eingeben

Das \currentbgimageMakro verwendet das erste Element in der Liste und \swapbgimagefügt das erste Element dann am Ende ein.

Antwort2

Sie können einige Makros und eine Namensliste generieren und diese über eine modOperation durchlaufen.

\documentclass{beamer}
\usepackage{tikz,mwe}% For dummy images

\newcounter{backgroundimagecounter}
\setcounter{backgroundimagecounter}{0}
\newenvironment{autoimageframe}
{% Set background image
\usebackgroundtemplate{%
  \begin{tikzpicture}[remember picture,overlay]%
    \pgfmathsetmacro\currentbackgroundimage{\backgroundimagenamelist[int(Mod(\value{backgroundimagecounter},\numberofbackgroundimages))]}%
    \node[inner sep=0] at (current page.center) {\includegraphics[width=\paperwidth,height=\paperheight]{\currentbackgroundimage}};%
  \end{tikzpicture}%
\stepcounter{backgroundimagecounter}%
}%
\begin{frame}%
}
{
\end{frame}%
}
\def\backgroundimagenamelist{{
"example-image",
"example-image-a",
"example-image-b",
"example-image-c"}}
\def\numberofbackgroundimages{4}

\begin{document}
\foreach\x in{1,...,9}{
\begin{autoimageframe}
  \frametitle{Nothing was the same.}
  Always felt like my vision been bigger than the bigger picture.
\end{autoimageframe}
}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen