在 tikz-qtree 中为边缘标签编写宏

在 tikz-qtree 中为边缘标签编写宏

我试图用宏替换我打算多次使用的长文本,以使我的代码更具可读性。

在使用宏之前,我有以下代码:

\documentclass{minimal}
\usepackage{tikz-qtree}
\newcommand{\llabel}[1]{\edge node[auto=left]{#1};}
\begin{document}
\begin{tikzpicture}
  \Tree [.$P_1$ [.$P_2$ ]
                \edge node[auto=left]{1,2}; [.$P_2$ ] ]
\end{tikzpicture}
\end{document}

这将产生正确的输出:

我想要的输出

当我用宏替换边缘标签时,以下代码会产生以下错误:

\documentclass{minimal}
\usepackage{tikz-qtree}
\newcommand{\llabel}[1]{\edge node[auto=left]{#1};}
\begin{document}
\begin{tikzpicture}
  \Tree [.$P_1$ [.$P_2$ ]
                \llabel{1,2} [.$P_2$ ] ]
\end{tikzpicture}
\end{document}
Undefined control sequence.
\llabel #1->\edge 
                  node[auto=left]{#1};
l.8 \end
        {tikzpicture}

有没有办法做到这一点?

答案1

如果可以选择其他包,Forest 可以很容易地支持类似的东西。在这种情况下,使用样式比使用宏更有意义。还可以通过使用树来llabel删除美元符号,从而减少视觉混乱。math content

在此示例中,我使用该linguistics库设置了一些合适的默认值。样式my tree将节点的内容设置为数学模式并启用llabel=<text>样式。

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage[linguistics]{forest}
\forestset{%
  my tree/.style={%
    for tree={%
      math content,
    },
    llabel/.style={%
      edge label={node [midway, auto=left]{##1}}
    }
  }
}
\begin{document}
\begin{forest}
  my tree
  [P_1
    [P_2]
    [P_2, llabel={1,2}]
  ]
\end{forest}
\end{document}

森林边缘标签

相关内容