对在新命令中作为参数给出的节点进行排序

对在新命令中作为参数给出的节点进行排序

我如何对发出命令的节点进行排序?

假设我有一棵树和一些孩子。现在我想创建一个 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}

在此处输入图片描述

相关内容