Перемещение маркеров в бимере

Перемещение маркеров в бимере

Часто, когда я использую проектор для слайдов, я использую itemizeсреду с\pause для показа одного пункта списка за раз. Кроме того, часто все пункты, которые я хочу показать на одном слайде, не помещаются, и мне нужно начать новый слайд с еще парой пунктов.

Вместо этого мне хотелось бы иметь itemizeсреду, подобную -, которая давала бы мне (когда пункты не помещаются на одном слайде) скользящие маркеры, что-то похожее на то, что делает следующий код:

\documentclass{beamer}
\begin{document}
    \begin{frame}
        \begin{itemize}
            \only<-5>{\item one}
            \only<2-6>{\item two}
            \only<3-7>{\item three}
            \only<4-8>{\item four}
            \only<5-9>{\item five}
            \only<6-10>{\item six}
            \only<7-11>{\item seven}
            \only<8-12>{\item eight}
            \only<9->{\item nine}
            \only<10->{\item ten}
            \only<11->{\item eleven}
            \only<12->{\item twelve}
        \end{itemize}
    \end{frame}
\end{document}

Однако я не хочу отслеживать, сколько слайдов я использую.

Есть ли где-то такая среда?

Также было бы неплохо добавить анимированное катание, но это было бы слишком.

решение1

Это встроено в проектор:

\documentclass{beamer}
\begin{document}
\begin{frame}
    \begin{itemize}[<only@+-+(4)>]
        \item one
        \item two
        \item three
        \item four
        \item five
        \item six
        \item seven
        \item eight
        \item nine
        \item ten
    \end{itemize}
\end{frame}
\end{document}

Спецификация наложения +-+(4)означает то же самое, что и (n+1)-(n+5), где n— текущее количество слайдов. only@Действие оборачивает элемент в \only<...>. Помещение спецификации в качестве аргумента вitemize среду делает ее значением по умолчанию для каждого элемента.

Если вы хотите указать текст элемента в \foreachцикле, вы можете явно вызвать \onlyперед каждым элементом:

\documentclass{beamer}
\usepackage{pgffor}
\begin{document}
\begin{frame}
    \begin{itemize}
        \foreach \x in {a,b,...,z} {%
            \only<+-+(4)>{\item \x}
        }
    \end{itemize}
\end{frame}
\end{document}

См. разделы 9.6.3 (Спецификации действий) и 9.6.4 (Инкрементные спецификации) руководства по проектору (v3.22). Такжеэтот ответмой.

решение2

Вот версия, с довольно странной проблемой и, следовательно, ограничением. Она определяет новый счетчик iiiи новую \myitemкоманду. Если вы используете такойitemize среды на более чем одном слайде, то счетчик должен быть сброшен. В противном случае, если, например, у вас было 10 точек на первом слайде, он начнется с 11-го слайда на следующем слайде. Поэтому я использовалetoolbox's \AtBeginEnvironmentдля сброса iiiсчетчика. Однако это означает, что вы можете использовать только один такой itemizeсписок frame, иначе вы будете прокручивать их оба одновременно. Я попытался улучшить это, сбросив счетчик iiiв начале каждого frame. Но если у меня нет строки, \AtBeginEnvironment{itemize}{\setcounter{iii}{0}}я получаю большую кучу ошибок ("возможно, недостающий элемент"), поэтому на данный момент это ограничено одной прокруткой itemizeза frame. Кроме того, поскольку нет механизма просмотра вперед, он не остановится, когда будут отображены последние 5 элементов, а только когда будет присутствовать последний.

Код

\documentclass{beamer}
\usetheme{Darmstadt}
\usepackage{tikz}
\usepackage{etoolbox}

\newcounter{iii}

\AtBeginEnvironment{itemize}{\setcounter{iii}{0}}

\newcommand{\myitem}[2][$\bullet$]
{ \stepcounter{iii}
    \pgfmathtruncatemacro{\endslide}{\theiii+4}
    \only<\theiii-\endslide>{\item[#1] #2}
}

\begin{document}

\begin{frame}[t]
    \begin{itemize}
        \myitem{a \theiii}
        \myitem{b \theiii}
        \myitem{c \theiii}
        \myitem{d \theiii}
        \myitem{e \theiii}
        \myitem{f \theiii}
        \myitem{g \theiii}
        \myitem{h \theiii}
        \myitem{i \theiii}
        \myitem{j \theiii}
        \myitem{k \theiii}
        \myitem{l \theiii}
        \myitem{m \theiii}
        \myitem{n \theiii}
        \myitem{o \theiii}
        \myitem{p \theiii}
        \myitem{q \theiii}
        \myitem{r \theiii}
        \myitem{s \theiii}
        \myitem{t \theiii}
        \myitem{u \theiii}
        \myitem{v \theiii}
        \myitem{w \theiii}
        \myitem{x \theiii}
        \myitem{y \theiii}
        \myitem{z \theiii}
    \end{itemize}
\end{frame}

\end{document}

Результат

введите описание изображения здесь

решение3

Для справки в качестве расширения превосходного ответа @Matthew Leingang. Вот как можно жестко закодировать начало и конец, чтобы избежать отображения в списке менее 4 элементов.

\documentclass{beamer}
\usepackage{pgffor}
\begin{document}
\begin{frame}
    \begin{itemize}
        \only<-1>{\item 1}
        \only<-2>{\item 2}
        \only<-3>{\item 3}
        \only<+-+(3)>{\item 5}
        \only<+-+(3)>{\item 6}
        \only<+-+(3)>{\item 7}
        \only<+-+(3)>{\item 8}
        \only<+-+(3)>{\item 9}
        \only<+-+(3)>{\item 10}
        \only<+-+(3)>{\item 11}
        \only<+-+(3)>{\item 12}
        \only<+-+(3)>{\item 13}
        \only<+->{\item 14}
        \only<+->{\item 15}
        \only<+->{\item 16}
        \only<+->{\item 17}
    \end{itemize}
\end{frame}
\end{document}

Связанный контент