Хэштег-метка с tikzpicture

Хэштег-метка с tikzpicture

Я пытаюсь скомпилировать дерево ниже и оно работает. Проблема в том, что всякий раз, когда я меняю метку DP или LP на \#P(ie \node(\#P) {\#P}; \#), я получаю следующее сообщение об ошибке:

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

Выход

решение1

#— это специальный символ в TeX, который нужно экранировать, если вы хотите, чтобы он был напечатан. Поэтому его нужно экранировать в обычном тексте. Однако имена узлов не допускают макросов, поэтому вы не можете использовать его \#в имени узла.

Поэтому я предлагаю вам использовать другой буквенный символ, например, xдля замены \#в имени узла (который используется только внутри вашего кода и в любом случае не будет набран).

Обратите внимание, что даже большинство «специальных символов [...], включая запятые, точки с запятой, дефисы, фигурные скобки, точки, скобки, косые черты, тире и многое другое» (цитируется по TiкZ manual) нельзя использовать в именах узлов.

При изменении \catcodeсм.здесь.


РЕДАКТИРОВАТЬВозможные решения: 1) просто назвать узел иначе, чем его текст; 2) если имя узла и текст узла должны быть идентичны, можно использовать макрос для замены xDна \#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}

Связанный контент