考虑以下 MWE:我发现有趣的是,第二个tikzpicture
没有第一个就无法编译,即使第二个值(A)
是正在使用的值。有人能解释一下吗?
在我的实际示例中,我有一个函数图,我从中存储了一些坐标。稍后我需要在这些命名点处添加一些额外的绘图。除了将我scope
用来放置东西的时间推迟到之后,还有其他方法可以做到这一点吗\end{axis}
?
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\begin{document}
\begin{tikzpicture}
% remove this and the second tikzpicture does not compile
\coordinate (A) at (0,0);
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
xmax=3,xmin=0,ymax=3,ymin=0
]
\draw (axis cs: 0,0) -- (axis cs:3,3)
coordinate [pos=0.4] (A)
;
\fill (A) circle (2pt);
% more this scope until after \end{axis} and we do not need
% to have (A) defined in another image
\begin{scope}[
shift={(A)},
]
\draw (0,0) circle (1cm);
\end{scope}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
由于pgfplots
有两个阶段的工作流程,首先收集和排队,然后执行可视化非绘图命令,如果依赖于先前的命令,则需要按正确的顺序收集这些命令。否则,它们可能会像这里发生的那样过早执行。
受(我认为)的启发,其中\pgfextra
有一个类似的命令,它实际上有助于将非命令排队到现有命令中。虽然我希望它能够自动工作,因为最新版本的自动识别原始 TikZ 命令不知何故没有通过。因此,我们通过将范围放在 内来手动执行此操作。pgfplots
\pgfplotsextra
pgfplots
pgfplots
\pgfplotsextra