
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 \edge
Befehl, wenn ich dieses Makro aufrufe, was vermutlich daran liegt, dass es außerhalb des \Tree
Befehls 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!