我逐列为表格字段制作动画。但我很难让垂直线只出现在相应的列中。此外,我希望水平线在每出现一列时都会变长。简而言之,空的方框不应出现在任何幻灯片中。有没有一个简洁且可重复使用的解决方案?提前致谢。
\documentclass{beamer}
\mode<presentation>{\usetheme{Madrid}}
\begin{document}
\begin{frame}{3 columns}{}
\centering
\begin{tabular}{|c|c|c|}
\hline
\onslide<.(1)->Column A & \onslide<+(1)->{Column B} & \onslide<+(1)->{Column C} \\ \hline
\onslide<.(-2)-.(1)>{11} & \onslide<.-.(1)>{12} & \onslide<.(1)-.(1)>{13} \\
\hline
\onslide<.(-2)-.(1)>{21} & \onslide<.-.(1)>{22} & \onslide<.(1)-.(1)>{23} \\
\hline
\onslide<.(-2)-.(1)>{31} & \onslide<.-.(1)>{32} & \onslide<.(1)-.(1)>{33} \\
\hline
\end{tabular}
\end{frame}
\end{document}
答案1
一种非常肮脏的解决方案,使用包工作texpos
(见文档)。使用此解决方案,您必须使用提供的网格(使用 Ti 创建)手动将表格置于框架的中心钾Z)。您必须创建三个表格,其中分别为 1、2 和 3 列,并在不同的幻灯片上重叠。
\documentclass{beamer}
\mode<presentation>{\usetheme{Madrid}}
\newcommand{\nx}{40}%number of division on x axis
\newcommand{\ny}{10}%number of division on y axis
\usepackage[absolute,overlay]{textpos}
\TPGrid{\nx}{\ny}
\usepackage{tikz}
\usetikzlibrary{math}
\newcommand\myGrid{%
\begin{tikzpicture}[
overlay,
remember picture,
shift={(current page.north west)},
]
\tikzmath{
\sdx=\nx-1;
\sdy=\ny-1;
}
\draw[very thin, blue!10, xstep=\TPHorizModule, ystep=\TPVertModule]
(current page.south west) grid (current page.north east);
\draw[very thin, red!50, xstep=5*\TPHorizModule, ystep=5*\TPVertModule]
(current page.south west) grid (current page.north east);
\foreach \x in {1,2,...,\sdx} {
\node [xshift=\x*\TPHorizModule,label=below:\textcolor{white}{\tiny\x},inner sep=0pt,outer sep=0pt] at
(current page.north west){};
}
\foreach \y in {1,2,...,\sdy} {
\node [yshift=-\y*\TPVertModule,label=right:\tiny\y,inner sep=0pt,outer sep=0pt] at
(current page.north west) {};
}
\end{tikzpicture}%
}
\begin{document}
\begin{frame}{3 columns}{}
%\myGrid% <------uncomment and manually center the table on the frame changing \posX and \posY
\def\posX{10.5}
\def\posY{3}
\begin{textblock}{20}(\posX,\posY)
\onslide<1>{
\begin{flushleft}
\begin{tabular}{|c|}
\hline
Column A \\
\hline
11 \\
\hline
21 \\
\hline
31 \\
\hline
\end{tabular}
\end{flushleft}
}
\end{textblock}
\begin{textblock}{20}(\posX,\posY)
\onslide<2>{
\begin{flushleft}
\begin{tabular}{|c|c|}
\hline
Column A & Column B \\
\hline
11 & 12 \\
\hline
21 & 22 \\
\hline
31 & 32 \\
\hline
\end{tabular}
\end{flushleft}
}
\end{textblock}
\begin{textblock}{20}(\posX,\posY)
\onslide<3>{
\begin{flushleft}
\begin{tabular}{|c|c|c|}
\hline
Column A & Column B & Column C \\
\hline
11 & 12 & 13 \\
\hline
21 & 22 & 23 \\
\hline
31 & 32 & 33 \\
\hline
\end{tabular}
\end{flushleft}
}
\end{textblock}
\end{frame}
\end{document}
答案2
这并不能解决您的问题,但如果这些行不是必需的(有人说它们没用),那么下面的代码就轻量多了。必须加载包array
。
\documentclass{beamer}
\mode<presentation>{\usetheme{Madrid}}
\usepackage{array}
\begin{document}
\begin{frame}{3 columns}{}
\centering
\begin{tabular}{>{\onslide<1->}c >{\onslide<2->}c >{\onslide<3->}c}
% \hline
Column A & Column B & Column C \\ % \hline
11 & 12 & 13 \\
% \hline
21 & 22 & 23 \\
% \hline
31 & 32 & 33 \\
% \hline
\end{tabular}
\end{frame}
\end{document}