我有一张用自己的命令绘制的图表。我必须经常使用它,但通常使用不同的颜色。边缘没有问题,因为我可以简单地用绿色将\draw[style=green](x)--(y)
边缘 (x,y) 涂成绿色。但我也想对特定节点执行此操作,例如:节点 v1 应该是红色。
这是我的命令:
\newcommand{\mygraph}{
\node[](x) at (0,0){$x$};
\node[](y) at (0,-4){$y$};
\foreach \a in {1,...,5}{
\node[](v\a) at (\a*180/6:4) {$v_\a$};
}
\foreach \a in {1,...,5}{
\draw (x)--(v\a);
}
}
我的使用方法如下:
\begin{figure}[h]
\centering
\begin{tikzpicture}
\mygraph
\draw[dotted](x)--(y);
\draw[style=green](x)--(v1);
\end{tikzpicture}
\caption{Graph $G$}
\end{figure}
那么是否有可能取其中一个节点并重新着色呢?
答案1
如果您始终有 5 nodes
/ path
,则可以使用 parckage 定义具有可选参数和默认参数的命令xparse
。
\documentclass[tikz,border=3mm]{standalone}
\usepackage{xparse}
\begin{document}
% This defines the \mygraph macro with default black colours for all node/path pair
% but you can cutsomize colours on the fly !
\NewDocumentCommand{\mygraph}{ O{black} O{black} O{black} O{black} O{black}}{
\node[](x) at (0,0){$x$};
\node[](y) at (0,-4){$y$};
\foreach \a/\mycolor in {1/#1,2/#2,3/#3,4/#4,5/#5}{
\node[\mycolor](v\a) at (\a*180/6:4) {$v_\a$};
\draw[\mycolor] (x)--(v\a);
}
}
\begin{tikzpicture}
\mygraph
\end{tikzpicture}
\begin{tikzpicture}
\mygraph[red][][blue]
\end{tikzpicture}
\end{document}
答案2
您可以将颜色存储在数组中,以便在循环中使用。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\newcommand{\mygraph}{
\node[](x) at (0,0){$x$};
\node[](y) at (0,-4){$y$};
\foreach \a in {1,...,5}{
\pgfmathsetmacro{\mycolor}{{\lstColors}[\a-1]}
\node[\mycolor](v\a) at (\a*180/6:4) {$v_\a$};
}
\foreach \a in {1,...,5}{
\pgfmathsetmacro{\mycolor}{{\lstColors}[\a-1]}
\draw[\mycolor] (x)--(v\a);
}
}
\edef\lstColors{"red","green","blue","orange","magenta"}
\begin{tikzpicture}
\mygraph
\end{tikzpicture}
\end{document}