我如何对发出命令的节点进行排序?
假设我有一棵树和一些孩子。现在我想创建一个 tikzpicture 来将其可视化。
---------
| tree |
---------
--------- --------- ---------
| child | | child | | child |
--------- --------- ---------
先验地,树应该能够有n
子节点。这个结构应该可以在我的文档中重复使用,因此我想创建一个宏来帮我完成这个任务。我设想如下:
\tree{
\node{child 1},
\node{child 2},
...
}
我想过创建一个命令树和子命令:
\newcommand{\tree}[2]{
%... the tree
\foreach \x in #1 { %\x are the given node
\x; %Print the nodes
}
}
我现在如何使用定位包来正确安置孩子?
答案1
此外,tikz
使用该trees
库,语法并不那么复杂,可以使用语句创建命令foreach
。请注意,foreach
必须在调用之后child
,否则发出的所有命令foreach
都将括在括号中,从而导致树没有分支(感谢马克·维布罗以获得小费)。
命令语法为:
\mytree[<coordinate>]{<main name>}{<comma separated list of children names>};
可选参数将<main name>
树节点放入其中<coordinate>
,并且树子节点按照逗号分隔的列表顺序从左到右排列。MWE:
\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{trees}
\newcommand{\mytree}[3][(0,0)]{\node at #1 {#2} [edge from parent/.style={draw=none}] child foreach \child in {#3} {node {\child}}}
\begin{document}
\begin{tikzpicture}[every node/.style=draw]
\mytree{Tree}{Child1, Child2, Child3};
\end{tikzpicture}
\end{document}
答案2
用这个forest
包很容易画出这个树分布。包计算所有距离。
\documentclass[border=2mm]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
[tree, for tree={draw, no edge}
[child 1]
[child 2]
[child 3]]
\end{forest}
\end{document}
\documentclass[border=2mm]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
[tree, for tree={draw, no edge}
[child 1]
[child 2]
[child 3]
[child 4]
[child 5]
[child 6]]
\end{forest}
\end{document}
更新:
深入forest
研究文档前面的示例可以使用以下命令自动创建:
\newcommand{\mytree}[3]{
\begin{forest}
before typesetting nodes={for descendants={content=#3, draw, no edge}}
[#1 , draw, repeat={#2}{append={[]}}]
\end{forest}}
第一个参数是顶部节点内容,第二个参数是子节点的数量,第三个参数是子节点内容:
\documentclass{article}
\usepackage{forest}
\newcommand{\mytree}[3]{
\begin{forest}
before typesetting nodes={for descendants={content=#3, draw, no edge}}
[#1 , draw, repeat={#2}{append={[]}}]
\end{forest}}
\begin{document}
\centering
\mytree{tree}{5}{child}\\[1cm]
\mytree{A}{3}{B}\\[1cm]
\mytree{\emph{tree}}{10}{$x$}
\end{document}