我想绘制一条边缘颜色交替的路径,例如:
理想情况下我想使用
\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
您可以使用“命令后附加”来自动重复坐标。当您使用edge
tikz 时,将目标存储在 中\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}