Часто, когда я использую проектор для слайдов, я использую 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}