Both curve() and spline() permit multiple sets of control and end points, although code should be added to check for the right number of points. As stated before, these are piecewise continuous, so smooth continuous curves are *not* produced. For compatibility with existing uses, the default should be piecewise continuous. You might want that to show, say, output of a full wave rectifier (with sine wave input). For most purposes, you would want to draw a smoothly continuous curve, which may require the synthesis of new control points.

If the curve is intended to pass *through* all the given points, that's a whole 'nother beast, with multiple synthesized control points. It could be either cubic or quadratic. A flag to control whether to *move* to the first point could be given, in the style of arc() and other such curves.

It appears that spline()'s synthesis of two control points *may* be a normal quadratic-to-cubic Bézier curve conversion. I still need to look at it in detail, but it looks close, at least. I'm still not sure about the two PDF variants, where the second control point is one of the end points.

Per the tutorials, a quadratic curve is second power (with one control point), and a cubic curve is third power (with two control points). A quadratic (as given in spline()) can be converted to a cubic (the curve() call). Higher power curves (N^{th} power, with N-1 control points) may be defined; perhaps this could be useful in the future. We already have circular and elliptical arcs in PDF::Builder; I'm not sure there's any point in exploring other curve systems. That might best be left to specialized applications, such as drawing Bézier *surfaces*.