Expandir macro solo en el sitio de llamada

Expandir macro solo en el sitio de llamada

Quiero dibujar un árbol donde cada borde tenga un peso determinado visualizado tanto en el ancho de la línea como en una etiqueta en el borde. Usando TikZ, esto es bastante 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}

Dado que el árbol que quiero dibujar es bastante grande, quiero factorizar el código de borde, es decir, me gustaría tener una macro como

\def\edgeweight#1{\edge [line width = #1] node [clabel] {#1}; }

Desafortunadamente, LaTeX se queja del \edgecomando cuando llamo a esta macro, lo cual supongo que se debe a que aparece fuera del \Treecomando. ¿Hay alguna manera de solucionar esto?

Respuesta1

Agregar el siguiente código al preámbulo soluciona el 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 solución se debe a David Carlisle y está tomada deaquí. Felicitaciones al tipo que escribió el detector de preguntas relacionadas. ¡Esto me llevó directamente al lugar correcto!

información relacionada