我想绘制一棵树,其中每条边都具有一定的权重,通过线宽以及边上的标签进行可视化。使用 TikZ,这非常容易:
\documentclass{standalone}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}[
clabel/.style = { fill=white, circle, inner sep=1pt,font=\scriptsize},
]
\Tree [.O
\edge [line width = 2] node [clabel] {2}; L
\edge [line width = 4] node [clabel] {4}; R
]
\end{tikzpicture}
\end{document}
由于我想要绘制的树相当大,所以我想分解出边缘代码,也就是说,我想要一个像这样的宏
\def\edgeweight#1{\edge [line width = #1] node [clabel] {#1}; }
不幸的是,当我调用这个宏时,LaTeX 会抱怨这个\edge
命令,我猜是因为它出现在命令之外\Tree
。有办法解决这个问题吗?
答案1
在序言中添加以下代码可以修复该问题:
\makeatletter
\let\old@@children\@@children
\def\@@children{\futurelet\my@next\my@@children}
\def\my@@children{%
\ifx\my@next\edgeweight\else
\expandafter\@gobble
\fi
\expandafter\old@@children}
\makeatother
该解决方案由 David Carlisle 提出,取自这里。祝贺编写相关问题检测器的人,这让我直接找到了正确的地方!