使用tikz绘制树和宏

3
我正在尝试使用宏来构建我的树,但我没有得到我想要的结果。这是一个最简示例:
\documentclass{article} \usepackage{tikz} \usetikzlibrary{trees}
\newcommand{\LeafNode}[1]{% child {node {#1}} }
\newcommand{\InnerNode}[3]{% child {node {#3} #1 #2 } }
\begin{document}
\begin{tikzpicture} \node (A) {A} \LeafNode{B} \LeafNode{C} ; \end{tikzpicture}% \hspace{2cm}% \begin{tikzpicture} \node (A) {A} \InnerNode{\LeafNode{D}}{\LeafNode{E}}{B} \LeafNode{C} ; \end{tikzpicture}
\end{document}
我期望这将产生两棵树:
A A / \ / \ B C B C / \ D E
但我得到的是:
A | A B | | B D | | C C
我是否遗漏了什么或者没有办法做到呢?
顺便说一下,如果我省略根节点上的标签,我会得到一个PGF错误:
! Package pgf Error: No shape named is known.
-- Tsf
2个回答

1

看起来LaTeX隐式地对\newcommand的输出进行了分组。 因此,结果为

\begin{tikzpicture}
 \node (A) {A}
    \LeafNode{B}
    \LeafNode{C}
 ;
\end{tikzpicture}

与此相同:

 \begin{tikzpicture}
 \node (A) {A}
   {child {node {B}}}
   {child {node {C}}}
 ;
\end{tikzpicture}

TikZ会扫描显式的“child”关键字,但当它隐藏在命令或块中时,TikZ就无法找到它。

我不知道有什么解决办法,但我认为你的宏并没有使语法更加简单。


1

这不是对你问题的直接回答,但你可以看看tikz-qtree package。它提供了一种更简单的语法来创建树形结构。


没错,但我已经有很多使用纯tikz的材料了,不想混合两种风格。谢谢! - Tsf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接