Zugriff auf eine Koordinate in einem verschachtelten \tikzpicture

Zugriff auf eine Koordinate in einem verschachtelten \tikzpicture

Im folgenden Code

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

Ich versuche, einen Pfeil zu einem bestimmten Punkt zu zeichnen, der \coordinate„v“ in einem verschachtelten entspricht \tikzpicture.

Aus dem Ergebnis geht hervor, dass \coordinate„v“ gegangen ist.

Bildbeschreibung hier eingeben

Wie repariert man?

Antwort1

Anstelle der Verschachtelung tikzpicturevon s verwenden Sie ein 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}

Antwort2

Sie können Saveboxen verwenden, um Tikzpictures sicher zu verschachteln, und die Koordinaten werden gespeichert. Die Methode [remember picture]funktioniert so, dass der Ursprungsort in der Aux-Datei gespeichert wird, sodass Sie den Code zweimal ausführen müssen.

Es ist zu beachten, dass Sie das Bild durch Platzieren innerhalb eines Knotens an der Knotenposition (Ursprung) zentrieren (Standard).

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

Demo

Antwort3

Versuchen Sie \tikzstyle{jedes Bild}+=[Bild merken]

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

verwandte Informationen