Skip to content

Design guidelines

Corne2Plum3 edited this page May 5, 2026 · 8 revisions

Design guidelines

Updated to version 2.1.0.

Some not-so-much nonsense explaining how most glyphs of the font are designed. Worth reading if you want to create new glyphs or redesign already existing ones.

Note

what's being described in the document are guidelines, but does not always affects every glyphs in the font. You are not forced to follow everything at 100%, take this with a grain of salt.

Design

Glyphs categories

For the design, the glyphs are mainly divided into these arbitrary groups, mainly decided on the overall glyph size.

  • Uppercase and digits (A, B, $, 1, 2, ...)
  • Lowercase, small caps and others (a, b, é, +, *...)
  • Exponents, subscripts, etc. (², , ª, ʰ, ...)
  • Thick accents, diacritics and small modifiers (´, ˆ, ˉ, ...)
  • Thin accents, diacritics and small modifiers (˚, ˛, ¸, ...)

Weights

The font is designed using these 3 weights: Thin, Regular and ExtraBlack (the other weights in-between are generated automatically using interpolation).

Name Value Relative thickness Relative width*
Thin 100 0.25x 0.88x
Regular 400 1.00x 1.00x
ExtraBlack 1000 2.00x 1.20x

* Excludes left and right padding. Does not affects all glyphs

Overshoot / Undershoot

The shape of a glyph may impact how the height of a glyph is perceived, especially if the top or bottom is sharp. In the picture below, on the left, the vertical line looks taller than the circle and the triangle. To compensate this issue, we apply an overshoot (if it's at the top) and/or an undershoot (if it's a the bottom), where the glyphs slightly goes over/under the line. An example is given on the picture above at the right.

overshoot

For Giphurs, the value of overshoot/undershoot is given for round glyphs such as Q, o, n or 2 (top only) in the table below (there's no pointy glyphs like the triangle).

overshoot_2

Category \ Weight 100 400 1000
Uppercase & Lowercase 10 20 30
Exponents 6 12 18

Spacing

At the left and the right of the glyph itself, there's some space, depending of the "shape" at the left and on the right. We mainly use 3 "types" of "shapes": vertical (n in the picture below), round (o) and pointy (x), so the space between the glyphs looks the same. Kerning tables are also used (for example for AV or ko), but the idea is too use them the least often.

The table below does not cover all glyphs, but you might want to use lower values for some glyphs such as l or t. Also, left and right sides of the glyphs are independant, for example for D, we use n at the left and o at the right.

Number after the @ is the weight.

spacing

Category n @ 100 o @ 100 x @ 100 n @ 400 o @ 400 x @ 400 n @ 1000 o @ 1000 x @ 1000
Uppercase & Lowercase 180 140 100 140 100 70 100 70 50
Exponents 108 84 72 85 60 40 42 30 20
Accents (all)  120 120 120 70 70 70 35 35 35

Caution

These values does not affects numbers (expect pnum), where the width must be the same across all weights: 1232 for normal sized digits and 796 for exponents.

Stroke thickness

Giphurs is a sans-serif font, meaning the strokes width should be consistent. However, to achieve this look of consistency, the vertical and horizontal lines don't have the same thickness (the horizontal lines should be thinner than the vertical ones). The table below gives the thickness mainly used in the font. For diagonal lines there isn't any values, use your eyes to decides what looks the best. Also, you might want to use thinner stroke if the glyph is visually dense (such as # or 8 for example).

stroke_thickness

Number after the @ is the weight.

Category H @ 100 V @ 100 H @ 400 V @ 400 H @ 1000 V @ 1000
Uppercase 42 46 168 190 336 380
Lowercase 40 44-45 160 180 320 360
Exponents 30 32-33 120 135 240 270
Thick accents 40 44-45 140 178 232 (?) 356 (?)
Thin accents 40 44-45 117 128 150 160

Dots are perfect circles with the following diameters:

Weight 100 400 1000
Diameter 128 256 400

Terminals

All terminals (end of strokes) are simples lines. They can be vertical, horizontal, 15° or 30° angles to a vertical or a horizontal line. For large arcs ending on a vertical seen such as 2 and ?, a slanted terminal as seen in the picture can also be used.

terminals

In the picture, red lines are horizontal and blue lines are vertical lines.

Vertical metrics

A glyph should have all points between -568 and 2122 (I forgot the max value sorry) in height.

vertical_metrics

Quick build

This section shows how to build some glyphs inside FontForge. Note that the glyphs might need adjustements after following those steps.

Exponents

Element > Style > Add Subscript/Superscript:

  • Introduction:
    Feature tag Glyph Extension Vertical offset
    sups superior 810
    numr numr 622
    dnom dnom 0
    subs subscript -188
  • Stems:
    • Uniform scaling for stems of any width and direction
    • Height of horizontal stems: 71.2% if uppercase, 75% for lowercase.
  • Horizontal:
    • Uniform scaling for horizontal counters and side bearings
    • Counter size: 58%
  • Vertical:
    • Control Vertical Mapping
    • Vertical Scale: 58%

Caution

Digits must be in one piece only.

Italics

  1. Element > Style > Oblique*:

    • angle = -10 degrees
  2. Element > Transformations > Transform*:

    • Origin: Center of Selection
    • Move: X = -130, Y = 0
    • Transform width too OFF
    • Transform kerning classes too OFF
    • Transform simple positioning features and kern pairs OFF
    • Round to int OFF
  3. Element > Add Extrema

  4. Element > Simplify

Important

The goal of steps 3 and 4 is to get rid of points that does not have vertical or horizonal tangents. Using the simplify too might not give the same amount of points for every weight. As every weight must have the same amount of points, you might have to manually add some after step 4.

  1. Round > To Int

Small caps

Element > Style > Add Small Capitals:

  • Introduction:
    • Small Caps
    • Letters: sc
  • Stems:
    • Separate ratios for horizontal and vertical stems
    • Height of horizonral stems: 95.2381% (exact value: $160/168$)
    • Width of vertical stems: 94.7368% (exact value: $180/190$)
  • Horizontal:
    • Uniform scaling for horizontal counters and side bearings
    • Counter size: 81.081% (exact value: $1200/1480$)
  • Vertical:
    • Control Vertical Mapping
    • Vertical Scale: 81.081%

Clone this wiki locally