TikZ、森林和星空微距

TikZ、森林和星空微距

我想定义一个宏的星号版本,用于 的值edge label。第二个代码完成了想要的工作,但其星号翻译无法工作。是否有无法使用星号宏的细微问题?

失败代码

\documentclass[12pt,a4paper]{article}

\usepackage{forest}

\makeatletter

\newcommand\probaweight{\@ifstar{\@probaweight@star}{\@probaweight@no@star}}
\newcommand\@probaweight@no@star[1]{node[midway, fill=white]{#1}}
\newcommand\@probaweight@star[1]{}

\makeatother


\begin{document}

\begin{forest}
[
    [$A$, edge label=\probaweight{$a$}
        [$B$, edge label=\probaweight{$b$}]
        [$C$, edge label=\probaweight{$c$}]
    ]
    [$D$, edge label=\probaweight*{$d$}
        [$E$, edge label=\probaweight*{$e$}]
        [$F$, edge label=\probaweight*{$f$}]
    ]
]
\end{forest}

\end{document}

工作代码

\documentclass[12pt,a4paper]{article}

\usepackage{forest}

\newcommand\probaweight[1]{node[midway, fill=white]{#1}}
\newcommand\probanoweight[1]{}


\begin{document}

\begin{forest}
[
    [$A$, edge label=\probaweight{$a$}
        [$B$, edge label=\probaweight{$b$}]
        [$C$, edge label=\probaweight{$c$}]
    ]
    [$D$, edge label=\probanoweight{$d$}
        [$E$, edge label=\probanoweight{$e$}]
        [$F$, edge label=\probanoweight{$f$}]
    ]
]
\end{forest}

\end{document}

答案1

我无法回答有关森林键中使用星号宏的问题,但通常不建议使用扩展为 pgf 键的宏。相反,这就是样式的用途。使用样式不会出现问题,代码会变得更短。

\documentclass[12pt,a4paper]{article}
\usepackage{forest}
\forestset{el/.style={edge label={node[midway, fill=white]{#1}}},
el*/.style={}}
\begin{document}

\begin{forest}
[
    [$A$, el={$a$}
        [$B$, el={$b$}]
        [$C$, el={$c$}]
    ]
    [$D$, el*={$d$}
        [$E$, el*={$e$}]
        [$F$, el*={$f$}]
    ]
]
\end{forest}

\end{document}

在此处输入图片描述

附录: 正如 @cfr 所说,不使用星号可能更安全。所以也许

\documentclass[12pt,a4paper]{article}
\usepackage{forest}
\forestset{el/.style={edge label={node[midway, fill=white]{#1}}},
el!/.style={}}
\begin{document}

\begin{forest}
[
    [$A$, el={$a$}
        [$B$, el={$b$}]
        [$C$, el={$c$}]
    ]
    [$D$, el!={$d$}
        [$E$, el!={$e$}]
        [$F$, el!={$f$}]
    ]
]
\end{forest}

\end{document}

是一个更安全的选择。谁知道呢。

答案2

我会采用一种风格,正如另一个答案所建议的那样。

问题似乎在于可扩展性,如下面的工作代码所示。

\documentclass[12pt,a4paper]{article}

\usepackage{forest,xparse}

\NewExpandableDocumentCommand{\probaweight}{sm}{%
  \IfBooleanTF{#1}%
    {}%
    {node[midway, fill=white]{#2}}%
}

\begin{document}

\begin{forest}
[
    [$A$, edge label=\probaweight{$a$}
        [$B$, edge label=\probaweight{$b$}]
        [$C$, edge label=\probaweight{$c$}]
    ]
    [$D$, edge label=\probaweight*{$d$}
        [$E$, edge label=\probaweight*{$e$}]
        [$F$, edge label=\probaweight*{$f$}]
    ]
]
\end{forest}

\end{document}

在此处输入图片描述

相关内容