应用于给定节点的样式如何被该节点的所有后代继承?

应用于给定节点的样式如何被该节点的所有后代继承?

我正在使用graphsTikZ 库绘制有向无环图。当我将特定样式应用于给定节点时,我希望该样式被相关节点的所有后代继承。

为了解决这个问题,假设我定义了一个名为的节点样式,该样式alert会修改默认节点样式。当我将该alert样式本地应用于节点时,我希望该节点的所有后代都能继承相关样式,而不必手动将该样式应用于其所有后代。

以下是一个示例:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs}

\tikzset{
  every node/.style={draw=black},
  alert/.style={draw=red},
}

\begin{document}
\begin{tikzpicture}
\graph{
  A -> {
    B,
    C[alert] -> D -> { E, F},
  },
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

目前,alert仅适用于节点C。但是,通过将alert样式应用于节点C,我希望所有后代C(即节点DEF)继承该样式,而无需键入

\graph{
  A -> {
    B,
    C[alert] -> D[alert] -> { E[alert], F[alert]},
  },
};

有办法吗?


编辑Harish Kumar 的方法可以让我的生活更轻松,但这并不是我想要的。下面是一个更复杂的例子,说明了缺少什么:

\graph{
  A -> { B, C[alert] }  -> D -> { E -> F, G -> H }
};

在此处输入图片描述

在这里,我希望节点D继承应用于其祖先节点的样式H。我可以按照 Harish 的建议编写alertC

\graph{
  A -> { B, C[alert] }  -> {[nodes=alert] D -> { E -> F, G -> H }}
};

在此处输入图片描述

但这仍然会迫使我申请alert 两次在图表中。我希望应用于一个节点的特定样式能够被链下的所有节点继承

  • 无需在其他地方使用这种风格,
  • 无论图表如何指定。

那可能吗?

答案1

您可以使用

{[nodes=alert]C -> D -> { E, F},
  }

代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs}

\tikzset{
  every node/.style={draw=black},
  alert/.style={draw=red},
}

\begin{document}
\begin{tikzpicture}
\graph{
  A -> {
    B,
    {[nodes=alert]C -> D -> { E, F},
  }},
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容