我使用了\matrix
a 中的便捷技巧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={...}
矩阵本身的选项时,你可以指定默认节点的行为。如果要更改单个节点的外观,只需将规范放在两个垂直线内|...|
:此符号接受您通常传递给“常规”节点的规范(和 除外\node
)node
。
因此,例如,如果您想更改节点的外观,(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); % :(