仅在调用处展开宏

仅在调用处展开宏

我想绘制一棵树,其中每条边都具有一定的权重,通过线宽以及边上的标签进行可视化。使用 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 提出,取自这里。祝贺编写相关问题检测器的人,这让我直接找到了正确的地方!

相关内容