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