Komma im Knotennamen

Komma im Knotennamen

In meiner Datenbank haben einige Objekte Namen im A,BFormat, d. h. es gibt ein Komma dazwischen. Ich wollte so etwas machen

\node (A,B) {Comma};
\node (x) {normal};
\draw (A,B) -- (x);

Dies ist jedoch nicht zulässig. Wie kann ich Kommas oder generell andere Sonderzeichen in Knotennamen verwenden?

Antwort1

Das ist nicht möglich, da TikZ Tests durchführt wieEnthält der Koordinatenausdruck einen Doppelpunkt? Wechseln Sie dann zur polaren Syntax „Winkel:Radius“. Enthält er einen Punkt? Wechseln Sie dann zur Syntax „(Knotenname.Winkel)“ usw.

Unten finden Sie einen Codeausschnitt aus dieser Analyse.

\pgfutil@in@:{#2}%
\ifpgfutil@in@
  \let\@next\tikz@parse@polar%
\else%
  \pgfutil@in@,{#2}%
  \ifpgfutil@in@%      
    \let\@next\tikz@parse@regular%
  \else%
    \let\@next\tikz@parse@node%

Es spielt keine Rolle, was es tut, aber Sie können spüren, dass hier Entscheidungen getroffen werden. Daher wäre es zu umständlich, Kommas oder andere Satzzeichen zu vermeiden, und würde Ihren Code sehr instabil machen.

Antwort2

(Dringend nicht empfehlenswert)

Da Sie danach gefragt haben und es wahrscheinlich brauchen, können wir mit der Änderung der Catcodes beginnen, in diesem Fall:

\catcode`\,=11

Wir stoßen jedoch auf eine Reihe von Problemen und selbst dann gibt es Situationen, die mit Kommas zusammenhängen und besondere Aufmerksamkeit erfordern. Der Grund dafür ist, dass Kommas als Trennzeichen für Parameterlisten und Punktkoordinaten verwendet werden. Daher schränken wir ihre Verwendung so weit wie möglich ein, indem wir eine Gruppe verwenden.

Wir können einen Befehl oder mehrere Befehle mit { }oder mit \begingroupund einschränken \endgroup, wie in diesem Beispiel:

\begingroup
\catcode`\,=11
\node (A,B) {Comma};
\endgroup

Wir können eine bestimmte tikzpictureUmgebung einschränken:

\begingroup
\catcode`\,=11
\begin{tikzpicture}
\node (A,B) {Comma};
\end{tikzpicture}
\endgroup

Oder sogar alle tikzpictureUmgebungen, zB durch:

\tikzset{every picture/.style={execute at begin picture={\catcode`\,=11}}

Dies ist ein Beispiel für die Einschränkung einer TikZ-Umgebung:

\documentclass{article}
\usepackage{tikz}
\begin{document}
% All environments wrapper...
%\tikzset{every picture/.style={execute at begin picture={\catcode`\,=11}} 
% One environment wrapper...
\begingroup
\catcode`\,=11
\begin{tikzpicture}
% One line wrapper...
%\begingroup
%\catcode`\,=11
%\node (A,B) {Comma};
%\endgroup
\node (A,B) {Comma};
\node[xshift=3cm] (x) {normal}; 
% It is not working when we add ", draw".
%\draw (x) -- (1cm,2cm);
%\draw (A,B) -- (x); % We cannot use "-- (1cm,2cm)".
\end{tikzpicture}
\endgroup
\end{document}

Wir können mit den TikZ-Tools auch einen bestimmten Bereich einschränken und die Verwendung von Kommas direkt darin vermeiden, da wir eine Liste von Parametern, z. B. [xshift=3cm,draw], sowie ein Paar von Punktkoordinaten, z. B. , festlegen (1cm,2cm).

Im ersten Fall können wir einen Stil außerhalb der begrenzenden Gruppe definieren, zum Beispiel:

\tikzset{mystyle/.style={xshift=3cm,draw}}

Im zweiten Fall können wir \coordinatebeispielsweise den folgenden Befehl verwenden:

\coordinate (myright) at (1cm,2cm);

\pgfmathparse{pow(2,4)}Ich fürchte, Sie werden wahrscheinlich in andere Situationen geraten , in denen Ihre Aufmerksamkeit erforderlich ist. Dies ist ein Beispiel für diese Methode:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{mystyle/.style={xshift=3cm,draw}}
\begin{tikzpicture}
\coordinate (myright) at (1cm,2cm);
\begingroup
\catcode`\,=11
\node (A,B) {Comma};
\node[mystyle] (x) {normal};
\draw (A,B) -- (x) -- (myright);
\endgroup
\end{tikzpicture}
\end{document}

Ich würde Ihnen dringend empfehlen, Objektnamen umzubenennen. Dies muss nicht auf Datenbankebene erfolgen, Sie können zu diesem Zweck den generierten TeX-Code selbst verwenden.

In Ihrem minimalen Arbeitsbeispiel müsste eine Änderung von A,B„in“ ABoder „in A-B“ usw. vorgenommen werden. Wir kommen nun zu unserem letzten und passenden Beispiel, wenn ich es so ausdrücken darf:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A-B) {Comma};
\node[xshift=3cm] (x) {normal};
\draw (A-B) -- (x);
\end{tikzpicture}
\end{document}

verwandte Informationen