Rebuild Iosevka Comfy (upstream v.11.2.7)

* Improve: the README to explain how Iosevka Comfy differs from the
  standard Iosevka style.

* Make the capital 'D' use a top and bottom serif to avoid the issue
  where TODO at small point sizes reads like TOOO.  This reverts commit
  3e3a91f.

* Use a single storey 'a' for roman and italic variants.  The rounded
  shape is more consistent with the rest of the typeface.

* Use a tailed 'u' for both variants, for the same reason as above.

* Revert to using an 'm' with a short middle leg to avoid the problem
  where the three legs visually blend into a solid block at small point
  sizes.  Roman and italic variants have slighty different 'm' glyphs
  due to their particular requirements, though both use the short middle
  leg style in the interest of consistency.

* Make the '0' have an oval shape for both roman and italic variants
  with a dashed forward slash which looks like a dot at small point
  sizes.  The slashed zero that was used before feels like an
  exaggeration when the oval shape of the character already is
  sufficiently distinct from 'O'.  This new style is better than the
  alternative of the dotted zero because the inside of the character is
  more subtle (again, avoiding the possible exaggeration).

* Other minor tweaks to the comments in the private-build-plans.toml.
This commit is contained in:
Protesilaos Stavrou 2022-01-25 14:51:22 +02:00
parent 3e3a91fb83
commit 089b1841fe
25 changed files with 74 additions and 21 deletions

View file

@ -1,20 +1,76 @@
# Iosevka Comfy
Private build of the Iosevka monospaced font, with adjusted metrics and
lots of overrides for individual glyphs at both roman and italic
variants.
Private build of the Iosevka monospaced font, with a rounded style,
adjusted metrics, and overrides for almost all individual glyphs in both
roman (upright) and italic (slanted) variants.
Configured in accordance with the documentation of the upstream project:
<https://github.com/be5invis/Iosevka>. Last update on 2021-09-08 using
Iosevka version `v10.1.1` commit `9f26049`.
Iosevka Comfy is wider and more vertically compact than the standard
upstream configuration. Glyphs are rounder and have tailed ends or
serifs wherever that is required to both impose an aesthetic rhythm and
keep characters distinct from each other. Roman and italic variants are
made to look more consistent while retaining their stylistic features
(e.g. the italics do not have calligraphic tendencies but still use
carefully selected glyphs that are distinct from the roman
counterparts).
The files are provided as-is in the hope that they may prove useful, but
are otherwise intended only for my private use.
The overall appearance of the typeface is optimised for small point
sizes. This informs the choice of certain glyphs such as `D` with a top
and bottom serif and a curved body to clearly differentiate it from the
capital `O`, or an `m` with a short middle leg to prevent the letter's
lines from visually blending into a box-like shape (always referring to
small point sizes). For larger size, these details are not strictly
necessary, though Iosevka Comfy should still look decent despite their
presence.
Considering the line height and width as well as the desired appearance
of each glyph, the optimal point values are: 8, 10, 12, 13. Other sizes
which are almost as good: 9, 10.5, 13.5.
[ For the `:height` face attribute in GNU Emacs, the value is equal to
the point size × 10. ]
## Build information
Iosevka Comfy is configured in accordance with the documentation of the
upstream project: <https://github.com/be5invis/Iosevka>. This
practically means that we define our `private-build-plans.toml`, install
the `npm` dependencies, and then build the `.ttf` files with the
following command:
```sh
npm run build -- ttf::iosevka-comfy
```
The last update to Iosevka Comfy was done on 2022-01-25 using upstream
Iosevka version `v11.2.7` at commit `f630c223`.
Each file is provided as-is in the hope that it may prove useful, but
is otherwise intended only for my private use.
## Character sample and common patterns
Note that for the sake of this demonstration, the point size is higher
than the intended target range.
![iosevka-comfy-sample-light](./iosevka-comfy-sample-light.png)
![iosevka-comfy-sample-dark](./iosevka-comfy-sample-dark.png)
## Comparison to base Iosevka
![iosevka-comfy-sample-light-large](./iosevka-comfy-sample-light-large.png)
This is a regular Emacs session with the default font set to point size
10 (a `:height` face attribute of 100). Obverse, in particular, Iosevka
Comfy's proportions (wider, shorter line height than Iosevka) and the
less exaggerated differences between its roman and italic characters to
make the latter look closer to their roman counterparts without
detracting from their subtleties (e.g. for the italic variant of Iosevka
Comfy the `f` is not cursive, the `y` is not so curvy, the descender of
the `g` is not closed, while the `t`, `i`, `l` have short tails, etc.).
![iosevka-comfy-sample-dark-large](./iosevka-comfy-sample-dark-large.png)
![iosevka-comfy-10pt](./iosevka-comfy-10pt.png)
![iosevka-10pt](./iosevka-10pt.png)
For Iosevka Comfy to have roughly the same line width as Iosevka, it has
to be set at one point less. It still has a more compact line height.
Compare the following screenshot to the one above:
![iosevka-comfy-9pt](./iosevka-comfy-9pt.png)

