
我想畫一棵樹,其中每條邊都有一定的權重,透過線寬和邊緣上的標籤來視覺化。使用 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 提出,摘自這裡。恭喜編寫相關問題檢測器的人,這將我直接帶到了正確的地方!