Rectangles and circles run out fast; everything else in vector drawing is the <path> element. Its d attribute is a tiny language — a few letter commands — and reading it fluently is what separates copying SVG from writing it.
Step 1 — Straight-line paths
M moves the pen, L draws a line, Z closes the shape:
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path d="M 40 160 L 120 40 L 200 160 Z"
fill="none" stroke="black" stroke-width="2"/>
</svg>
That’s a triangle: move to (40,160), lines to two corners, close back to the start. Run after each change — the preview re-renders from the markup.
Step 2 — Smooth curves
Q is a quadratic curve: one control point that the curve bends toward, then the end point:
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path d="M 30 170 Q 200 -60 370 170"
fill="none" stroke="black" stroke-width="2"/>
</svg>
The curve leaves (30,170) heading at the control point (200,−60) and arrives at (370,170) — a clean arch. For an S-shape you want C (cubic, two control points):
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path d="M 30 100 C 130 -20, 270 220, 370 100"
fill="none" stroke="black" stroke-width="2"/>
</svg>
Step 3 — A waveform, programmatic thinking by hand
Chaining curve segments draws signals and waveforms; lowercase letters are relative moves, which keeps repetition readable:
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path d="M 20 100 q 22 -80 45 0 q 22 80 45 0 q 22 -80 45 0 q 22 80 45 0 q 22 -80 45 0"
fill="none" stroke="black" stroke-width="2"/>
<text x="200" y="180" text-anchor="middle" font-size="14">one oscillation ≈ 90 units</text>
</svg>
Each q 22 -80 45 0 is “half a wave, relative to where the pen is” — five repeats, five cycles, no coordinate arithmetic.
Step 4 — Filled regions
Close a path and give it a translucent fill to mark an area — a shaded region under a curve, an acceptance window:
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path d="M 100 160 Q 200 20 300 160 Z" fill="#7c3aed" fill-opacity="0.15"
stroke="#7c3aed" stroke-width="1.5"/>
<line x1="30" y1="160" x2="370" y2="160" stroke="black" stroke-width="2"/>
</svg>
Step 5 — Export or insert
Export / Insert — vector PDF or into the paper with a \label. Paths stay true curves all the way to print: no resolution, no jaggies, ever.
Tip: When a curve won’t behave, draw its control points temporarily as small circles — seeing where the handles are turns guess-and-check into geometry.