
以下のツリーをコンパイルしようとしていますが、うまく動作しています。問題は、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 のような別の文字を使用することをお勧めします\#
(これはコード内で内部的にのみ使用され、いずれにせよタイプセットされません)。
「カンマ、セミコロン、ハイフン、中括弧、ドット、括弧、スラッシュ、ダッシュなどを含むほとんどの特殊文字」も、TiけZ マニュアル) はノード名には使用できません。
変更については\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}