
Quero desenhar uma árvore onde cada aresta tenha um certo peso visualizado tanto na largura da linha quanto em um rótulo na aresta. Usando o TikZ, isso é muito fácil:
\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}
Como a árvore que quero desenhar é bastante grande, quero fatorar o código da borda, ou seja, gostaria de ter uma macro como
\def\edgeweight#1{\edge [line width = #1] node [clabel] {#1}; }
Infelizmente, o LaTeX reclama do \edge
comando quando eu chamo essa macro, o que presumo ser porque ela aparece fora do \Tree
comando. Existe uma maneira de corrigir isso?
Responder1
Adicionar o seguinte código ao preâmbulo corrige o problema:
\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
Esta solução é devida a David Carlisle e é retirada deaqui. Parabéns ao cara que escreveu o detector de perguntas relacionadas, isso me levou direto ao lugar certo!