Etiqueta de hashtag com tikzpicture

Etiqueta de hashtag com tikzpicture

Estou tentando compilar a árvore abaixo e está funcionando. O problema é que sempre que altero o rótulo de DP ou LP para \#P(ou seja \node(\#P) {\#P}; \#), recebo a seguinte mensagem de erro:

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

Saída

Responder1

#é um caractere especial no TeX do qual você deve escapar se quiser que seja impresso. Então, você tem que escapar em texto normal. No entanto, os nomes dos nós não permitem macros, portanto não é possível usar \#no nome do nó.

Portanto, sugiro que você use outro caractere de letra xpara substituir \#no nome do nó (que é usado apenas internamente em seu código e não será digitado de qualquer maneira).

Observe que mesmo a maioria dos “caracteres especiais [...] incluindo vírgulas, ponto e vírgula, hífens, colchetes, pontos, parênteses, barras, travessões e muito mais” (citou o TikManual Z) não pode ser usado em nomes de nós.

Sobre a mudança \catcode, vejaaqui.


EDITARPossíveis soluções: 1) basta nomear o nó de forma diferente do seu texto; 2) se o nome do nó e o texto do nó precisarem ser idênticos, você poderá usar uma macro para xDsubstituir \#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}

informação relacionada