代码

代码

我在 beamer 中有一张如下的表格。

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage{default}

\begin{document}
\begin{frame}
 \frametitle{test}
 \begin{center}
\huge \Huge
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
A&
B&
C&
B&
A&
B&
C\\
\hline
\end{tabular}
\end{center}
\end{frame}

我希望在第一帧中突出显示前三个单元格,方法是将包含这三个单元格的矩形的外边框加粗并使用不同的颜色。在下一帧中,单元格 2 至 4 将使用此边框,在下一帧中,单元格 3 至 5 将使用此边框,在最后一帧中,单元格 4 至 6 将使用此边框。

我们怎样才能做到这一点?

我觉得我可以通过设置四个大部分重复的框架来实现这一点,并且每个框架中的表格都并排粘在一起。然而,这似乎不是一个好的解决方案。

答案1

您可以使用 TikZ 矩阵(而不是tabular)来执行此操作。

代码

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{frame}{test}
\centering

\begin{tikzpicture}
  \tikzset{
    mstyle/.style={column sep=-\pgflinewidth,nodes={draw},font=\huge},
    window/.style={draw,very thick,blue},
  }
  \matrix(m)[matrix of nodes,ampersand replacement=\&,mstyle]{
    A \& B \& C \& B \& A \& B \& C \\
  };
  \foreach \j [count=\i] in {3,...,7}{
    \onslide<\i>{
    \draw[window](m-1-\i.north west)rectangle(m-1-\j.south east);
  }}
\end{tikzpicture}

\end{frame}

\end{document}

输出

在此处输入图片描述

答案2

您可以尝试这样的事情:

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage{default,tikz}
\usetikzlibrary{tikzmark,calc}

\begin{document}
  \begin{frame}
    \frametitle{test}
    \centering
      \begin{tikzpicture}[remember picture, ultra thick, font=\Huge]
        \node{%
          \begin{tabular}{|*{7}{c|}}
            \hline
            \subnode{a}{A}&
            \subnode{b}{B}&
            \subnode{c}{C}&
            \subnode{d}{D}&
            \subnode{e}{E}&
            \subnode{f}{F}&
            \subnode{g}{G}\\
            \hline
          \end{tabular}
        };
        \onslide<1>{%
          \draw [blue] ($(a.north west) - (-.25em,.5em)$) -- ($(c.north east) - (.25em,.5em)$);
          \draw [blue] ($(a.south west) - (-.25em,0)$) -- ($(c.south east) - (.25em,0)$);
        }
        \onslide<2>{%
          \draw [blue] ($(b.north west) - (-.25em,.5em)$) -- ($(d.north east) - (.25em,.5em)$);
          \draw [blue] ($(b.south west) - (-.25em,0)$) -- ($(d.south east) - (.25em,0)$);
        }
        \onslide<3>{%
          \draw [blue] ($(c.north west) - (-.25em,.5em)$) -- ($(e.north east) - (.25em,.5em)$);
          \draw [blue] ($(c.south west) - (-.25em,0)$) -- ($(e.south east) - (.25em,0)$);
        }
        \onslide<4>{%
          \draw [blue] ($(d.north west) - (-.25em,.5em)$) -- ($(f.north east) - (.25em,.5em)$);
          \draw [blue] ($(d.south west) - (-.25em,0)$) -- ($(f.south east) - (.25em,0)$);
        }
      \end{tikzpicture}
  \end{frame}
\end{document}

突出显示表格

编辑

正如评论中所要求的那样,此代码通过连接垂直线将粗线变成“窗口”。

因为粗线现在勾勒出一个矩形,形成一条连续的线,所以\draw每帧可以使用一个而不是两个命令,我们可以用来-- cycle完成矩形形状:

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage{default,tikz}
\usetikzlibrary{tikzmark,calc}

\begin{document}
  \begin{frame}
    \frametitle{test}
    \centering
    \begin{tikzpicture}[remember picture, ultra thick, font=\Huge]
      \node{%
        \begin{tabular}{|*{7}{c|}}
          \hline
          \subnode{a}{A}&
          \subnode{b}{B}&
          \subnode{c}{C}&
          \subnode{d}{D}&
          \subnode{e}{E}&
          \subnode{f}{F}&
          \subnode{g}{G}\\
          \hline
        \end{tabular}
      };
      \onslide<1>{%
        \draw [blue] ($(a.north west) - (-.275em,.425em)$) -- ($(c.north east) - (.2em,.425em)$) -- ($(c.south east) - (.2em,.05em)$) -- ($(a.south west) - (-.275em,.05em)$) -- cycle;
      }
      \onslide<2>{%
        \draw [blue] ($(b.north west) - (-.275em,.425em)$) -- ($(d.north east) - (.2em,.425em)$) -- ($(d.south east) - (.2em,.05em)$) -- ($(b.south west) - (-.275em,.05em)$) --cycle;
      }
      \onslide<3>{%
        \draw [blue] ($(c.north west) - (-.275em,.425em)$) -- ($(e.north east) - (.2em,.425em)$) -- ($(e.south east) - (.2em,.05em)$) -- ($(c.south west) - (-.275em,.05em)$) -- cycle;
      }
      \onslide<4>{%
        \draw [blue] ($(d.north west) - (-.275em,.425em)$) -- ($(f.north east) - (.2em,.425em)$) -- ($(f.south east) - (.2em,.05em)$) -- ($(d.south west) - (-.275em,.05em)$) -- cycle;
      }
    \end{tikzpicture}
  \end{frame}
\end{document}

\foreach可以使用循环遍历由幻灯片编号、所需“窗口”左侧的节点和所需“窗口”右侧的节点组成的三元组集来简化此代码。我们可以使用\slide/\leftside/\rightside我们想要循环的变量,如下所示:

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage{default,tikz}
\usetikzlibrary{tikzmark,calc}

\begin{document}
  \begin{frame}
    \frametitle{test}
    \centering
    \begin{tikzpicture}[remember picture, ultra thick, font=\Huge]
      \node{%
        \begin{tabular}{|*{7}{c|}}
          \hline
          \subnode{a}{A}&
          \subnode{b}{B}&
          \subnode{c}{C}&
          \subnode{d}{D}&
          \subnode{e}{E}&
          \subnode{f}{F}&
          \subnode{g}{G}\\
          \hline
        \end{tabular}
      };
      \foreach \slide/\leftside/\rightside in {1/a/c,2/b/d,3/c/e,4/d/f}
      \onslide<\slide>{%
        \draw [blue] ($(\leftside.north west) - (-.275em,.425em)$) -- ($(\rightside.north east) - (.2em,.425em)$) -- ($(\rightside.south east) - (.2em,.05em)$) -- ($(\leftside.south west) - (-.275em,.05em)$) -- cycle;
      };
    \end{tikzpicture}
  \end{frame}
\end{document}

这使得调整“窗口”的大小、位置或其他特征变得更加容易,并且可以直接将滑动框架延伸到更长的一排“窗格”。

矩形滑动框架

相关内容