TikZ: Knotennamen mit einem "."

TikZ: Knotennamen mit einem "."

In TikZ kann man für einen Knoten (x) z. B. (x.west) verwenden, um auf Anker des Knotens x zu verweisen. Wenn ich versuche, eine Koordinate mit einem "." im Namen manuell zu definieren, funktioniert das nicht:

\coordinate (x.test) at (4,0);

Gibt es eine Möglichkeit, eine Koordinate so zu definieren, dass (x.text) auf diese Koordinate verweist?

Antwort1

Ja, Sie können eine Koordinate (oder allgemein einen Knoten) mit einem .im Namen benennen. Aber Sie werden keinen Spaß dabei haben.

Von den folgenden Lösungen halte ich nur die letzte (unter expliziter Verwendung des Knotens cs) für eine gültige und stabile Lösung.

  1. ist nervig.
  2. kann ein Durcheinander verursachen, da .es sich jetzt um einen Buchstaben handelt und dieser in Makronamen verwendet werden kann (es gibt eine Alternative durch Aktivieren, .was tatsächlich sicherer sein kann).
  3. ist einfach mehr zu schreiben, aber auch für andere eindeutig.
\documentclass{article}
\usepackage{tikz}
\tikzset{no anchors/.code={\catcode`\.=11\relax}}
\begin{document}
\begin{tikzpicture}
\coordinate (x.test) at (4,0);

% 1. Hide the dot from TikZ parser.
\node[shift=(up:2)] (no dot) at ({{{{x.test}}}}) {no dot};
% 2. “Disguise” the dot as a different character
\draw {[no anchors] (x.test) } -- (no dot.south);
% 3. Explicitly use the node cs.
\draw (0,4) -- (node cs: name = x.test);
\end{tikzpicture}
\end{document}

Wenn Sie einen zusätzlichen Anker zu einembestehendeKnoten, den Sie verwenden können, append after commandoder Bilder alsDas habe ich in einer anderen Antwort von mir getan(wenn Sie damit leben können x-test, ist es jedoch viel einfacher).

Wir können auch neue Anker zu einfachen Knoten hinzufügen, wie ich es ineine weitere Antwort mit der gleichen Taktik.

Wenn Sie diese Anker auch zum Platzieren eines Knotens verwenden möchten, ist der Arbeitsaufwand zwar größer, aber ich glaube, das lässt sich ziemlich einfach lösen.

Aber dazu müsste ich Ihren tatsächlichen Anwendungsfall sehen.

Antwort2

Du fragst

Gibt es eine Möglichkeit, eine Koordinate so zu definieren, dass (x.text) auf diese Koordinate verweist?

coordinateTechnisch gesehen schon. Sie könnten die Form (hoffentlich lokal) neu definieren, um einen testAnker zu haben.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\makeatletter
\pgfdeclareshape{coordinate}
{
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by -.5\dp\pgfnodeparttextbox%
}
\anchor{center}{\centerpoint}
\anchor{test}{\centerpoint}
\anchorborder{\centerpoint}
}
\makeatother
\coordinate (x) at (4,0);
\draw (x.test) -- ++ (1,1);
\end{tikzpicture}
\end{document}

Ich empfehle jedoch nicht, diese oder ähnliche Konstruktionen zu verwenden. Vielmehr möchte ich argumentieren, dass es viel besser ist, die Tatsache zu akzeptieren, dass Punkte, Kommas, Klammern, eckige Klammern, geschweifte Klammern (die als solche interpretiert werden), ~, einfache Dollarzeichen, einfache #s, einfache Pipes, einfache %, Et-Zeichen und vielleicht noch ein paar mehr nicht funktionieren. (Abhängig von den Paketen, die Sie laden, kann diese Liste ohnehin länger werden.) Persönlich bin ich wirklich erstaunt darüber, dass z. B. Leerzeichen und Unterstriche funktionieren. Diese Sonderzeichen zu haben, macht den Umgang mit Ti sehr bequem.kZ. Wollte man das zulassen ., dann würde es entweder zu Unklarheiten kommen oder man müsste den Benutzern verbieten, (node.north)auf den Nordanker zu verweisen.

verwandte Informationen