使用 \matrix 更改 tikzpicture 中某些节点的填充

使用 \matrix 更改 tikzpicture 中某些节点的填充

我使用了\matrixa 中的便捷技巧tikzpicture(见代码)来构建图表。现在我想更改一个节点的填充。我不知道该怎么做!当然,我可以找到如何更改填充的方法,但不能与环境结合\matrix。我希望这里有人可以给我提示 :)

\documentclass{beamer}
\usetheme{Ilmenau}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{frame}
    \begin{tikzpicture}
\matrix[matrix of nodes, column sep = {1 cm}, row sep = {1cm}, nodes ={circle, fill = lightgray, draw, anchor = center}, ampersand replacement =\&]
{ 
|(A)| A \& |(B)| B \& |(F)| F \\
|(C)| C \&        \& |(G)| G \\
|(D)| D \& |(E)| B \& |(H)| H \\
};
\tikzstyle{every node}=[color=blue]
\draw (A) -- (B);
\draw (B) -- (F);
\draw (F) -- (G);
\draw (G) -- (H);
\draw (E) -- (H);
\draw (D) -- (E);
\draw (A) -- (C);
\draw (C) -- (D);
\draw (C) -- (B);
\draw (C) -- (E);
\draw (B) -- (E);
\draw (B) -- (G);
\draw (G) -- (E);
\end{tikzpicture}
\end{frame}


\end{document}

图表

答案1

正如@Gonzalo Medina 所建议的,我将我的评论变成了答案。

当你在 Tikz 中设置矩阵并将其用作nodes={...}矩阵本身的选项时,你可以指定默认节点的行为。如果要更改单个节点的外观,只需将规范放在两个垂直线内|...|:此符号接受您通常传递给“常规”节点的规范(和 除外\nodenode

因此,例如,如果您想更改节点的外观,(A)您可以这样做:

|(A) [rectangle,draw,fill=red]| A

代替|(A)| A

以下是完整代码(后面会解释补充内容):

\documentclass{beamer}
\usetheme{Ilmenau}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{frame}
  \begin{tikzpicture}
    \matrix (M) [matrix of nodes, column sep = {1 cm}, row sep = {1cm}, nodes ={circle, fill = lightgray, draw, anchor = center}, ampersand replacement =\&]
    { 
      |(A) [rectangle,draw,fill=red]| A \& |(B)| B \& |(F)| F \\
      |(C)| C \&        \& |(G)| G \\
      |(D)| D \& |(E)| B \& |(H)| H \\
    };
    \tikzstyle{every node}=[color=blue]
    \draw (A) -- (B)
    (B) -- (F)
    (F) -- (G)
    (G) -- (H)
    (E) -- (H)
    (D) -- (E)
    (A) -- (C)
    (C) -- (D)
    (C) -- (B)
    (C) -- (E)
    (B) -- (E)
    (B) -- (G)
    (G) -- (E);
  \end{tikzpicture}
\end{frame}
\end{document}

在此处输入图片描述

备注 #1

你可以避免所有这些\draw命令,只需写下:

\draw (A) -- (B)
      (B) -- (F)
      (F) -- (G)
      (G) -- (H)
      (E) -- (H)
      (D) -- (E)
      (A) -- (C)
      (C) -- (D)
      (C) -- (B)
      (C) -- (E)
      (B) -- (E)
      (B) -- (G)
      (G) -- (E);

备注 #2

你可以避免手动命名矩阵本身的每个节点:你可以命名你的矩阵,比如(M)

\matrix (M) [...] {...}; % a matrix is a node itself 

然后使用

(M-i-j)

其中i是矩阵的第 i 行,j是第 j 列。绘制命令可以重写为:

\draw (M-1-1) -- (M-1-2)
      (M-1-2) -- (M-1-3)
      ... ;

这可以帮助您处理复杂的矩阵并允许使用循环\foreach。(顺便说一句,对于像您发布的图表,这可能只是一个复杂问题:最好坚持使用以其(简单)文本内容命名的节点。)

笔记:这些访问节点的方法不兼容,即您不能写:

\draw (A) -- (B)           % this WON'T work!!!
      (M-1-2) -- (M-1-3);  % :(

相关内容