호출 사이트에서만 매크로 확장

호출 사이트에서만 매크로 확장

나는 각 가장자리가 선 너비와 가장자리의 레이블을 통해 시각화되는 특정 가중치를 갖는 트리를 그리고 싶습니다. 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에 의한 것이며 다음에서 가져왔습니다.여기. 관련 질문 탐지기를 작성한 사람에게 축하를 전합니다. 이 글을 통해 바로 올바른 위치로 이동했습니다!

관련 정보