tikzpicture のハッシュタグ ラベル

tikzpicture のハッシュタグ ラベル

以下のツリーをコンパイルしようとしていますが、うまく動作しています。問題は、DP または LP のラベルを\#P(つまり\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したがって、ノード名でreplace のような別の文字を使用することをお勧めします\#(これはコード内で内部的にのみ使用され、いずれにせよタイプセットされません)。

「カンマ、セミコロン、ハイフン、中括弧、ドット、括弧、スラッシュ、ダッシュなどを含むほとんどの特殊文字」も、TiZ マニュアル) はノード名には使用できません。

変更については\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}

関連情報