-
Notifications
You must be signed in to change notification settings - Fork 0
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.
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 (
˚,˛,¸, ...)
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
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.

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).

| Category \ Weight | 100 | 400 | 1000 |
|---|---|---|---|
| Uppercase & Lowercase | 10 | 20 | 30 |
| Exponents | 6 | 12 | 18 |
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.

| 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.
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).

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 |
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.

In the picture, red lines are horizontal and blue lines are vertical lines.
A glyph should have all points between -568 and 2122 (I forgot the max value sorry) in height.

This section shows how to build some glyphs inside FontForge. Note that the glyphs might need adjustements after following those steps.
Element > Style > Add Subscript/Superscript:
- Introduction:
Feature tag Glyph Extension Vertical offset supssuperior810 numrnumr622 dnomdnom0 subssubscript-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.
-
Element > Style > Oblique*:
- angle = -10 degrees
-
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
-
Element > Add Extrema
-
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.
- Round > To Int
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%