在森林中自动将边缘标签左对齐或右对齐

在森林中自动将边缘标签左对齐或右对齐

我试图让边标签自动出现在边的左侧或右侧,具体取决于树中相应的节点是左子节点还是右子节点。当我手动插入代码时,它可以工作,但是当我为其编写宏时,我收到一条错误消息(“我不知道您传递给 [...] 的键‘/tikz/if n’,我将忽略它。”)这是一个 MWE:

\documentclass{article}
\usepackage{forest}

\newcommand{\edgelab}[1]{if n=1{edge label={node[midway,left]{#1}}}{edge label={node [midway, right]{#1}}}}

\title{}
\author{}
\date{}

\begin{document}
\maketitle

\begin{forest}
[S
    [A, if n=1{edge label={node[midway,left]{a}}}{edge label={node [midway, right]{b}}}]
    [B, \edgelab{b}]
]
\end{forest}

\end{document}

\edgelab 的定义 - 除了参数之外 - 应该与我放在 A 节点后面的代码相同(因为我复制粘贴了它。)这是我的输出:

在此处输入图片描述

那么,我做错了什么?(并且,如果你知道,有没有办法将 if 子句放在 node[] 内?)

编辑:使我的代码更清楚地反映出我希望能够为边缘提供单独的标签。

答案1

你应该写一个风格,一个宏。

\documentclass{article}
\usepackage{forest}

\forestset{
  edgelab/.style={if n=1{edge label={node[midway,left]{#1}}}{edge label={node [midway, right]{#1}}}}
}

\title{}
\author{}
\date{}

\begin{document}
\maketitle

\begin{forest}
[S
    [A, if n=1{edge label={node[midway,left]{a}}}{edge label={node [midway, right]{b}}}]
    [B, edgelab=b]
]
\end{forest}

\end{document}

相关内容