我是 TikZ 新手。我想创建两张幻灯片(在 Beamer 中),除了第二张幻灯片中添加了一个圆圈外,其余完全相同。我不希望添加圆圈影响页面上其他对象的位置,而这正是目前发生的情况。有什么建议吗?
\documentclass[xcolor=svgnames, professionalfonts,12pt]{beamer}
\usepackage{amsmath}
\usepackage{pgfpages}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds,arrows}
\usepackage{graphics}
\begin{document}
\frame{
\begin{figure}
\begin{tikzpicture}[scale=1]
\draw (8,1) circle [radius=1.081];
\draw[fill] (15.5,0) circle [radius=0.05];
\draw (8,-2) circle [radius=1.08];
\end{tikzpicture}
\end{figure}
}
\frame{
\begin{figure}
\begin{tikzpicture}[scale=1]
\draw (8,1) circle [radius=1.081];
\draw[fill] (15.5,0) circle [radius=0.05];
\draw (8,-2) circle [radius=1.08];
\draw[dashed] (15.5,0) circle [radius=7.515];
\end{tikzpicture}
\end{figure}
}
\end{document}
答案1
scope
另一种方法是使用选项绘制更大的圆圈overlay
。从TikZ/PGF 手册:
[ ] 的效果
overlay
是,计算当前图片的边界框时,不会考虑当前范围内的所有内容。
编辑:
如果两张幻灯片的其他内容相同,您可以使用 Beamer 覆盖规范来简化您的代码(不幸的是,Beamer 覆盖与 TikZ 覆盖不同):只需将 Beamer 覆盖规范添加<2->
到\draw
较大圆圈的命令中(这意味着较大的圆圈将仅从第二张幻灯片开始显示)
还有一点需要注意:不需要加载该graphics
包,因为 TikZ 会自动加载graphicx
\documentclass[xcolor=svgnames, professionalfonts,12pt]{beamer}
\usepackage{amsmath}
\usepackage{pgfpages}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds,arrows}
\begin{document}
\frame{
\begin{tikzpicture}[scale=1]
\draw (8,1) circle [radius=1.081];
\draw[fill] (15.5,0) circle [radius=0.05];
\draw (8,-2) circle [radius=1.08];
\begin{scope}[overlay]
\draw<2->[dashed] (15.5,0) circle [radius=7.515];
\end{scope}
\end{tikzpicture}
}
\end{document}
答案2
问题在于它tikz
会自动将每张图片的边界框调整为该图片中使用的坐标。添加大圆圈时,会更改该图片的边界框。但您可以使用任何特定\draw
命令作为边界框,因此您应该添加该命令以使用较小的圆圈来定义两张图片的边界框。
我figure
从您的代码中删除了该环境,因为我认为它不适合在beamer
一般情况下使用,因为它是一个浮动环境,而您不希望材料在演示文稿中浮动。但是,正如 Gonzalo 在评论中指出的那样,在演示文稿中保留这样的浮动环境实际上是可以的,特别是如果您还使用相同的beamer
代码来制作演示文稿的文章版本。它还允许您使用字幕。Beamer 在演示模式下停用浮动属性。但是,如果这不是您的意图,那么在演示文稿中真的没有必要使用浮点数。
请注意,我认为 KevinC 的答案是这种特殊情况下更合适的答案,因为它使用beamer
方法,并且独立于内部的代码tikzpicture
。
\documentclass[xcolor=svgnames, professionalfonts,12pt]{beamer}
\usepackage{amsmath}
\usepackage{pgfpages}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds,arrows}
\usepackage{graphics}
\begin{document}
\frame{
\begin{tikzpicture}[scale=1]
\draw[use as bounding box](8,1) circle [radius=1.081];
\draw[fill] (15.5,0) circle [radius=0.05];
\draw[] (8,-2) circle [radius=1.08];
\end{tikzpicture}
}
\frame{
\begin{tikzpicture}
\draw[use as bounding box] (8,1) circle [radius=1.081];
\draw[fill] (15.5,0) circle [radius=0.05];
\draw[] (8,-2) circle [radius=1.08];
\draw[dashed] (15.5,0) circle [radius=7.515];
\end{tikzpicture}
}
\end{document}