如何正确地为投影仪中水平和垂直边框不断增长的表格制作动画?

如何正确地为投影仪中水平和垂直边框不断增长的表格制作动画?

我逐列为表格字段制作动画。但我很难让垂直线只出现在相应的列中。此外,我希望水平线在每出现一列时都会变长。简而言之,空的方框不应出现在任何幻灯片中。有没有一个简洁且可重复使用的解决方案?提前致谢。

\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}

相关内容