Draw curve in same curve small
One way is not to draw two paths, but one path at two thicknesses
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\draw [line width=10pt] plot[smooth, tension=.7] coordinates {(-4,2.5) (-3,3) (-2,2.8) (-0.8,2.5) (-0.5,1.5) (0.5,0) (0,-2)(-1.5,-2.5) (-4,-2) (-3.5,-0.5) (-5,1) (-4,2.5)};
\draw [line width=5pt, white] plot[smooth, tension=.7] coordinates {(-4,2.5) (-3,3) (-2,2.8) (-0.8,2.5) (-0.5,1.5) (0.5,0) (0,-2)(-1.5,-2.5) (-4,-2) (-3.5,-0.5) (-5,1) (-4,2.5)};
\end{tikzpicture}
\end{document}
Provided your curve is sufficiently smooth and has no sharp corners then you can exploit Metapost's direction
feature to do this. Here I have used Metapost wrapped in luamplib
so compile with lualatex
. The advantage compared to drawing with a thick pen and erasing the middle is that you can use different pens or patterns as I have shown.
The variable name scc
was to remind me that it's a smooth closed curve...
\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path scc, inner, outer;
scc = ( (-4.0, 2.5) ..
(-3.0, 3.0) ..
(-2.0, 2.8) ..
(-0.8, 2.5) ..
(-0.5, 1.5) ..
( 0.5, 0.0) ..
( 0.0,-2.0) ..
(-1.5,-2.5) ..
(-4.0,-2.0) ..
(-3.5,-0.5) ..
(-5.0, 1.0) ..
cycle ) scaled 1cm;
drawarrow scc;
s = 1/16;
inner = for t=s step s until length(scc):
unitvector direction t of scc scaled 6 rotated -90 shifted point t of scc ..
endfor cycle;
outer = for t=s step s until length(scc):
unitvector direction t of scc scaled 6 rotated +90 shifted point t of scc ..
endfor cycle;
draw inner dashed evenly withcolor 2/3 blue;
draw outer dashed withdots withcolor 1/2 red;
endfig;
\end{mplibcode}
\end{document}
Note that if the original path ran counter-clockwise you would need to reverse the signs of the rotations to get the inner and outer paths correctly.
Same principle as David's answer. The lines can be drawn as double line with option double
. The white space between is configured by option double distance
.
The plot is closed, but it is drawn as open plot ending and starting at the same point. This causes unnecessary artifacts at this point. Removing the duplicate point and option smooth cycle
fixes this.
Example:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\draw [
double=white,
double distance=20pt,
thick,
] plot[smooth cycle, tension=.7] coordinates {
(-4,2.5) (-3,3) (-2,2.8) (-0.8,2.5) (-0.5,1.5)
(0.5,0) (0,-2)(-1.5,-2.5) (-4,-2) (-3.5,-0.5) (-5,1)
};
\end{tikzpicture}
\end{document}
The disadvantage of this approach is that the space between the lines is explicitly drawn in white color as can be seen in the image above.