Hashtag-Label mit Tikzpicture

Hashtag-Label mit Tikzpicture

Ich versuche, den folgenden Baum zu kompilieren, und es funktioniert. Das Problem ist, dass ich jedes Mal, wenn ich die Bezeichnung von DP oder LP in \#P(dh \node(\#P) {\#P}; \#) ändere, die folgende Fehlermeldung erhalte:

! Missing \endcsname inserted.
<to be read again>
\#
l.17 ...LP}; L [.YP Y [.FP ] ] ] ] ] ] ]
]
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.
Missing character: There is no # in font nullfont!
Missing character: There is no P in font nullfont!
\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}

\usepackage{tikz-qtree-compat}

\tikzset{every tree node/.style={baseline=(top.base), level distance=2em, sibling distance=4em, align=center, parent anchor=south, child anchor=north, anchor=north}, sibling distance=15pt}

\usetikzlibrary{positioning} 

\begin{document}

\begin{tikzpicture}  [inv/.style={overlay, coordinate  }]  

\Tree [.XP X [.ZP Z [.\node(DP) {DP}; D    [.\node(LP) {LP}; L      [.YP Y [.FP     ] ] ] ] ]  ] ] ] 

\node [ right=1cm of DP,font=\itshape] (X) {Blah};

\draw[<-] (X.west) -- (DP);

\node [ right=1cm of LP,font=\itshape] (X) {Blah};

\draw[<-] (X.west) -- (LP);    

\end{tikzpicture}

\end{document}

Ausgabe

Antwort1

#ist ein Sonderzeichen in TeX, das Sie maskieren müssen, wenn Sie es drucken möchten. Sie müssen es also in normalem Text maskieren. Knotennamen erlauben jedoch keine Makros, sodass Sie es nicht \#im Knotennamen verwenden können.

Daher empfehle ich Ihnen , im Knotennamen ein anderes Buchstabenzeichen zu verwenden, z. B. „ xreplace “. (Dieses wird in Ihrem Code nur intern verwendet und wird sowieso nicht gesetzt.)\#

Beachten Sie, dass selbst die meisten „Sonderzeichen [...] einschließlich Kommas, Semikolons, Bindestriche, Klammern, Punkte, Klammern, Schrägstriche, Gedankenstriche und mehr“ (zitiert nach dem TikZ-Handbuch) kann nicht in Knotennamen verwendet werden.

Informationen zum Ändern \catcodefinden Sie unterHier.


BEARBEITENMögliche Lösungen: 1) Geben Sie dem Knoten einfach einen anderen Namen als seinem Text. 2) Wenn Knotenname und Knotentext identisch sein müssen, können Sie ein Makro verwenden, um sie wie folgt zu xDersetzen \#D:

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\usepackage{xstring}
\newcommand{\xtohash}[1]{\StrSubstitute[0]{#1}{x}{\#}}

\begin{document}

\begin{tikzpicture}

\node at (0,0) (xD) {\#D};

\node at (0,1) (xD) {\xtohash{xD}};

\end{tikzpicture}

\end{document}

verwandte Informationen