僅在呼叫站點展開宏

僅在呼叫站點展開宏

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

相關內容