An alternative could be to try the show path construction
decoration. It takes a bit of time to set up (e.g., automatically placing the control labels "nicely" while also allowing for custom placement) but after that then using it is pretty easy and can be controlled using TikZ styles:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{decorations.pathreplacing,shapes.misc,calc}
\tikzset{show bezier controls/.style={decoration={show path construction,
curveto code={
\tikzset{#1}
\path [hull/.try]
(\tikzinputsegmentfirst) -- (\tikzinputsegmentsupporta) --
(\tikzinputsegmentsupportb) -- (\tikzinputsegmentlast);
\path [curve/.try] (\tikzinputsegmentfirst) .. controls
(\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
.. (\tikzinputsegmentlast);
\path let \p1=(\tikzinputsegmentfirst), \p2=(\tikzinputsegmentsupporta),
\p3=(\tikzinputsegmentsupportb), \p4=(\tikzinputsegmentlast),
% Ugh. All this just to get the mid-angles of the relevant lines
\n1={atan2(\y2-\y1,\x2-\x1)}, \n2={atan2(\y2-\y3,\x2-\x3)},
\n2={abs(\n2-\n1)<180 ? (\n2 + \n1)/2+180 : (\n2 + \n1)/2},
\n3={atan2(\y3-\y2,\x3-\x2)}, \n4={atan2(\y3-\y4,\x3-\x4)},
\n3={abs(\n4-\n3)<180 ? (\n4 + \n3)/2+180 : (\n4 + \n3)/2}
in
\foreach \l [count=\i] in \tikzbezierlabels{ (\p\i)
node [inner sep=0pt, marking/.try, marking=\i/.try] {}
node [anchor=\n\i, marking label/.try, marking label \i/.try] {$\l$}
};
}}, decorate},
bezier labels/.store in=\tikzbezierlabels, bezier labels={,,,}
}
\begin{document}
\begin{tikzpicture}[
hull/.style={draw=green},
curve/.style={thick, draw=blue},
marking/.style={circle, draw=black, fill=red, minimum size=2.5pt},
marking label/.style={shape=circle},
bezier labels={P_0, P_a, P_b, P_1}
]
\path [show bezier controls] (1,0) .. controls (2,3) and (5,4) .. (6,1);
\path [show bezier controls, bezier labels={P_0, P_1, P_2, P_3}]
(0,4) .. controls (1,8) and (4,5) .. (6,10);
\path [show bezier controls={hull/.style={fill=gray!20, draw=black, dotted},
curve/.style={draw=black},
marking/.style={solid,shape=cross out, draw=black!50, thick, minimum size=3pt},
marking label/.append style={outer sep=.25cm, fill=blue!20},
marking label 2/.style={text=red}, bezier labels={P,Q,R,S}}, shift=(90:10)]
(0,0) .. controls ++(4,4) and ++(-4,3) .. (2,0);
\end{tikzpicture}
\end{document}