为了重用 中的标记节点样式tikz-qtree
,我定义了
\newcommand{\lnode}[3]{\node [label = {#1} : {$#2$}] {#3};}
。
但是,\lnode
不能像 中那样工作\Tree [.\lnode{above}{[1,5]}{$x$} ...
。
如何修复?
\documentclass[tikz]{standalone}
\usepackage{tikz-qtree}
\newcommand{\lnode}[3]{\node [label = {#1} : {$#2$}] {#3};}
\begin{document}
\begin{tikzpicture}[level distance = 40pt, sibling distance = 30pt,
edge from parent/.style= {
draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}]
\tikzset{every node/.style = {draw, circle}}
% \lnode works here
\lnode{above}{[1,5]}{$x$}
\begin{scope}[xshift = -2.5cm]
\Tree [.\node[label = above : {$[1,5]$}]{$x$};
[.\node[label = above : {$[1,1]$}] {$y$}; ]
[.\node[label = above : {$[3,5]$}] {$z$}; ]
]
\end{scope}
% \lnode does not work in qtree
% \begin{scope}[xshift = 2.5cm]
% \Tree [.\lnode{above}{[1,5]}{$x$}
% [.\lnode{above}{[1,1]}{$y$} ]
% [.\lnode{above}{[3,5]}{$z$} ]
% ]
% \end{scope}
\end{tikzpicture}
\end{document}
答案1
解析器tikzqtree
确实在寻找显式的 \node。有问题的代码在\@label
命令中:\@label ->\pgfutil@ifnextchar \node {\@litlabel }{\@@label }
因此\pgfutil@ifnextchar\node
检查下一个标记是否是文字\node
标记。该位置的任何其他标记都不会被处理为标签,并在稍后在某些奇怪的上下文中展开。该\node
命令在命令开头明确未定义,\Tree
因此它不会做一些疯狂的事情,而只是抛出未定义的命令错误。
我通过在命令\tracingall
前添加\Tree
然后分析生成的日志文件来确定这一点。