如何绘制交替颜色的路径

如何绘制交替颜色的路径

我想绘制一条边缘颜色交替的路径,例如:

在此处输入图片描述

理想情况下我想使用

\draw[red] (3,0)-- (3.5,0.5) -- (4,0.2) -- (4,-0.2) -- (3.5,-0.5) -- cycle;

但这只能为整个路径指定一种颜色。我能做的最好的就是使用下面的 \path,然后我需要重复每个坐标两次,这非常尴尬。我想知道

(a)如果这可以按照上面的样式 \draw + cycle 通过指定沿途每条边的颜色来实现。

(b) 如果能以某种方式实现交替颜色操作的自动化,那就更好了!

\documentclass{standalone}
\usepackage{tikz}
\begin{document}


\begin{tikzpicture}
\path 
(3,0) edge[blue] (3.5,0.5)
(3.5,0.5) edge[red] (4,0.2)
(4,0.2) edge[blue] (4,-0.2)
(4,-0.2) edge[red] (3.5,-0.5)
(3.5,-0.5) edge[blue] (3,0);
\end{tikzpicture}
\end{document}

答案1

您可以使用“命令后附加”来自动重复坐标。当您使用edgetikz 时,将目标存储在 中\tikztotarget,但这是在本地范围内。当执行“命令后附加”代码时,最近的坐标已被遗忘。因此,代码every edge必须使用 将 的当前值存储\tikztotarget在全局变量中\global\let\currenttarget\tikztotarget。然后我们可以使用 附加它append after command

为了自动交替颜色,我们使用标准 tex“在两件事之间交替的命令”模式,但是同样由于范围问题,您必须记住进行全局分配。

作为参考,相关命令是\tikz@do@edge在 tikz.code.tex 的第 2912 行定义的。边缘在第 2932 行绘制,我们的边缘样式代码在那里进行评估,代码append after command在本地存储\tikz@after@path并在第 2933 行全局输入。\tikz@after@path@smuggle然后范围结束,代码\tikz@after@path@smuggle在第 2949 行进行评估。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\def\alternatecolorred{%
    \pgfkeysalso{red}%
    \global\let\alternatecolor\alternatecolorblue % next time make it blue
}
\def\alternatecolorblue{%
    \pgfkeysalso{blue}%
    \global\let\alternatecolor\alternatecolorred % next time make it red
}
\let\alternatecolor\alternatecolorred % first coordinate is red
\begin{tikzpicture}[every edge/.append code = {%
    \global\let\currenttarget\tikztotarget % save \tikztotarget in a global variable
    \pgfkeysalso{append after command={(\currenttarget)}}% automatically repeat it
    \alternatecolor
}]

\draw (3,0) edge (3.5,0.5) edge (4,0.2) edge (4,-0.2) edge (3.5,-0.5) edge (3,0);
\end{tikzpicture}
\end{document}

相关内容