Etiqueta hashtag con tikzpicture

Etiqueta hashtag con tikzpicture

Estoy intentando compilar el árbol a continuación y está funcionando. El problema es que cada vez que cambio la etiqueta de DP o LP a \#P(es decir \node(\#P) {\#P}; \#), aparece el siguiente mensaje de error:

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

Producción

Respuesta1

#es un carácter especial en TeX del cual debes escapar si quieres que se imprima. Entonces, debes escaparlo en texto normal. Sin embargo, los nombres de los nodos no permiten macros, por lo que no se pueden utilizar \#en el nombre del nodo.

Por lo tanto, le sugiero que use otro carácter de letra como xpara reemplazar \#en el nombre del nodo (que solo se usa internamente en su código y no se escribirá de todos modos).

Tenga en cuenta que incluso la mayoría de los “caracteres especiales [...] incluidos comas, punto y coma, guiones, llaves, puntos, paréntesis, barras, guiones y más” (se citó el TikManual Z) no se puede utilizar en nombres de nodos.

Sobre el cambio \catcode, veraquí.


EDITARPosibles soluciones: 1) simplemente nombre el nodo de manera diferente a su texto; 2) si el nombre del nodo y el texto del nodo deben ser idénticos, puede usar una macro para reemplazarlos xDpor \#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}

información relacionada