доступ к координате во вложенной \tikzpicture

доступ к координате во вложенной \tikzpicture

В следующем коде

\documentclass{article}
\thispagestyle{empty}
\usepackage{graphicx}
\usepackage{tikz}
\begin{document}
\begin{figure}
  \begin{tikzpicture}
    \node(inset) {
      \begin{tikzpicture}
        \coordinate(v) at (3, 4);
        \node(t) at (v){v};
        \draw[->] (1,2) -- (v);
        \end{tikzpicture}
    };
    \node(t2)[blue] at (v){v};
    \draw[->, red](5, -2) -- (v);
  \end{tikzpicture}
\end{figure}
\end{document}

Я пытаюсь нарисовать стрелку к определенной точке, соответствующей \coordinate«v» во вложенном \tikzpicture.

Из результата следует, что \coordinate«v» ходил.

введите описание изображения здесь

Как исправить?

решение1

Вместо вложенных tikzpictures используйте a local bounding box.

\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\begin{scope}[local bounding box=inset]
        \coordinate(v) at (3, 4);
        \node(t) at (v){v};
        \draw[->] (1,2) -- (v);
\end{scope}
  \node(t2)[blue] at (v){v};
  \draw[->, red](5, -2) -- (v);

\draw [red] (inset.east) -- (inset.west);
\end{tikzpicture}
\end{figure}
\end{document}

решение2

Вы можете использовать saveboxes для безопасного размещения tikzpictures, и координаты будут запомнены. Способ [remember picture]работает так: сохранить исходное местоположение в файле aux, поэтому вам придется запустить код дважды.

Следует отметить, что, помещая изображение внутрь узла, вы центрируете его (по умолчанию) в месте расположения узла (начале координат).

\documentclass{article}
\thispagestyle{empty}
\usepackage{graphicx}
\usepackage{tikz}
\begin{document}
\begin{figure}
\sbox0{\begin{tikzpicture}[remember picture]
        \coordinate(v) at (3, 4);
        \node(t) at (v){v};
        \draw[->] (1,2) -- (v);
        \end{tikzpicture}
}
  \begin{tikzpicture}[remember picture]
    \node(inset) {\usebox0};
    \node(t2)[blue] at (v){v};
    \draw[->, red](5, -2) -- (v);
  \end{tikzpicture}
\end{figure}
\end{document}

демо

решение3

Попробуйте \tikzstyle{каждую картинку}+=[запомнить картинку]

\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}

\begin{document}
  \tikzstyle{every picture}+=[remember picture]
  \begin{tikzpicture}
    \node(inset) {
      \begin{tikzpicture}[remember picture]
       \coordinate(v) at (3, 4);
       \node(t) at (v){v};
       \draw[->] (1,2) -- (v);
      \end{tikzpicture}
    };
    \node(t2)[blue] at (v){v};
    \draw[->, red](5, -2) -- (v);
  \end{tikzpicture}
\end{document}

Связанный контент