如何修复 tikzpicture 尺寸?

如何修复 tikzpicture 尺寸?

在 beamer 演示中,我使用 tikz 绘制图形。为了突出显示图形的一部分,我使用了覆盖和拟合库,如以下 MWE 所示:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}

\begin{document}
\begin{frame}
  \frametitle{TEST}
  \centering
  \begin{tikzpicture}
    \node[draw=black, rectangle]             (a) {A};
    \node[draw=black, rectangle, right=of a] (b) {B};
    \draw (a) -- (b);
    \node<2>[draw=red, line width=1.5pt, fit=(a) (b)]{};
  \end{tikzpicture}
  \begin{itemize}
  \item A
  \item B
  \end{itemize}
\end{frame}
\end{document}

这个解决方案很好用,只是当用户点击鼠标显示用 fit 绘制的高亮矩形时,整个框架会有一点偏移。我猜这是因为添加这个 fit 节点会改变 tikzpicture 的边界。我该如何消除这种烦人的偏移行为?

答案1

还有一个可以解决此问题的 TikZ 库(overlay-beamer-styles)。

该库的解决方案:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}
\usetikzlibrary{overlay-beamer-styles}

\begin{document}

\begin{frame}
  \frametitle{TEST}
  \centering
  \begin{tikzpicture}
    \node[draw=black, rectangle]             (a) {A};
    \node[draw=black, rectangle, right=of a] (b) {B};
    \node[draw=red,line width=1.5pt, fit=(a) (b), draw on=<2->]{};
    \draw (a) -- (b);
  \end{tikzpicture}
  \begin{itemize}
  \item A
  \item B
  \end{itemize}
\end{frame}
\end{document}

答案2

避免打印白框或使用透明度的解决方案:节点放置在第一张幻灯片中,但不绘制。由于缺少绘制运算符,因此使用节点手动更新边界框。

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}

\begin{document}
\begin{frame}
  \frametitle{TEST}
  \centering
  \begin{tikzpicture}
    \node[draw=black, rectangle]             (a) {A};
    \node[draw=black, rectangle, right=of a] (b) {B};
    \draw (a) -- (b);
    \node<1>(tmp)[line width=1.5pt, fit=(a) (b)]{}
      (tmp.south west) (tmp.north east); % update bounding box
    \node<2>[draw=red, line width=1.5pt, fit=(a) (b)]{};
  \end{tikzpicture}
  \begin{itemize}
  \item A
  \item B
  \end{itemize}
\end{frame}
\end{document}

答案3

这是使用 Beamer 的解决方案overlayarea。唯一真正的缺点是您必须指定区域的高度。

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}

\begin{document}
\begin{frame}
  \frametitle{TEST}
  \begin{overlayarea}{\linewidth}{.3\textheight}
  \centering
    \begin{tikzpicture}
    \only<1-2>{
      \node[draw=black, rectangle]             (a) {A};
      \node[draw=black, rectangle, right=of a] (b) {B};
      \draw (a) -- (b);}
    \only<2>{
      \node<2>[draw=red, line width=1.5pt, fit=(a) (b)]{};}
    \end{tikzpicture}
  \end{overlayarea}
    \begin{itemize}
    \item A
    \item B
    \end{itemize}
\end{frame}
\end{document}

使用 <code>overlayarea</code> 停止抖动

相关内容