我试图用宏替换我打算多次使用的长文本,以使我的代码更具可读性。
在使用宏之前,我有以下代码:
\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}