我想创建一个节点,其文本内容在叠加层之间发生变化。当然,不同的内容有不同的大小,因此节点本身在叠加层之间会改变大小。我想通过分配所需的最大大小来避免这种情况。
下面是一些代码来演示我想要的效果。由于Bar
文本标题的大小发生变化,整个图片会跳动。首先,我尝试使用\only
来覆盖,但这意味着只有当前的覆盖会占用空间。然后,我尝试使用\visible
,但它们总是会占用空间。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}{Try 1}
\begin{center}
\begin{tikzpicture}
\draw (0,0) node[draw]{Foo};
\draw (1,0) node[right]{Bar{\only<2>{short}}{\only<3>{much much longer}}};
\end{tikzpicture}
\end{center}
\end{frame}
\begin{frame}{Try 2}
\begin{center}
\begin{tikzpicture}
\draw (0,0) node[draw]{Foo};
\draw (1,0) node[right]{Bar{\visible<2-3>{\visible<2>{short}}{\visible<3>{much much longer}}}};
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
答案1
如果您事先知道最长的文本(并愿意在文档中指定它),您只需添加选项
text width=width("Barmuch much longer")
到节点。
正如您所注意到的,这仍然会“跳来跳去”(至少在垂直方向上),因为最后一个具有g
下降部(TeX 语言中的深度)。
由于您隐式指定right
节点应使用其west
锚点,因此它将垂直对齐到文本框的中心。
您可以通过底部锚点或中间锚点west mid
、mid
、、来锚定您的节点east mid
,或者也可以为您的节点指定和。base west
base
base east
text
text depth
text height
添加\strut
(也可以通过自动添加到您的节点font=\strut
)可以将文本框垂直延伸到足够的距离,以使正常文本不会突出。
但你也可以text depth
再次使用text height
:
\tikzset{
max text/.style={
text width ={width("#1")},
text height={height("#1")},
text depth ={depth("#1")}},
}
和
node[max text=Barshourtmuch much longer]
最后,它取决于您的图表需要什么、如何放置节点、是否有draw
边界以及是否将线连接到它们。
添加 a\strut
类似于执行
text depth=.3\baselineskip,
text height=.7\baselineskip,
尽管\strut
将允许文本框垂直增长,text depth
但text height
将导致固定大小。
答案2
您可以将节点拆分为两个节点,并让长节点在所有幻灯片上占据空间,使其不可见:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}{Try 1}
\begin{center}
\begin{tikzpicture}
\node[draw] (0,0) {Foo};
\node[right,visible on=<3>] at (1,0) {\strut Barmuch much longer};
\node[right,visible on=<-2>] at (1,0) {\strut Bar\only<2>{short}};
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}