How to Add Extrema Points in FontForge
Adding extrema points to curves in FontForge is essential for optimal font hinting, predictable rasterization, and standard PostScript or TrueType compliance. Extrema are the on-curve points positioned at the absolute horizontal (leftmost and rightmost) and vertical (highest and lowest) limits of a curve. This guide explains how to automatically insert mathematically precise extrema to existing curves, as well as how to place and align them manually.
Method 1: Automatic Insertion (Recommended)
FontForge features a dedicated command that calculates the exact mathematical tangents of Bézier curves and adds points at all horizontal and vertical extrema without altering the shape.
- Open the Glyph: Double-click the glyph in the Font View to open it in the Outline Editor window.
- Select the Target Curve:
- Use the Pointer tool (
V) to click or drag a selection box around the specific curve segment or contour where you want to add extrema. - Alternatively, press
Ctrl + A(orCmd + Aon macOS) to select the entire glyph.
- Use the Pointer tool (
- Execute the Command:
- Go to the menu bar and select Element > Add Extrema.
- Alternatively, press the keyboard shortcut Ctrl + Shift + X (or Cmd + Shift + X on macOS).
FontForge will instantly generate on-curve points at every local maximum and minimum on the selected path, automatically adjusting the adjacent control handles to preserve the outline.
Method 2: Manual Placement and Alignment
If you prefer to place a point manually at an extremum:
- Activate the Point Tool: Select the Point tool from the editing palette (the curve point icon).
- Place the Point: Click directly onto the path at the furthest vertical or horizontal crest of the curve.
- Align the Handles:
- A true extremum must have its control handles aligned strictly horizontally or vertically.
- Select the point's control handles with the Pointer tool and hold Shift while dragging them to lock their movement to 90-degree increments.
- For absolute precision, right-click the point, select Get Info, and ensure that the incoming and outgoing control handles share either the exact same X-coordinate (for vertical extrema) or Y-coordinate (for horizontal extrema) as the point itself.