第一次对齐后改变节点样式

第一次对齐后改变节点样式

我有一张用自己的命令绘制的图表。我必须经常使用它,但通常使用不同的颜色。边缘没有问题,因为我可以简单地用绿色将\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}

在此处输入图片描述

相关内容