BIN
iosevka-10pt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

BIN
iosevka-comfy-10pt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

BIN
iosevka-comfy-9pt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 363 KiB

View file

@ -15,7 +15,7 @@ serifs = "sans" # Optional; Values: `sans` or `slab`
cv01 = 1 # A cap straight
cv02 = 1 # B cap straight
cv03 = 1 # C cap serifless
cv04 = 4 # D cap curly with top serif
cv04 = 6 # D cap curly with top and bottom serif (without serifs TODO reads like TOOO at small point sizes)
cv05 = 1 # E cap serifless
cv06 = 1 # F cap serifless
cv07 = 4 # G cap toothed
@ -37,6 +37,7 @@ cv22 = 1 # W straight
cv23 = 1 # X cap straight
cv24 = 1 # Y cap straight
cv25 = 1 # Z cap straight
cv26 = 10 # a single storey earless tailed bottom
cv27 = 1 # b toothed
cv28 = 1 # c serifless
cv29 = 1 # d toothed
@ -47,12 +48,14 @@ cv37 = 10 # l serified flat tailed
cv42 = 9 # r compact
cv43 = 1 # s serifless
cv44 = 2 # t flat hook
cv45 = 4 # u tailed
cv49 = 6 # y cursive flat terminal hook
cv53 = 1 # Λ lambda cap straight
cv53 = 1 # Λ, Δ lambda and delta cap straight
cv54 = 2 # α alpha straight tailed
cv55 = 1 # γ gamma cap straight
cv55 = 1 # Γ gamma cap straight
cv56 = 6 # ι iota serified flat tailed
cv57 = 2 # λ lambda top tailed
cv71 = 13 # 0 oval dashed forward slash
cv74 = 2 # 3 arched
cv76 = 2 # 5 open contour
cv78 = 1 # 7 straight
@ -76,21 +79,18 @@ cv99 = 1 # .:; circular punctuation marks
# Optional; Configure single character's variant for Upright and Oblique; Overrides [design]
[buildPlans.iosevka-comfy.variants.upright]
cv26 = 1 # a double storey
cv30 = 1 # e straight
cv31 = 16 # f serifless bottom flat top crossbar at x height
cv32 = 9 # g single storey flat hook earless cornered top
cv36 = 1 # k straight
cv38 = 9 # m earless double arch
cv38 = 6 # m earless double arch short middle leg
cv39 = 3 # n earless straight
cv40 = 2 # p earless
cv41 = 2 # q earless
cv45 = 1 # u straight
cv46 = 1 # v straight
cv47 = 1 # w straight
cv48 = 1 # x straight
cv50 = 1 # z straight
cv71 = 7 # 0 oval slashed
cv72 = 2 # 1 serified with base
cv73 = 1 # 2 straight
cv75 = 3 # 4 semi-open contour
@ -101,7 +101,6 @@ cv90 = 1 # @ at threefold
# Optional; Configure single character's variant for Italic only; Overrides [design]
[buildPlans.iosevka-comfy.variants.italic]
cv26 = 10 # a single storey earless tailed
cv30 = 2 # e curly
cv31 = 14 # f extended flat top bottom hook
cv32 = 7 # g single storey flat hook
@ -110,12 +109,10 @@ cv38 = 2 # m straight middle shortleg
cv39 = 1 # n straight
cv40 = 1 # p straight
cv41 = 1 # q straight
cv45 = 4 # u tailed
cv46 = 2 # v curly
cv47 = 2 # w curly short middle top
cv48 = 2 # x curly
cv50 = 4 # z curly
cv71 = 2 # 0 slashed
cv72 = 1 # 1 serified no base
cv73 = 2 # 2 curly
cv75 = 1 # 4 closed contour crossing