Makro nur am Aufrufort erweitern

Makro nur am Aufrufort erweitern

Ich möchte einen Baum zeichnen, bei dem jede Kante ein bestimmtes Gewicht hat, das sowohl durch die Linienbreite als auch durch eine Beschriftung an der Kante visualisiert wird. Mit TikZ ist das ziemlich einfach:

\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}

Da der Baum, den ich zeichnen möchte, ziemlich groß ist, möchte ich den Randcode herausrechnen, d. h. ich hätte gerne ein Makro wie

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

Leider beschwert sich LaTeX über den \edgeBefehl, wenn ich dieses Makro aufrufe, was vermutlich daran liegt, dass es außerhalb des \TreeBefehls erscheint. Gibt es eine Möglichkeit, dies zu beheben?

Antwort1

Das Hinzufügen des folgenden Codes zur Präambel behebt das Problem:

\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

Diese Lösung stammt von David Carlisle und ist entnommen ausHier. Glückwunsch an den Typen, der den Detektor für verwandte Fragen geschrieben hat. Damit bin ich direkt an die richtige Stelle gelangt!

verwandte Informationen