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 # Iosevka Comfy
Private build of the Iosevka monospaced font, with adjusted metrics and Private build of the Iosevka monospaced font, with a rounded style,
lots of overrides for individual glyphs at both roman and italic adjusted metrics, and overrides for almost all individual glyphs in both
variants. roman (upright) and italic (slanted) variants.
Configured in accordance with the documentation of the upstream project: Iosevka Comfy is wider and more vertically compact than the standard
<https://github.com/be5invis/Iosevka>. Last update on 2021-09-08 using upstream configuration. Glyphs are rounder and have tailed ends or
Iosevka version `v10.1.1` commit `9f26049`. 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 The overall appearance of the typeface is optimised for small point
are otherwise intended only for my private use. 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-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 cv01 = 1 # A cap straight
cv02 = 1 # B cap straight cv02 = 1 # B cap straight
cv03 = 1 # C cap serifless 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 cv05 = 1 # E cap serifless
cv06 = 1 # F cap serifless cv06 = 1 # F cap serifless
cv07 = 4 # G cap toothed cv07 = 4 # G cap toothed
@ -37,6 +37,7 @@ cv22 = 1 # W straight
cv23 = 1 # X cap straight cv23 = 1 # X cap straight
cv24 = 1 # Y cap straight cv24 = 1 # Y cap straight
cv25 = 1 # Z cap straight cv25 = 1 # Z cap straight
cv26 = 10 # a single storey earless tailed bottom
cv27 = 1 # b toothed cv27 = 1 # b toothed
cv28 = 1 # c serifless cv28 = 1 # c serifless
cv29 = 1 # d toothed cv29 = 1 # d toothed
@ -47,12 +48,14 @@ cv37 = 10 # l serified flat tailed
cv42 = 9 # r compact cv42 = 9 # r compact
cv43 = 1 # s serifless cv43 = 1 # s serifless
cv44 = 2 # t flat hook cv44 = 2 # t flat hook
cv45 = 4 # u tailed
cv49 = 6 # y cursive flat terminal hook cv49 = 6 # y cursive flat terminal hook
cv53 = 1 # Λ lambda cap straight cv53 = 1 # Λ, Δ lambda and delta cap straight
cv54 = 2 # α alpha straight tailed cv54 = 2 # α alpha straight tailed
cv55 = 1 # γ gamma cap straight cv55 = 1 # Γ gamma cap straight
cv56 = 6 # ι iota serified flat tailed cv56 = 6 # ι iota serified flat tailed
cv57 = 2 # λ lambda top tailed cv57 = 2 # λ lambda top tailed
cv71 = 13 # 0 oval dashed forward slash
cv74 = 2 # 3 arched cv74 = 2 # 3 arched
cv76 = 2 # 5 open contour cv76 = 2 # 5 open contour
cv78 = 1 # 7 straight 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] # Optional; Configure single character's variant for Upright and Oblique; Overrides [design]
[buildPlans.iosevka-comfy.variants.upright] [buildPlans.iosevka-comfy.variants.upright]
cv26 = 1 # a double storey
cv30 = 1 # e straight cv30 = 1 # e straight
cv31 = 16 # f serifless bottom flat top crossbar at x height cv31 = 16 # f serifless bottom flat top crossbar at x height
cv32 = 9 # g single storey flat hook earless cornered top cv32 = 9 # g single storey flat hook earless cornered top
cv36 = 1 # k straight cv36 = 1 # k straight
cv38 = 9 # m earless double arch cv38 = 6 # m earless double arch short middle leg
cv39 = 3 # n earless straight cv39 = 3 # n earless straight
cv40 = 2 # p earless cv40 = 2 # p earless
cv41 = 2 # q earless cv41 = 2 # q earless
cv45 = 1 # u straight
cv46 = 1 # v straight cv46 = 1 # v straight
cv47 = 1 # w straight cv47 = 1 # w straight
cv48 = 1 # x straight cv48 = 1 # x straight
cv50 = 1 # z straight cv50 = 1 # z straight
cv71 = 7 # 0 oval slashed
cv72 = 2 # 1 serified with base cv72 = 2 # 1 serified with base
cv73 = 1 # 2 straight cv73 = 1 # 2 straight
cv75 = 3 # 4 semi-open contour 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] # Optional; Configure single character's variant for Italic only; Overrides [design]
[buildPlans.iosevka-comfy.variants.italic] [buildPlans.iosevka-comfy.variants.italic]
cv26 = 10 # a single storey earless tailed
cv30 = 2 # e curly cv30 = 2 # e curly
cv31 = 14 # f extended flat top bottom hook cv31 = 14 # f extended flat top bottom hook
cv32 = 7 # g single storey flat hook cv32 = 7 # g single storey flat hook
@ -110,12 +109,10 @@ cv38 = 2 # m straight middle shortleg
cv39 = 1 # n straight cv39 = 1 # n straight
cv40 = 1 # p straight cv40 = 1 # p straight
cv41 = 1 # q straight cv41 = 1 # q straight
cv45 = 4 # u tailed
cv46 = 2 # v curly cv46 = 2 # v curly
cv47 = 2 # w curly short middle top cv47 = 2 # w curly short middle top
cv48 = 2 # x curly cv48 = 2 # x curly
cv50 = 4 # z curly cv50 = 4 # z curly
cv71 = 2 # 0 slashed
cv72 = 1 # 1 serified no base cv72 = 1 # 1 serified no base
cv73 = 2 # 2 curly cv73 = 2 # 2 curly
cv75 = 1 # 4 closed contour crossing cv75 = 1 # 4 closed contour crossing