
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}
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 x
para 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 xD
por \#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}