我试图让边标签自动出现在边的左侧或右侧,具体取决于树中相应的节点是左子节点还是右子节点。当我手动插入代码时,它可以工作,但是当我为其编写宏时,我收到一条错误消息(“我不知道您传递给 [...] 的键‘/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}