将图像添加到森林中的节点

将图像添加到森林中的节点

我想要一片像这样的森林:

森林: 在此处输入图片描述

梅威瑟:

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage[edges]{forest}
\begin{document}

\begin{forest}
  styleA/.style={top color=green!20, bottom color=green!50},
  styleB/.style={top color=white, bottom color=red!20},
  for tree={
    rounded corners,
    draw,
    align=center,
    top color=white,
    bottom color=blue!20,
  },
  forked edges,
  [Blablabla
     [Blablabla,styleA]
     [Blablabla,styleA]
     [Blablabla
        [Blablabla]
        [Blablabla]
        [Blablabla
           [Blablabla
              [Blablabla]
              [Blablabla,styleB]
              [Blablabla]
              [Blablabla
                 [Blablabla,styleB]
                 [Blablabla]
              ]
           ]
           [Blablabla
              [Blablabla
                 [Blablabla
                    [Blablabla]
                    [Blablabla]
                    [Blablabla]
                    [Blablabla[Blablabla][Blablabla]]
                 ]
              ]
              [Blablabla
                 [Blablabla
                    [Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                       [Blablabla[Blablabla][Blablabla]]
                    ]
                 ]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
              [Blablabla
                 [Blablabla[Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                 ]]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
           ]
        ]
     ]
  ]
\end{forest}
\end{document}

并将图像嵌入到节点/节点内部,如下所示

在此处输入图片描述

有办法实现这个吗?

答案1

您可以直接或使用 在节点内添加图像,也可以在绘制树后在其自己的节点中添加图像tikz。无论哪种方式,您都可以对树中的特定节点或分配了特定样式的所有节点执行此操作。可以将图像指定为样式的一部分,也可以在使用样式时确定图像。

下面的例子展示了大部分这些可能性。

最简单的方法就是将图像添加到节点内容中。例如:

    [Blablabla\\\includegraphics{info},styleA]

将在节点文本下方的一行中添加info来自包的图像。notesBlablabla

如果我们需要传递\includegraphics一个可选参数,我们需要保护它免受 Forest 括号解析器的攻击:

    [Blablabla  {\includegraphics[scale=.5]{warn}},styleA]

也可以使用样式添加。例如,我们可以调整styleB以包含hand图像:

  styleB/.style={%
    top color=white,
    bottom color=red!20,
    delay={%
      content/.wrap value={##1\\{\includegraphics[scale=.5]{hand}}}
    }
  },

那么我们的树将如下所示:

节点中的图像

或者,我们可以在绘制树后将图像添加到它们自己的节点中。一种方法是使用 Forest 的tikztikz+键。例如,我们可以定义一个add icon样式来方便地执行此操作,如下所示:

  add icon/.style={%
    !u.s sep+=5pt,
    tikz+={\node [draw, circle, inner sep=1pt, fill=white] at (.south west) {\includegraphics [height=\baselineskip]{#1}};}
  },

然后我们可以写

    [Blablabla, add icon=warn,styleA]
    [Blablabla, add icon=info,styleA]

将指定图像添加到指定节点。同样,这也可以用于修改的styleB,例如。

styleB/.style={%
    top color=white,
    bottom color=red!20,
    add icon=hand,
  },

那么我们的树将如下所示:

向节点添加徽章样式的图像

完整代码:

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage[edges]{forest}
\begin{document}

\begin{forest}
  styleA/.style={top color=green!20, bottom color=green!50},
  styleB/.style={%
    top color=white,
    bottom color=red!20,
    delay={%
      content/.wrap value={##1\\{\includegraphics[scale=.5]{hand}}}
    }
  },
  for tree={
    rounded corners,
    draw,
    align=center,
    top color=white,
    bottom color=blue!20,
  },
  forked edges,
  [Blablabla
    [Blablabla  {\includegraphics[scale=.5]{warn}},styleA]
    [Blablabla\\\includegraphics{info},styleA]
     [Blablabla
        [Blablabla]
        [Blablabla]
        [Blablabla
           [Blablabla
              [Blablabla]
              [Blablabla,styleB]
              [Blablabla]
              [Blablabla
                 [Blablabla,styleB]
                 [Blablabla]
              ]
           ]
           [Blablabla
              [Blablabla
                 [Blablabla
                    [Blablabla]
                    [Blablabla]
                    [Blablabla]
                    [Blablabla[Blablabla][Blablabla]]
                 ]
              ]
              [Blablabla
                 [Blablabla
                    [Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                       [Blablabla[Blablabla][Blablabla]]
                    ]
                 ]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
              [Blablabla
                 [Blablabla[Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                 ]]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
           ]
        ]
     ]
  ]
\end{forest}
\begin{forest}
  add icon/.style={%
    !u.s sep+=5pt,
    tikz+={\node [draw, circle, inner sep=1pt, fill=white] at (.south west) {\includegraphics [height=\baselineskip]{#1}};}
  },
  styleA/.style={top color=green!20, bottom color=green!50},
  styleB/.style={%
    top color=white,
    bottom color=red!20,
    add icon=hand,
  },
  for tree={
    rounded corners,
    draw,
    align=center,
    top color=white,
    bottom color=blue!20,
    inner sep=5pt
  },
  forked edges,
  [Blablabla
    [Blablabla, add icon=warn,styleA]
    [Blablabla, add icon=info,styleA]
     [Blablabla
        [Blablabla]
        [Blablabla]
        [Blablabla
           [Blablabla
              [Blablabla]
              [Blablabla,styleB]
              [Blablabla]
              [Blablabla
                 [Blablabla,styleB]
                 [Blablabla]
              ]
           ]
           [Blablabla
              [Blablabla
                 [Blablabla
                    [Blablabla]
                    [Blablabla]
                    [Blablabla]
                    [Blablabla[Blablabla][Blablabla]]
                 ]
              ]
              [Blablabla
                 [Blablabla
                    [Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                       [Blablabla[Blablabla][Blablabla]]
                    ]
                 ]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
              [Blablabla
                 [Blablabla[Blablabla
                       [Blablabla]
                       [Blablabla]
                       [Blablabla]
                 ]]
                 [Blablabla[Blablabla[Blablabla[Blablabla
                             [Blablabla]
                             [Blablabla]
                             [Blablabla]
                 ]]]]
              ]
           ]
        ]
     ]
  ]
\end{forest}
\end{document}

相关内容