风格各异的曲线

风格各异的曲线

下列的这个问题,我想知道是否可以(通过一次\draw调用)绘制一条部分属于一种风格、部分属于另一种风格的曲线等等......

链接文章中提出的解决方案适用于直线。但是当in = ..., out=...向路径添加选项时to,样式会恢复为默认样式,这并不奇怪。

我已经尝试过append after command看看我可以附加样式但它似乎不起作用。

基本上,这个想法是改变风格来支持其他选项,但我对此不太满意,不知道该怎么做。

谢谢您的帮助!

下面的 MWE 取自@AlainMatthes 的答案,重现了缺失的样式。

\documentclass[tikz]{standalone}

\tikzset{%
xultra thick/.style={to path={%
\pgfextra{%
 \draw[line cap=round, line join=round,ultra thick]
      (\tikztostart) -- (\tikztotarget);} (\tikztotarget) \tikztonodes}},
xthin/.style={to path={%
\pgfextra{%
 \draw[line cap=round, line join=round,thin] 
       (\tikztostart) -- (\tikztotarget);} (\tikztotarget)  \tikztonodes}}} 
\begin{document}
\begin{tikzpicture}
  \draw (0.25,0) -- (0.75,1.2) -- (1.25,1.5) 
  to[xultra thick,in=70,out=50]  (1.75,0.7) -- (2.25,1.1) -- (2.75,0.5)
                 -- (3.25,1.5) to[xthin,in=50,out=80] (4.25,1.8);
\end{tikzpicture}
\end{document} 

答案1

似乎我们已经同意,与\pgfextra很高兴看到你考虑使用边缘。避免需要双倍坐标的一种方法已在这个很好的答案,这本身就很有趣。

然而,这些提案的共同问题是,它们往往会破坏路径。也就是说,您不能再使用路径来定义可以填充的边界,也不能在交叉点等处使用路径。这里有一种避免此问题的方法,基于这个答案. 看看 MWE

\documentclass[tikz,border=3.14mm]{standalone} 
\usetikzlibrary{intersections} % only to illustrate the path does not get destroyed
\pgfkeys{tikz/.cd,
set edge options/.code={\tikzset{edge style/.style={#1}}},
}
\begin{document}
\begin{tikzpicture}[every edge/.append code = {% https://tex.stackexchange.com/a/396092/121799 
    \global\let\currenttarget\tikztotarget % save \tikztotarget in a global variable
    \pgfkeysalso{append after command={to[edge style] (\currenttarget)}}},
every edge/.append style={edge style}   ] 
\path[name path=A,fill=blue!20] (0.25,0)  
[set edge options={in=-120,out=50}]  edge[ultra thick] (0.75,1.2) 
[set edge options={in=-140,out=60}] edge[ultra thick,blue]  (1.25,1.5) 
[set edge options={in=70,out=50}] edge[ultra thick,red,dashed]  (1.75,0.7) 
-- (2.25,0.1) 
[set edge options={bend left=20}] edge[purple,dotted,thick] (2.75,-0.5) 
[set edge options={bend left=20}] edge[purple,dashed,thick] cycle;
\draw[name path=B] (3,0) to[bend right=16] (0,1);
\fill[yellow,name intersections={of=A and B}] (intersection-1) circle(2pt)
(intersection-2) circle(2pt);
\end{tikzpicture} 
\end{document}

在此处输入图片描述

你需要做的就是在路径中说

(<point n>) [edge options={<path options>}] edge[<visual>] (<point n+1>)

这里的路径选项是你通常会输入到to[...]路径的 中的选项,例如in=...,out=...,looseness=...bend left=...。视觉元素是那些影响曲线样式的元素,例如颜色、dashed、厚度等。具体来说,这些是你通常可以不是沿着路径改变。

请注意,该intersections库只是为了说明而加载的,这里提出的语法并不依赖于它。

另一更新:刚刚注意到你不必将<path options><visual> one 分开。TiZ 非常聪明,如果指令不适用,它会忽略它们。因此,你可以进一步简化事情

\documentclass[tikz,border=3.14mm]{standalone} 
\pgfkeys{tikz/.cd,
edge options/.code={\tikzset{edge style/.style={#1}}},
}
\begin{document}
\begin{tikzpicture}[every edge/.append code = {% https://tex.stackexchange.com/a/396092/121799 
    \global\let\currenttarget\tikztotarget % save \tikztotarget in a global variable
    \pgfkeysalso{append after command={to[edge style] (\currenttarget)}}},
every edge/.append style={edge style}   ] 
\path[fill=blue!20] (0.25,0)  
[edge options={in=-120,out=50,ultra thick,black,-latex}] edge (0.75,1.2) 
[edge options={in=-140,out=60,ultra thick,blue,latex-}] edge   (1.25,1.5) 
[edge options={in=70,out=50,ultra thick,red,dashed}] edge  (1.75,0.7) 
-- (2.25,0.1) 
[edge options={bend left=20,purple,dotted,thick}] edge (2.75,-0.5) 
[edge options={bend left=20,purple,dashed,thick}] edge cycle;
\end{tikzpicture} 
\end{document}

在此处输入图片描述

相关内容