Benannte Pfade innerhalb eines Tikz/Bildes

Benannte Pfade innerhalb eines Tikz/Bildes

Ich versuche, das Benennungsverhalten von Pfaden innerhalb einer picDefinition zu verstehen. Beachten Sie Folgendes

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\tikzset{%
    path1/.pic={%
        \coordinate (-p) at (-0.5,-0.5);
        \draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
        \draw[black, name path=-vert] (0,-1) to (0,1);
    };
}
\tikzset{%
    path2/.pic={%
        \draw[blue, name path=-horz] (-1,0) to (1,0);
    };
}

\begin{document}
\begin{tikzpicture}
    \pic [name=p1] at (0, 0) {path1};
    \pic (p2) at (0, 0) {path2};
    \draw [name intersections={of=-vert and -horz}]
        (intersection-1) circle (2pt) to (p1-p);
    %\draw [name intersections={of=-vert and -horz-fails}]
    %    (intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}

In diesem Beispiel werden alle vier Linien korrekt gezeichnet. Außerdem wird der unkommentierte Schnittpunkt korrekt gezeichnet. Wenn ich jedoch den zweiten Schnittpunkt unkommentiere, erhalte ich den Compilerfehler

! Package tikz Error: I do not know the path named `-horz-works'. Perhaps you 
 misspelt it.

Bei meinen Recherchen stieß ich aufdiese Frageund die damit verbundenenFehlerberichtaus der Antwort. Wie bei dieser Antwort ist der letzte in genannte Pfad picaußerhalb der Definition verfügbar. Ich dachte, das könnte damit zusammenhängen, aber ich habe das Repository geklont und versucht, es mit dem Fix zu kompilieren, aber ich bekomme immer noch das gleiche Ergebnis. Ich habe auch versucht, zu verwenden name path .., aber dadurch wurde der Pfad in der Hauptbildumgebung nicht verfügbar.

Meine Frage ist: Handelt es sich hierbei um eine Manifestation desselben Fehlers? Wenn nicht, welche Benennungsregeln gelten für Pfade innerhalb einer picDefinition?

Mir fällt auf, dass die Koordinate ( hier) wie erwartet den Namen außerhalb des Gültigkeitsbereichs -perbt , und ich möchte den Pfad auf die gleiche Weise referenzieren.picpic


Motivation

Mein ultimatives Ziel ist es, eine Linie zum Schnittpunkt zweier Pfade zu zeichnen, die innerhalb eines generierten definiert sind pic. Ich habe Python-Code, der die Breiten- und Längengrade entlang einer Kugel generiert. Ich möchte sie picmehrmals in einem einzigen Bild verwenden; daher möchte ich mit dem übergeordneten picNamen auf die Pfade verweisen, um nur die Schnittpunkte zu berechnen, die das, was ich zeigen möchte, voranbringen. Da ich die Pfade berechne, könnte ich die Koordinaten der Schnittpunkte definieren, aber ich möchte die Arbeit TikZ überlassen und das scheint mir übertrieben.

Antwort1

Verwenden Sie name path global, das dafür vorgesehen ist: „Übertragen“ Sie Pfade außerhalb von Umgebungen wie Bereichen oder Bildern.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\tikzset{%
    path1/.pic={%
        \coordinate (-p) at (-0.5,-0.5);
        \draw[red, name path global=-horz-fails] (-1,0.5) to (1,0.5);
        \draw[black, name path global=-vert] (0,-1) to (0,1);
    };
}
\tikzset{%
    path2/.pic={%
        \draw[blue, name path global=-horz] (-1,0) to (1,0);
    };
}

\begin{document}
\begin{tikzpicture}
    \pic [name=p1] at (0, 0) {path1};
    \pic (p2) at (0, 0) {path2};
    \draw [name intersections={of=-vert and -horz}]
        (intersection-1) circle (2pt) to (p1-p);
    \draw [name intersections={of=-vert and -horz-fails}]
        (intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Wenn Sie eindeutige Namen haben möchten, stellen Sie den Pfadnamen einfach den Namen voran pic.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\makeatletter
\newcommand{\figname}[1]{\edef#1{\tikz@fig@name}}
\makeatother

\tikzset{%
    path1/.pic={%
        \figname{\myname}
        \coordinate (-p) at (-0.5,-0.5);
        \draw[red, name path global=\myname-horz-fails] (-1,0.5) to (1,0.5);
        \draw[black, name path global=\myname-vert] (0,-1) to (0,1);
    };
}
\tikzset{%
    path2/.pic={%
        \figname{\myname}
        \draw[blue, name path global=\myname-horz] (-1,0) to (1,0);
    };
}

\begin{document}
\begin{tikzpicture}
    \pic (p1) at (0, 0) {path1};
    \pic (p2) at (0, 0) {path2};
    \draw [name intersections={of=p1-vert and p2-horz}]
        (intersection-1) circle (2pt) to (p1-p);
    \draw [name intersections={of=p1-vert and p1-horz-fails}]
        (intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}

(gleiche Ausgabe)

Antwort2

Hier ein schneller Trick, indem Sie einfach jeden Pfad in ein einzelnes Bild einfügen.

Dies beantwortet zwar nicht Ihre Frage, stellt aber sicher, dass Ihnen keine Fehler mehr unterlaufen.

\documentclass[tikz,border=5mm]{standalone}
%\usepackage{tikz}
\usetikzlibrary{intersections}

\tikzset{%
    path1/.pic={%
        \coordinate (-p) at (-0.5,-0.5);
        \draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
       % \draw[black, name path=-vert] (0,-1) to (0,1);
    },
        path3/.pic={%
        \coordinate (-p) at (-0.5,-0.5);
        %\draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
        \draw[black, name path=-vert] (0,-1) to (0,1);
    },
    path2/.pic={%
        \draw[blue, name path=-horz] (-1,0) to (1,0);
    };
}

\begin{document}
\begin{tikzpicture}
    \pic [name=p1] at (0, 0) {path1};
    \pic (p2) at (0, 0) {path2};
    \pic (p3) at (0,0) {path3};
    \draw [name intersections={of=-vert and -horz}]
        (intersection-1) circle (2pt) to (p1-p);
    \draw [name intersections={of=-vert and -horz-fails}]
        (intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}

Bildschirmfoto

verwandte Informationen