我想使用的解决方案多个 Beamer 框架中共享的时间线制作垂直时间线,即箭头指向幻灯片的底部。
\documentclass[t]{beamer}
%----------- width and color of progressbar
\usetheme[progressbar=frametitle,
% outer/progressbar=foot
]{metropolis}
\makeatletter
\setlength{\metropolis@titleseparator@linewidth}{2pt}
\setlength{\metropolis@progressonsectionpage@linewidth}{2pt}
\setlength{\metropolis@progressinheadfoot@linewidth}{2pt}
\makeatother
%------------
\setbeamertemplate{frame numbering}[fraction]
% \setbeamertemplate{navigation symbols}{}
% \useoutertheme{metropolis}
% \useinnertheme{metropolis}
\usefonttheme{metropolis}
\usetikzlibrary{overlay-beamer-styles}
\setbeamercovered{transparent=7}
\tikzset{
highlight on/.style={alt={#1{fill=red!80!black,color=red!80!black}{fill=gray!30!white,color=gray!30!white}}},
}
\begin{document}
\begin{frame}[t]{Timeline}
\frametitle{Timeline}
\begin{tikzpicture}[xscale=0.5]
\draw[line width=1.5mm,-latex,red!20] (-0.2,0) -- (20+0.2,0);
\foreach \X [evaluate=\X as \Y using int(\X-2005),count=\Z] in {2009,2010,2012,2015,2016,2017} %<- these are the years not to be highlighted
{
\draw[highlight on=<0>] ({\Y-0.2},-0.5) -- ({\Y+0.2},-0.5) -- (\Y,-0.1) -- cycle;
\node[anchor=south,highlight on=<0>,fill=white,rotate=45,anchor=south
west,inner sep=0pt] at (\Y,0.2) {\X};
}
\foreach \X [evaluate=\X as \Y using int(\X-2000),count=\Z] in {} %<- these are the years which are to be highlighted
{
\draw[highlight on=<\Z>] ({\Y-0.2},-0.5) -- ({\Y+0.2},-0.5) -- (\Y,-0.1) -- cycle;
\node[anchor=south,highlight on=<\Z>,fill=white,rotate=45,anchor=south
west,inner sep=0pt] at (\Y,0.2) {\X};
}
\end{tikzpicture}
\begin{itemize}
\item<1> frame 1
\item<2> frame 2
\item<3> frame 3
\item<4> frame 4
\item<5> frame 5
\item<6> frame 6
\end{itemize}
\end{frame}
%--- Next Frame ---%
\end{document}
我还想知道如何使用相同的项目列表(例如 itemize 中的第一个项目)显示两个日期(例如 2009 年和 2012 年)。我还想知道如何控制箭头的长度和日期之间的间隔。
答案1
下面的解决方案使用列,第一列用于时间线,第二列用于项目列表。
\begin{columns}[b]
\begin{column}{0.15\textwidth}
... tikzpicture ...
\end{column}
\begin{column}{0.8\textwidth}
... itemize ...
\end{column}
\end{columns}
时间线的长度取决于是命令中的坐标\draw
和因子scale
。在这里,线从 开始0.5
并下降到-17
(想法是每减少 1 对应 1 年)。因子scale
是。可以通过更改选项中的0.38
魔法数字来控制图片相对于逐项列表的垂直位置。-5.5
baseline
\begin{tikzpicture}[scale=0.38,baseline={(0,-5.5)}]
\draw[line width=1mm,-latex,red!20] (0,0.5) -- +(0,-17);
时间线上的每一项都由三个值描述:\Label
、\Offset
年份 和\Overlay
规范。对于以下示例中的时间线,项目列表指定为
\Label/\Offset/\Overlay in {2000/0/1,2001/1/2,2002/2/3,2005/5/4,2008/8/5,2009/9/6,2012/12/6,2015/15/7}
此列表以及逐项列表中的叠加规范决定何时突出显示某项。如果两个项出现相同的帧编号,则它们将同时突出显示。您还可以使用更复杂的规范来指定范围等。
关于箭头,请注意两个绘制命令中的选项-latex
和-{Latex[length=8]}
。第一个选项确定时间轴的箭头,第二个选项确定时间轴上标记年份的箭头。您可以用 tikz 库中的任何箭头替换它们arrows.meta
。
\documentclass{beamer}
\setbeamercovered{transparent}
\setbeamertemplate{navigation symbols}{} % removes navigation symbols at the bottom left
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\usetikzlibrary{arrows.meta}
\tikzset{
highlight on/.style={alt={#1{fill=red!80!black,color=red!80!black}{fill=gray!30!white,color=gray!30!white}}},
}
\begin{document}
\begin{frame}[t]{Timeline}
\begin{columns}[b]
\begin{column}{0.15\textwidth}
\begin{tikzpicture}[scale=0.38,baseline={(0,-5.5)}]
\draw[line width=1mm,-latex,red!20] (0,0.5) -- +(0,-17);
\foreach \Label/\Offset/\Overlay in {2000/0/1,2001/1/2,2002/2/3,2005/5/4,2008/8/5,2009/9/6,2012/12/6,2015/15/7} {
\def\Y{-\Offset}
\draw[highlight on=<\Overlay>,-{Latex[length=8]}] (-0.5,\Y) -- (-0.1,\Y);
\node[highlight on=<\Overlay>,anchor=west,fill=white,inner sep=0pt] at (0.4,\Y) {\Label};
}
\end{tikzpicture}
\end{column}
\begin{column}{0.8\textwidth}
\begin{itemize}
\item<1> November 2000: marmots start hibernating
\item<2> August 2001: marmots eat
\item<2> Semptember 2001: marmots eat
\item<3> July 2002: marmots eat
\item<4> May 2005: marmots awake from hibernation\
\item<4> November 2005: marmots start hibernating again
\item<5> May 2008: marmots drink honey liquor
\item<6> 2009, 2012: noisy, marmots can't fall asleep
\item<7> July 2015: marmots eat pineapple cake
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
如何从 pdf 页面获取动画 gif:使用 ImageMagick 将 PDF 幻灯片转换为动画 GIF 和视频